Обновление товара Варианты продукта после размещения заказа - PullRequest
1 голос
/ 28 октября 2011

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

Я сейчас слушаю событие sales_model_service_quote_submit_success.

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

Вот соответствующий код:

// Get access to order information
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId();
$order = Mage::getModel('sales/order')->load($lastOrderId);

// Get the items from the order
$items = $order->getAllItems();

foreach ($items as $item)
{
    // Pretend here is the call that fetches the serial keys for this item and stores them in $keyString

    // If we actually received the keys in a string, store them with the item
    if (!empty($keyString))
    {
        $productOptions = array();
        if (count($item->getProductOptions()))
        {
            $productOptions = $item->getProductOptions();
        }
        $productOptions['keys'] = $keyString;

        $item->setProductOptions($productOptions);
        $item->save();
    }
}

Есть идеи, что я забыл или сделал неправильно? Большое спасибо.

1 Ответ

1 голос
/ 28 октября 2011

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

Mage::dispatchEvent('sales_model_service_quote_submit_before', array('order'=>$order, 'quote'=>$quote));
Mage::dispatchEvent('sales_model_service_quote_submit_after', array('order'=>$order, 'quote'=>$quote));

и в вашем методе наблюдателя

/**
 * 
 * @param Varien_Event_Observer $observer
 * 
 */
public function setShippingDefaults(Varien_Event_Observer $observer) {
    $order = $observer->getEvent()->getOrder();
}

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

...