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

8

Я ищу, какой обозреватель collect_totals я могу использовать. Есть два наблюдателя: sales_quote_collect_totals_before и sales_quote_address_collect_totals_before .

Их можно найти в /app/code/core/Mage/Sales/Model/Quote.phpа /app/code/core/Mage/Sales/Model/Quote/Address.php.

Интересно, в чем разница между этими двумя файлами, поскольку у обоих файлов есть функции сбора итогов?

user1240207
источник

Ответы:

14

/app/code/core/Mage/Sales/Model/Quote.php

класс Quote для объекта quote

/app/code/core/Mage/Sales/Model/Quote/Address.php

является классом Address Address для любых объектов адреса quote

Объект цитаты обычно содержит 2 объекта адреса, но может содержать больше, если присутствует несколько адресов доставки.

В отношении метода (ов) collecttotals: давайте сначала разберемся с каждым методом и его назначением:

Метод in Mage_Sales_Model_Quoteявляется начальной точкой входа для Totals Collectorподсистемы и инициируется сохранением корзины,

(это позволяет вводить методы класса в расчеты корзины, чтобы влиять на итоги итогов корзины - пример: вычисления скидок корзины)

Код выполняется следующим образом:

Mage_Checkout_Model_Cart::save()

Mage_Sales_Model_Quote::collectTotals() <--- точка входа подсистемы коллектора

Mage_Sales_Model_Quote_Address::collectTotals() <- каждый адрес, связанный с объектом цитаты, вызывается через цикл в объекте сбора итогов цитаты.

Теперь в методе address collecttotals выполняется цикл с использованием всех определенных системой «коллекторов», вызывающий каждый класс / метод, что позволяет корректировать итоги заказа с помощью дополнительных вычислений (помните, что все итоги зависают от адреса). объект (ы), а не фактический объект цитаты, который позволяет 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 : срабатывает перед загрузкой любого объекта адреса и действует сборщик итогов

sales_quote_address_collect_totals_before : запускается внутри объекта (объектов) адреса кавычки, прежде чем каждый объект адреса запускает список потенциальных объектов коллектора.

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

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

ProxiBlue
источник
супер объяснение!
Дэвид Мэннерс
Я прочитал первую строку и уже решил +1.
pspahn
@ProxiBlue после прочтения вашего ответа, я думаю, вы поможете мне решить одну проблему, связанную с методом collectTotals (). Таким образом, у меня есть два атрибута скидки в моей таблице Продуктов для применения скидки на продукты при размещении заказа. Поэтому, когда мы создаем котировку, мы добавляем эти скидки и сумму after_discount в таблицу котировок, что вполне нормально. Теперь, когда я размещаю заказ, я вижу в строке $ quote-> collectTotals () -> save () значения скидок, равные 0, а общая сумма становится первоначальной ценой (без учета скидки). Подскажите пожалуйста, как это исправить.?
apandey846