Робота з цінами в Magento
Формування цін — один з найскладніших механізмів у 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/ .
<- Назад до: Технічний блоґ