atrybut produktu, aby podać przedmiot i zamówić przedmiot

25

Jaki jest właściwy sposób Magento na automatyczne utrwalanie atrybutu produktu w celu wyceny przedmiotu, a następnie zamówienia przedmiotu?

Czy jest to tak proste, jak mały plik konfiguracyjny XML, czy też jest to proces ręczny, który analizuje się przed zapisaniem zdarzeń i tak dalej?

Marty Wallace
źródło

Odpowiedzi:

21

jednym ze sposobów byłoby użycie obserwatora i konwertera.

obserwator będzie pobierał atrybut z produktu do oferty (używając atrybutu o nazwie „test”), a konwerter pobiera atrybut z oferty do zamówienia.

w twojej konfiguracji:

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

u twojego obserwatora:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}
Laura
źródło
1
Ładnie wykonane!!!.
philwinkle
6
Ostrzeżenie dla przyszłych pracowników Google: przed testowaniem ręcznie usuń folder pamięci podręcznej. Spędziłem wiele godzin testując wiele odmian tej odpowiedzi, czyszcząc indeksy i pamięci podręczne za pomocą backendu. Cokolwiek zrobiłem, niestandardowe atrybuty nie zostały zapisane w db, zmiana tytułu quote_item jednak działała dobrze. Aż ręcznie wyczyściłem pamięć podręczną , usuwając / var / cache ... Szalony!
Maurice
Chcę ten niestandardowy atrybut w panelu zaplecza, a także obok SKU na stronie szczegółów zamówienia sprzedaży. Uprzejmie zasugeruj, jak osiągnąć?
inrsaurabh
21

Odbywa się to poprzez połączenie wiedzy o obserwatorach i pliku config.xml. Plik Config.xml zarządza udostępnianiem niestandardowej definicji atrybutu w elemencie oferty, a obserwator zajmie się zapisaniem atrybutu produktu w ofercie po dodaniu do oferty.

Stamtąd używasz config.xml, aby wywołać definicję zestawu pól, która będzie obsługiwać konwersję z quote_itemna order_item.

Pełne ujawnienie: Poniższa treść pochodzi od Atwix. Link poniżej odpowiedzi.

Najpierw należy dodać niestandardowy atrybut do sales->quote->item->product_attributeswęzła:

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

Dzięki temu atrybut jest dostępny, gdy będziemy kopiować go z produktu, aby wycenić przedmiot - co jest naszym następnym krokiem. Do tego zadania wykorzystywany jest obserwator, a zdarzenie zostanie wywołane 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>

Obserwator:

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

Ostatnią rzeczą, o którą musimy dbać - jest konwersja atrybutu z quote_itemna order_item. Można to zrobić za pomocą 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>

Źródło: Atwix (który jest pełen win): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/

philwinkle
źródło
2
+1. Czuję się, jakbym dał +1. Kiedy miałem przedstawić coś bardzo podobnego, pojawiła się wiadomość: „to pytanie ma nową odpowiedź”. więc +1, ponieważ piszesz szybko :)
Marius
Hahaha - to naprawdę Atwix.
philwinkle
@ philwinkle, powyższe działa dobrze, ale zakładamy, że niestandardowy atrybut to punkty produktu w zależności od ilości. Jeśli prod A ma 50 punktów i 2 szt., Całkowita liczba punktów powinna wynosić 50 * 2 = 100. Jak ustawić wartość 100zamiast 50pozycji w wycenie? Jeśli wartość atrybutu zostanie zaktualizowana, jak zapisać tę zaktualizowaną wartość, a nie tę ustawioną przez administratora
Slimshadddyyy