【问题标题】:Update Item Product Options After Order Placed下订单后更新项目产品选项
【发布时间】:2011-10-27 23:14:13
【问题描述】:

我正在研究一个观察者,它需要在下订单后向购物车中的每个项目添加(a)序列密钥。

我现在正在收听活动 sales_model_service_quote_submit_success。

我已经能够访问订单、获取商品列表、遍历它们并获取产品选项。当我尝试 setProductOptions 或保存时,我的代码失败 - 我不确定是哪一个,也许两者兼而有之。

以下是相关代码:

// 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();
    }
}

任何想法我忘记或做错了什么?非常感谢。

【问题讨论】:

    标签: magento observer-pattern


    【解决方案1】:

    没有这样的观察者,至少我没有从代码库中找到它,这是你可以使用的

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

    我们的想法是,如果您在操作前执行此操作,则无需调用 save如果您不小心,请循环。

    【讨论】:

    • 安东,感谢您的意见。我对这种方法有两个想法。首先,事件调度得很好,所以并不是没有使用观察者,而是哪个事件的问题。其次,我需要先确认订单成功,然后才能将密钥发布给客户,因此以某种形式执行订单、更改和重新保存基本上是不可避免的。
    • Anton,虽然你告诉我的一些内容对我的具体情况没有意义,但用于访问 order 变量的新代码行有效($order = $observer->getEvent()- >getOrder();)。我不确定为什么变量结构不同或具有不同的访问权限,但是这种访问变量的新方法起到了作用。感谢您花时间调查我的问题!
    • @Anton,正如你提到的,没有这样的观察者 sales_model_service_quote_submit_success,但我在 app/code/core/Mage/CatalogInventory/etc/config.xml 中找到了这个观察者。你对此有什么解释吗?
    • @shashank 为什么要评论一些可能在 4 年后改变或只是一个错误的东西
    • @Anton 我是 magento 的新手。我只是想确定这个观察者现在是否存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2021-06-04
    • 2019-04-21
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多