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


25

Який правильний спосіб мати атрибут продукту в Magento автоматично зберігається, щоб процитувати товар, а потім нарешті замовити товар?

Це так просто, як трохи конфігурувати XML, або це ручний процес, який слід шукати перед збереженням подій тощо?

Відповіді:


21

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

спостерігач мав би отримати атрибут від продукту до лапки (використовуючи атрибут, який називається "тест"), а перетворювач отримує атрибут від цитати до замовлення.

у вашому конфігурації:

<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
Попередження для майбутніх googlers: видаліть кеш-папку вручну перед тестуванням цього. Я витратив багато годин на тестування багатьох варіантів на цю відповідь, очищення індексів та кеш-пам'яті через бекенд. Що б я не робив, спеціальні атрибути не збереглись до db, але зміна заголовка quo_item проте працювала чудово. Поки я очистив кеш вручну , видаливши / var / cache ... Божевільний!
Моріс

Я хочу, щоб цей користувацький атрибут був на панелі, що знаходиться у складі резервної сторінки, а також біля сторінки деталей замовлення на продаж. Будь ласка, підкажіть, як це зробити?
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 собі. Коли я збирався надіслати щось подібне до veeeery, з'явилося повідомлення: "На це питання є нова відповідь". тому +1, тому що ви швидко набираєте :)
Маріус

Хахаха - це Атвікс, справді.
philwinkle

@philwinkle, вищезазначене працює добре, але припустимо, що ваш власний атрибут - це продукти, залежно від кількості. Якщо prod A має 50 балів та 2 qty, то загальна кількість балів повинна бути 50 * 2 = 100. Як встановити значення 100замість 50елемента цитування? Якщо значення атрибута оновлюється, як зберегти оновлене значення, а не встановлене у адміністратора
Slimshadddyyy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.