атрибут продукта для номенклатуры предложения и номенклатуры заказа


Как правильно в Magento автоматически сохранять атрибут продукта, чтобы указать товар, а затем, наконец, заказать товар?

Это так же просто, как небольшой конфигурационный XML, или это ручной процесс, который просматривается перед сохранением событий и так далее?

Author: Aasim Goriya, 2013-05-16

2 answers

Одним из способов было бы использовать наблюдателя и преобразователь.

Наблюдатель должен был бы получить атрибут из продукта в предложение (используя атрибут, называемый "тест"), а преобразователь получает атрибут из предложения в заказ.

В вашей конфигурации:

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

В вашем наблюдателе:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}
 21
Author: Laura, 2013-05-16 21:08:43

Это делается путем объединения ваших знаний о наблюдателях и config.xml . Config.xml будет управлять предоставлением определения пользовательского атрибута для элемента предложения, а наблюдатель будет обрабатывать сохранение атрибута продукта в предложении при добавлении в предложение.

Оттуда вы используете config.xml чтобы вызвать определение набора полей, которое будет обрабатывать преобразование из quote_item в order_item.

Полное раскрытие информации: Приведенный ниже контент взят из Atwix. Ссылка под ответом.

Сначала вы должны добавить пользовательский атрибут в sales->quote->item->product_attributes узел:

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

Это делает атрибут доступным, когда мы будем копировать его из продукта в цитируемый товар, что является нашим следующим шагом. Для этой задачи используется наблюдатель, и событие будет вызвано 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>

Наблюдатель:

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

Последнее, о чем нам нужно заботиться, – это преобразование атрибута из quote_item в order_item. И это можно сделать с помощью 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>

Источник: Atwix (который полон победы): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/

 21
Author: philwinkle, 2013-05-16 21:11:44