¿Por qué se lanza checkout_cart_save_after inmediatamente después sales_quote_save_after?
-
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));
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