Расчет цены - очень сложная тема в Magento. Вот с высоты птичьего полета, как это делается для простого продукта:
- Magento получает «базовую» цену. Это цена, которую вы определили в столбце цен
- «Групповая» цена применяется. Это та часть, где учитывается цена уровня на основе заказанного количества, веб-сайта и группы клиентов.
- Специальная цена применяется, если для текущей даты определена специальная цена.
- « Catalog_product_get_final_price » событие. Это где ваш пользовательский модуль, который возиться с ценой должен войти. В качестве рабочего примера, модуль CatalogRule ловит это событие и изменяет цену на основе определенных правил каталога
- Цены на выбранные варианты принимаются во внимание
Так как этот процесс занимает очень много времени, Magento создает индекс цен и будет проходить через вышеупомянутое только при переиндексации. В индексе цен используется множество таблиц, в которых есть информация об «окончательной» цене (рассчитанной с использованием описанных выше шагов), а также такие вещи, как минимальные / максимальные цены для конфигурируемых и связываемых пакетов. В этой таблице есть запись для каждой комбинации веб-сайта / продукта / группы клиентов, поэтому системе нужно будет только выбрать правильную строку на основе данных клиента, чтобы весь процесс выполнялся в достойное время.
Что касается внешней части, то, как цена динамически увеличивается и уменьшается, все это делается в javascript, который начинается с массива json со всеми «ценовыми уровнями» и будет уменьшать / увеличивать цену в зависимости от вашего выбора.