attribut de produit pour citer l'article et commander l'article


25

Quelle est la bonne façon dans Magento de faire en sorte qu'un attribut de produit soit automatiquement persisté pour citer un article et enfin pour commander l'article?

Est-ce aussi simple qu'un petit fichier de configuration XML ou s'agit-il d'un processus manuel à examiner avant d'enregistrer des événements, etc.?

Réponses:


21

une façon serait d'utiliser un observateur et un convertisseur.

l'observateur devrait obtenir l'attribut du produit au devis (en utilisant un attribut appelé «test»), et le convertisseur obtient l'attribut du devis à la commande.

dans votre config:

<global>
    <fieldsets>
        <sales_convert_quote_item>
            <test>
                <to_order_item>*</to_order_item>
            </test>
        </sales_convert_quote_item>
    </fieldsets>

    <sales>
        <quote>
            <item>
                <product_attributes>
                    <test />
                </product_attributes>
            </item>
        </quote>
    </sales>

    <events>
        <sales_quote_item_set_product>
            <observers>
                <YOUR_MODULE>
                    <class>YOUR_MODULE/observer</class>
                    <method>setTestAttribute</method>
                </YOUR_MODULE>
            </observers>
        </sales_quote_item_set_product>
    </events>
</global>

chez votre observateur:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}

1
Bien fait!!!.
philwinkle

6
Un avertissement pour les futurs googleurs: supprimez manuellement votre dossier de cache avant de le tester. J'ai passé de nombreuses heures à tester de nombreuses variantes de cette réponse, à effacer les index et les caches via le backend. Quoi que je fasse, les attributs personnalisés ne sont pas enregistrés dans db, la modification du titre de quote_item fonctionne cependant correctement. Jusqu'à ce que j'efface le cache manuellement en supprimant / var / cache ... Fou!
Maurice

Je veux également cet attribut personnalisé dans le panneau principal à côté du sku dans la page de détail de la commande client. Veuillez suggérer, comment arriver?
inrsaurabh

21

Cela se fait en combinant vos connaissances des observateurs et config.xml. Config.xml gérera la fourniture d'une définition d'attribut personnalisée sur l'élément de devis, et un observateur gérera l'enregistrement de l'attribut de produit dans le devis lorsqu'il sera ajouté à un devis.

À partir de là, vous utilisez config.xml pour appeler la définition de champ, qui gérera la conversion de quote_itemà order_item.

Divulgation complète: Le contenu ci-dessous provient d'Atwix. Lien sous la réponse.

Au début, vous devez ajouter un attribut personnalisé au sales->quote->item->product_attributesnœud:

<sales>
    <quote>
        <item>
            <product_attributes>
                <custom_attribute />
            </product_attributes>
        </item>
    </quote>
</sales>

Cela rend l'attribut accessible lorsque nous le copierons du produit vers l'article de devis - ce qui est notre prochaine étape. Pour cette tâche, l'observateur est utilisé et l'événement sera appelé sales_quote_item_set_product:

<sales_quote_item_set_product>
    <observers>
        <yourmodule_customattribute>
            <class>yourmodule_customattribute/observer</class>
            <method>salesQuoteItemSetCustomAttribute</method>
        </yourmodule_customattribute>
    </observers>
</sales_quote_item_set_product>

Observateur:

public function salesQuoteItemSetCustomAttribute($observer)
{
    $quoteItem = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $quoteItem->setCustomAttribute($product->getCustomAttribute());
}

La dernière chose dont nous devons nous soucier - c'est de convertir l' attribut de quote_itemen order_item. Et cela peut être fait avec XML:

<fieldsets>
    <sales_convert_quote_item>
        <custom_attribute>
            <to_order_item>*</to_order_item>
        </custom_attribute>
    </sales_convert_quote_item>
    <sales_convert_order_item>
        <custom_attribute>
            <to_quote_item>*</to_quote_item>
        </custom_attribute>
    </sales_convert_order_item>
</fieldsets>

Source: Atwix (qui est plein de victoire): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/


2
+1. J'ai l'impression de m'être +1. Quand j'étais sur le point de soumettre quelque chose de similaire, un message est apparu: «cette question a une nouvelle réponse». donc +1 parce que vous tapez vite :)
Marius

Hahaha - c'est Atwix, vraiment.
philwinkle

@philwinkle, ce qui précède fonctionne bien, mais supposez que votre attribut personnalisé est des points de produit en fonction de la quantité. Si le prod A a 50 points et 2 qté, alors le total des points devrait être 50 * 2 = 100. Comment puis-je définir la valeur 100au lieu de l' 50élément de devis? Si la valeur de l'attribut est mise à jour, comment puis-je enregistrer cette valeur mise à jour et non celle définie par l'administrateur
Slimshadddyyy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.