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?

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

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/


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.