Почему CACKOUT_CART_SAVE_AFTER брошен сразу после Sales_QUOTE_SAVE_AFTER?

magento.stackexchange https://magento.stackexchange.com/questions/4141

  •  16-10-2019
  •  | 
  •  

Вопрос

Реализация Mage_Checkout_Model_Cart::save() Метод, по -видимому, приводит к дублированию событий. Почему нестандартный checkout_cart_save_after событие, брошено сразу после общего sales_quote_save_after Событие было бы брошено успешным спасением.

Есть ли причины слушать одно из событий, а не другое? Я вижу, что sales_quote_save_after Событие будет брошено администратором или заказами API, но они могут быть исключены из наблюдателей с помощью указания события внутри <frontend> XML Node в модуле config.xml в любом случае.

Чтобы дать более конкретную причину для вопроса, мы унаследовали код, который слушает checkout_cart_save_after Событие, и я обеспокоен тем, что это может пропустить сценарии, когда цитата изменяется, но это событие не брошено.

Справочный код от/app/code/core/mage/checkout/model/cart.php:473:

    Mage::dispatchEvent('checkout_cart_save_before', array('cart'=>$this));

    $this->getQuote()->getBillingAddress();
    $this->getQuote()->getShippingAddress()->setCollectShippingRates(true);
    $this->getQuote()->collectTotals();
    $this->getQuote()->save();
    $this->getCheckoutSession()->setQuoteId($this->getQuote()->getId());
    /**
     * Cart save usually called after changes with cart items.
     */
    Mage::dispatchEvent('checkout_cart_save_after', array('cart'=>$this));
Это было полезно?

Решение

Если бы это была стандартная модель ORM, эти события, вероятно, существовали бы. Поскольку Mage_Checkout_Model_Cart модель расширяется Varien_Object вместо Mage_Core_Model_Abstract, эти события отправляются вручную, включая передачу объекта CART в область события. Анкет Это обеспечивает аналогичную инъекцию логики обработки на основе событий Связано с объектом CART до и после процесса сохранения цитаты.

Другие советы

Вы можете сохранить цитату откуда в вашем коде, и это сделано много в ядре, $ Cart сохраняется через контроллер Cart Controller (в основном), и я думаю, что это своего рода обертка вокруг цитаты (как цитата в Magento), пытаясь разделить Общая цитата Сохранить и события, которые происходят непосредственно связаны с действиями через карконтроллер

Что привело меня к такому выводу, было следующим грип

grep 'cart\->' app/ -rsn
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top