观察者在购物车中删除了物品

时间:2012-02-08 10:57:18

标签: magento observer-pattern

是否有观察员可以用来观察产品从购物车中取出时的事件?我还没找到。

我发现的是checkout_cart_update_items_after,如果通过更改产品数量删除产品,则可以使用checkout_cart_save_after,但是当用户使用删除按钮时则不能使用{{1}}。我现在看到的唯一选择是{{1}},只要购物车发生变化就会使用{1}}。当然,这需要自定义逻辑来检查哪个产品被删除。不完美。

那么有更好的方法来注意删除事件吗?

2 个答案:

答案 0 :(得分:24)

您可以使用sales_quote_remove_item中发送的Mage_Sales_Model_Quote::removeItem()事件 删除的项目作为参数传递给观察者。

Mage::dispatchEvent('sales_quote_remove_item', array('quote_item' => $item));

要在事件观察者中获取关联的产品模型,请使用$observer->getQuoteItem()->getProduct()

答案 1 :(得分:3)

关于观看事件的问题(无论它们是什么),请参阅Mage_Core_Model_App::dispatchEvent()。调试/记录代码示例:

public function dispatchEvent($eventName, $args)
{
    $argsArray = array();

    $logfile = fopen(Mage::getBaseDir().'/var/log/events.log','a');

    if(is_array($args)){
        foreach ($args as $k => $v){
            switch (gettype($v)) {
                case 'object':
                    $v = get_class($v);
                    break;
                case 'array':
                    $v = 'array';
            }
            $argsArray[$k] = $v;
        }
    }

    $log = $eventName.":\r\t";
    foreach($argsArray as $k => $v){
        $log .= $k;
        $log .= "\r\t\t".$v;
    }
    $log .= "\r\r";

    fwrite($logfile,$log);
    fclose($logfile);

    // ...Rest of method...
}