Разница между коммерческим предложением и адресом коммерческого предложения

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

Вопрос

Я ищу, какой наблюдатель 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);
} 

Список возможных "коллекционеров" был бы следующим:

enter image description here

Вы можете ввести свой собственный сборщик итогов через конфигурацию модуля как таковую и должны иметь 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.

Не зная вашей конечной цели, я бы не смог определить, какая из них подходит именно вам, однако я бы также посоветовал подумать, не подходит ли ни одна из них, и что вам лучше всего подойдет добавление нового сборщика для системы сбора итогов

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top