Как мне отредактировать атрибут товара с помощью PHP во время оформления заказа в Magento? - PullRequest
1 голос
/ 12 марта 2011

У меня есть вопрос из двух частей о настройке моего магазина Magento.

Когда кто-то покупает загружаемый продукт, я хочу сгенерировать код лицензии и включить его в счет-фактуру.

Я добавил атрибут продукта с названием «license_code» в набор атрибутов по умолчанию для моего продукта, и я хочу установить его значение с помощью php, когда клиент выписывается.

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

Мне также нужно знать, какой скрипт использовать для установки значения атрибута продукта во время этого события.

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Хорошо, я думаю, я понял это.

Я настроил своих наблюдателей событий следующим образом:

<events>
    <sales_order_item_save_before>
        <observers>
            <downloadable_observer>
                <class>Licensing_Catalog_Model_Observer</class>
                <method>generate_licenses</method>
            </downloadable_observer>
        </observers>
    </sales_order_item_save_before>
</events>

, а затем свою функцию наблюдения:

public function generate_licenses($observer)
{
    $orderItem = $observer->getEvent()->getItem();
    $options = $orderItem->getProductOptions();
    $options['licence_code'] = 'YOUR-DOWNLOADABLE-CODE-HERE';
    $orderItem->setProductOptions($options);

  return $this;
}

Большое спасибо за помощь, часовой механизм!

2 голосов
/ 12 марта 2011

Возможные события : sales_order_place_before или sales_convert_quote_*.

Вы не можете сохранить свой атрибут «license_code», так как это повлияет на все продукты, продукт не сохраняет свои значения при заказе. Вместо этого лучшей идеей будет манипулирование параметрами позиции заказа.

function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{
    $orderItem = $observer->getOrderItem();
    $options = $orderItem->getProductOptions();
    $options['licence_code'] = YOUR-DOWNLOADABLE-CODE-HERE;
    $orderItem->setProductOptions($options);
}

Получение кода позже по сути аналогично процессу getProductOptions(), объекты элементов заказа уже используются на страницах представления заказа, поэтому их легко найти и использовать в вашей теме.

...