атрибут продукта для номенклатуры предложения и номенклатуры заказа
Как правильно в Magento автоматически сохранять атрибут продукта, чтобы указать товар, а затем, наконец, заказать товар?
Это так же просто, как небольшой конфигурационный XML, или это ручной процесс, который просматривается перед сохранением событий и так далее?
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;
}
Это делается путем объединения ваших знаний о наблюдателях и 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/