Magento 观察购物车中已移除的项目

Magento 观察购物车中已移除的项目,magento,observer-pattern,Magento,Observer Pattern,当产品从购物车中取出时,是否有观察者可用于观察事件?我没有找到 我发现的是结帐\u购物车\u更新\u物品\u之后,如果通过更改产品数量来删除产品,则可以使用该功能,但当用户使用“删除”按钮时则不能使用该功能。我现在看到的唯一选择是结帐\u购物车\u在之后保存,\u购物车更改时使用。当然,这需要定制逻辑来检查删除了哪个产品。不完美 那么有没有更好的方法来监视删除事件呢?您可以使用sales\u quote\u remove\u item事件,在Mage\u sales\u Model\u quot

当产品从购物车中取出时,是否有观察者可用于观察事件?我没有找到

我发现的是
结帐\u购物车\u更新\u物品\u之后
,如果通过更改产品数量来删除产品,则可以使用该功能,但当用户使用“删除”按钮时则不能使用该功能。我现在看到的唯一选择是
结帐\u购物车\u在
之后保存,\u购物车更改时使用。当然,这需要定制逻辑来检查删除了哪个产品。不完美


那么有没有更好的方法来监视删除事件呢?

您可以使用
sales\u quote\u remove\u item
事件,在
Mage\u sales\u Model\u quote::removietem()中调度

删除的项作为参数传递给观察者。


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

有关监视事件(无论是什么)的问题,请参阅
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...
}
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...
}