Работа с ценами в Magentoå𱨿 嬿 ষ᳨

09.01.2015

Формирование цен — один из самых сложных механизмов в Magento. Цены формируются в различных местах, начиная от метода расчета налогов и заканчивая отображением цены для продуктовых опций на странице просмотра продукта.

Перед началом работы с ценами необходимо помнить следующее:

  • На изменение функционала расчета цен потребуется не менее 24 часов.
  • При отлаживании формирования цен лучше всего использовать пошаговый отладчик кода для нахождения места, где формируется цена.
  • Переписывать код нужно методами Magento (но ни в коем случае не менять оригинальные файлы системы). Для этого нужно расширить класс и внести соответствующую информацию в файл config.xml. Более подробно — в статье http://bandadirect.com/2012/10/29/urok-9-pereopredelenie-modeli-v-magento .

Допустим, в базе данных сохранены цены с 4 знаками после запятой и необходимо, чтобы при начислении НДС использовалась не округленная до 2 знаков цена, а эта сохраненная в БД цена с 4 знаками после запятой. К сожалению, в Magento нет одного единственного места, где можно было бы поменять логику формирования цен. Цена формируется поэтапно. Вот самые важные этапы формирования цены:

1. Методы расчета стоимости налогов

Методы расчета налогов настраиваются в панели администратора:

System > Configuration > Sales > Tax > Calculation Settings

Центральный объект, где находится вся логика по расчету цен, находится в

Mage_Tax_Model_Sales_Total_Quote_Subtotal

Каждый способ расчета цен, который настраивается в панели администратора, имеет соответственный метод в этом классе:

Tax Calculation Method Based On

  • Unit Price - _unitBaseCalculation()
  • Row Total -  _rowBaseCalculation()
  • Total - _totalBaseCalculation()

2. Конечный подсчет налогов

Величину налогов можно переписать в другом объекте Mage_Tax_Model_Calculation с помощью метода calcTaxAmount().

3. Расчет цен корзины товаров

Расчет общей суммы корзины заказа происходит в объекте Mage_Sales_Model_Quote_Address_Total_Grand в методе collect(). Как раз тут и можно внести все изменения в соответствии с новой логикой.

4. Отображение цены

Отображение цены формируется в объекте Mage_Core_Model_Store и методе roundPrice().

Для задачи с 4 знаками нужно выполнить следующее:

public function roundPrice($price)

{

return round($price, 4);

}

5. Динамический расчет цен

На странице просмотра продукта, когда у продукта есть опции, цена меняется с помощью Javascript-методов. То есть при выборе опции итоговая цена товара меняется в соответствии с выбранной опцией. В коде Javascript дублируется подсчет цен, который прописан на стороне PHP. Поэтому, если что-то меняется в логике формирования цен в файлах PHP, нужно проверить, все ли правильно считает Javascript.

Для этого нужно переписать метод Product.OptionsPrice в файле js/varien/product.js.

Весь Javascript в Magento построен на библиотеке prototype. Для расширения методов в prototype следует пользоваться методом wrap(). Детальнее на сайте по prototype API

http://prototypejs.org/doc/latest/language/Function/prototype/wrap/ .

<- назад в: Технический блог


Работы

Сайт ипподрома
Сайт ипподрома
Основная цель сайта — поведать посетителям о проводимых на ипподроме соревнованиях, истории ипподрома, его современном функционировании. Также все...
Формат обучающего курса (плагин) для Moodle LMS
Формат обучающего курса (плагин) для Moodle LMS
Особенностью разработанного формата курса является оригинальное отображение на фронтенде деятельностных элементов (activities) и ресурсов...