Наблюдатель за удаленными предметами в корзине - PullRequest
9 голосов
/ 08 февраля 2012

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

Я нашел checkout_cart_update_items_after, который можно использовать, если продукт удаляется путем изменения количества продуктов, но не тогда, когда пользователь использует кнопку удаления. Единственная альтернатива, которую я вижу в данный момент - это checkout_cart_save_after, которая используется всякий раз, когда меняется корзина. Конечно, для этого нужна специальная логика, которая проверяет, какой продукт был удален Не идеально.

Так есть ли лучший способ следить за событиями удаления?

Ответы [ 2 ]

24 голосов
/ 08 февраля 2012

Вы можете использовать событие sales_quote_remove_item, отправленное в Mage_Sales_Model_Quote::removeItem().
Удаленный элемент передается наблюдателю в качестве аргумента.

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

Чтобы получить связанную модель продукта в обозревателе событий, используйте $observer->getQuoteItem()->getProduct().

3 голосов
/ 08 февраля 2012

По вопросу наблюдения за событиями (какими бы они ни были), см. 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...
}
...