Работа с ценами в 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/ .

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


Работы

Веб-сайт этапа Кубка мира по горным лыжам
Веб-сайт этапа Кубка мира по горным лыжам
Интерактивный портал третьего по значимости события в мире лыжного спорта. По функциональности сайт сопоставим с ведущими спортивными веб-порталами,...
ПО для атомной электростанции, контролирующее уровень радиации в вытяжной трубе
ПО для атомной электростанции, контролирующее уровень радиации в вытяжной трубе
Специальное программное обеспечение для атомной электростанции, которое контролирует концентрацию радиации в воздухе, выбрасываемом через...