¿Por qué se lanza checkout_cart_save_after inmediatamente después sales_quote_save_after?

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

  •  16-10-2019
  •  | 
  •  

Pregunta

La aplicación del método Mage_Checkout_Model_Cart::save() parece ser el resultado de la duplicación de los acontecimientos. ¿Por qué es el evento checkout_cart_save_after no estándar lanzado inmediatamente después del evento sales_quote_save_after genérica habría sido arrojado por la salvación con éxito.

¿Hay razones para escuchar a uno de los eventos en lugar de otro? Puedo ver que el evento sales_quote_save_after sería arrojado por admin o API órdenes, pero pueden ser excluidos de los observadores a través de la especificación de nombre_evento dentro del nodo XML en <frontend> config.xml del módulo de todos modos.

Para proporcionar una razón más concreta de la cuestión, hemos heredado código que escucha el caso checkout_cart_save_after y estoy preocupado de que podría faltar escenarios cuando la cita se cambia, pero este acontecimiento no se lanza.

Código de referencia de /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));
¿Fue útil?

Solución

Si esto fuera un modelo ORM estándar es probable que existan estos eventos. Debido a que el modelo se extiende Mage_Checkout_Model_Cart Varien_Object en lugar de Mage_Core_Model_Abstract, estos eventos se envían a mano, incluyendo la aprobación de la compra de objetos en el alcance de eventos . Esto permite la inyección basada en eventos similares de procesamiento de la lógica relacionada con la compra de objetos antes y después de la cita Guardar proceso.

Otros consejos

Puede guardar cita de cualquier lugar en el código y se hecho mucho en el núcleo, $ cesta es guardada a través de la compra del controlador (en su mayoría) y supongo que es una especie de envoltura alrededor de cotización (Como se cita es la compra de Magento) objeto tratando de separar cita general Save y eventos que suceden directamente relacionados con acciones a través de cartController

Lo que me conducía a esta conclusión fue la siguiente grep

grep 'cart\->' app/ -rsn
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top