Produktattribut für Angebotsposition und Bestellposition

25

Wie funktioniert es in Magento, wenn ein Produktattribut automatisch beibehalten wird, um einen Artikel zu zitieren und schließlich zu bestellen?

Ist es so einfach wie ein kleines Konfigurations-XML oder ist es ein manueller Prozess, der vor dem Speichern von Ereignissen und so weiter überprüft wird?

Marty Wallace
quelle

Antworten:

21

Eine Möglichkeit wäre, einen Beobachter und einen Konverter zu verwenden.

Der Beobachter erhält das Attribut vom Produkt zum Angebot (unter Verwendung eines Attributs namens 'test'), und der Konverter erhält das Attribut vom Angebot zur Bestellung.

in deiner konfiguration:

<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>

in Ihrem Beobachter:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}
Laura
quelle
1
Schön gemacht!!!.
Philwinkle
6
Eine Warnung für zukünftige Googler: Löschen Sie Ihren Cache-Ordner manuell, bevor Sie dies testen. Ich habe viele Stunden damit verbracht, viele Variationen dieser Antwort zu testen und Indizes und Caches über das Backend zu löschen. Was auch immer ich getan habe, benutzerdefinierte Attribute wurden nicht in db gespeichert. Das Ändern des Titels von quote_item hat jedoch problemlos funktioniert. Bis ich den Cache manuell geleert habe, indem ich / var / cache gelöscht habe ... Verrückt!
Maurice
Ich möchte dieses benutzerdefinierte Attribut auch im Back-End-Bereich neben "SKU" auf der Seite "Kundenauftragsdetails" anzeigen. Schlagen Sie bitte vor, wie man erreicht?
Inrsaurabh
21

Dazu kombinieren Sie Ihr Beobachterwissen mit config.xml. Config.xml verwaltet die Bereitstellung einer benutzerdefinierten Attributdefinition für das Angebotselement und ein Beobachter übernimmt das Speichern des Produktattributs im Angebot, wenn es einem Angebot hinzugefügt wird.

Von dort aus rufen Sie mit config.xml die Fieldset-Definition auf, die die Konvertierung von quote_itemnach übernimmt order_item.

Vollständige Offenlegung: Der folgende Inhalt stammt von Atwix. Link unter der Antwort.

Zuerst sollten Sie dem sales->quote->item->product_attributesKnoten ein benutzerdefiniertes Attribut hinzufügen :

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

Auf diese Weise wird das Attribut zugänglich, wenn es vom Produkt zum Angebotsposten kopiert wird. Dies ist unser nächster Schritt. Für diese Aufgabe wird der Beobachter verwendet und das Ereignis wird aufgerufen 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>

Beobachter:

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

Das Letzte, worum wir uns kümmern müssen, ist das Konvertieren von Attributen von quote_itemnach order_item. Und das geht mit 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>

Quelle: Atwix (wer ist voll von Gewinn): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/

Philwinkle
quelle
2
+1. Ich habe das Gefühl, ich würde mich selbst +1 geben. Als ich etwas sehr ähnliches einreichen wollte, erschien eine Meldung: "Diese Frage hat eine neue Antwort". Also +1, weil du schnell tippst :)
Marius
Hahaha - es ist wirklich Atwix.
Philwinkle
@philwinkle, Das obige funktioniert gut, aber nehmen Sie an, dass Ihr benutzerdefiniertes Attribut Produktpunkte sind, die von der Menge abhängen. Wenn Produkt A 50 Punkte und 2 Stück hat, sollten die Gesamtpunkte 50 * 2 = 100 sein. Wie setze ich den Wert 100anstatt 50im Angebotsposten? Wenn der Attributwert aktualisiert wird, wie speichere ich diesen aktualisierten Wert und nicht den von admin
Slimshadddyyy am