атрибут продукта для цитирования товара и заказа товара


25

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

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

Ответы:


21

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

наблюдатель должен был бы получить атрибут от продукта до котировки (используя атрибут «test»), а конвертер получает атрибут из цитаты в заказ.

в вашем конфиге:

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

1
Красиво сделано !!!
Philwinkle

6
Предупреждение для будущих гуглеров: вручную удалите папку кеша перед тестированием. Я потратил много часов, проверяя множество вариантов этого ответа, очищая индексы и кэши с помощью бэкэнда. Что бы я ни делал, пользовательские атрибуты не сохранялись в БД, однако изменение заголовка quote_item работало нормально. Пока я не очистил кеш вручную , удалив / var / cache ... Crazy!
Морис

Я хочу, чтобы этот настраиваемый атрибут находился также на панели бэкэнда рядом с sku на странице сведений о заказе клиента. Просьба подсказать, как обрести?
Inrsaurabh

21

Это делается путем объединения ваших знаний наблюдателей и 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/


2
+1. Я чувствую, что я + 1 сам. Когда я собирался представить что-то похожее, появилось сообщение: «у этого вопроса новый ответ». так что +1, потому что вы печатаете быстро :)
Marius

Хахаха - это Atwix, правда.
Philwinkle

@philwinkle, выше работает хорошо, но предположим, что ваш пользовательский атрибут - это продуктовые очки в зависимости от кол-во. Если продукт А имеет 50 баллов и 2 кол-во, то общее количество баллов должно быть 50 * 2 = 100. Как мне установить значение 100вместо 50цитаты? Если значение атрибута обновляется, как мне сохранить это обновленное значение, а не то, которое установлено администратором
Slimshadddyyy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.