Diferencia entre la cita de ventas y la dirección de la cotización de ventas
-
12-12-2019 - |
Pregunta
Estoy buscando qué observador de coleccionistas puedo usar.Hay dos observadores, sales_quote_collect_totals_before y sales_quote_address_collect_totals_before .
Se pueden encontrar en /app/code/core/Mage/Sales/Model/Quote.php
y generacodiCodeGode.
Me pregunto cuál es la diferencia entre los dos archivos, ya que ambos archivos tienen las funciones totales de recolección?
Solución
/app/code/core/mage/sales/model/quote.php
es la clase de cotización para el objeto de cotización
/app/code/core/Mage/Sales/Model/Quote/Address.php
es la clase de dirección de cotización para cualquier objeto de dirección de cotización
Un objeto de cotización normalmente contendría 2 objetos de dirección, pero puede contener más si hay múltiples direcciones de entrega.
En lo que respecta al (los) método (s) de 'coleccionales': Permite entender por primera vez cada método y su propósito:
El método en Mage_Sales_Model_Quote
, es el punto de entrada inicial para el subsistema de Totals Collector
, y se inicia mediante un carro, ahorre,
(Esto le permite inyectar métodos de clase en los cálculos del carrito, para afectar el resultado de los totales del carro, ejemplo: cálculos de los descuentos del carrito)
Flujo de código de la siguiente manera:
Mage_Checkout_Model_Cart::save()
Mage_Sales_Model_Quote::collectTotals()
<--- Punto de entrada del subsistema de colector
Mage_Sales_Model_Quote_Address::collectTotals()
<- Se llama cada dirección adjunta al objeto de la cotización, a través de un bucle en la cotización.
Ahora, en el método de recopilación de direcciones, se realiza un bucle, utilizando todos los 'colectores' definidos por el sistema, llamando a cada clase / método, lo que permite que los totales se ajusten a los cálculos adicionales (recuerde que todos los totales cuelgan fuera del (los) objeto (s) de direcciones, no el objeto de cotización real, que le permite a Magento realizar un checkout a varias direcciones)
foreach ($this->getTotalCollector()->getCollectors() as $model) {
$model->collect($this);
}
Una lista de los posibles 'coleccionistas' sería:
Puede inyectar su propio colector de totales a través de una configuración de módulo como tal, y debe tener un método collect
como punto de entrada.
<sales>
<quote>
<totals>
<giftpromo>
<class>giftpromo/promo_gift</class>
<after>discount</after>
<before>tax,grand_total</before>
<sort_order>12410</sort_order>
</giftpromo>
</totals>
</quote>
</sales>
Ahora, considerando toda esa información, y los eventos disparados:
sales_quote_collect_totals_before : se despide Antes de cargar cualquier objeto de dirección, y el colector de totales se acciona
sales_quote_address_collect_totals_before : se enciende dentro de los objetos de la dirección de la cotización, antes de que cada objeto de dirección ejecute la lista de posibles objetos colector.
No sabiendo su juego final, no podría determinar cuál es el adecuado para usted, sin embargo, también sugeriría considerar que ninguno de los dos es correcto, y que sería más adecuado para agregar un nuevo COLECTOR PARA EL SISTEMA DE COLECTOR DE TOTALES
Espero que esta información le ayude a determinar la forma correcta de extender la funcionalidad y la entrega de una solución estable.