Разница между коммерческим предложением и адресом коммерческого предложения
-
12-12-2019 - |
Вопрос
Я ищу, какой наблюдатель collect_totals я могу использовать.Есть два наблюдателя, sales_quote_collect_totals_before и продажа_quote_address_collect_totals_before.
Их можно найти в /app/code/core/Mage/Sales/Model/Quote.php
и /app/code/core/Mage/Sales/Model/Quote/Address.php
.
Интересно, в чем разница между этими двумя файлами, поскольку оба файла имеют функции collect total?
Решение
/app/code/core/Mage/Sales/Model/Quote.php
является классом Quote для объекта quote
/app/code/core/Mage/Sales/Model/Quote/Address.php
является классом адреса цитаты для любых объектов адреса цитаты
Объект предложения обычно содержит 2 объекта адреса, но может содержать больше, если присутствует несколько адресов доставки.
Что касается метода(ов) "collecttotals":Давайте сначала разберемся с каждым методом и его назначением:
Метод в Mage_Sales_Model_Quote
, является начальной точкой входа для Totals Collector
подсистема, и инициируется сохранением корзины,
(это позволяет вам внедрять методы класса в вычисления корзины, чтобы повлиять на итоговый результат корзины - пример:расчет скидок на корзину)
Поток кода выглядит следующим образом:
Mage_Checkout_Model_Cart::save()
Mage_Sales_Model_Quote::collectTotals()
<--- точка входа коллекторной подсистемы
Mage_Sales_Model_Quote_Address::collectTotals()
<-- каждый адрес, прикрепленный к объекту quote, вызывается через цикл в объекте quote collect totals.
Теперь в методе address collecttotals выполняется цикл, использующий все системные "сборщики", вызывающий каждый класс/метод, что позволяет корректировать итоговые значения для заказа путем дополнительных вычислений (помните, что все итоговые значения зависят от объекта(ов) address, а не от фактического объекта quote, который позволяет magento выполнять проверку по нескольким адресам)
foreach ($this->getTotalCollector()->getCollectors() as $model) {
$model->collect($this);
}
Список возможных "коллекционеров" был бы следующим:
Вы можете ввести свой собственный сборщик итогов через конфигурацию модуля как таковую и должны иметь collect
метод в качестве точки входа.
<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>
Теперь, учитывая всю эту информацию и произошедшие события:
sales_quote_collect_totals_before:Запускается до загрузки любого объекта address и активируется сборщик итоговых данных
продажа_quote_address_collect_totals_before:Запускается внутри объекта(ов) quote address, прежде чем каждый объект address запустит список потенциальных объектов collector.
Не зная вашей конечной цели, я бы не смог определить, какая из них подходит именно вам, однако я бы также посоветовал подумать, не подходит ли ни одна из них, и что вам лучше всего подойдет добавление нового сборщика для системы сбора итогов
Я надеюсь, что эта информация поможет вам определить правильный способ расширения функциональности и предоставления стабильного решения.