По поводу меняющихся цен: общий механизм будет в любом случае основываться на TV-параметрах. В этом будет полезен вот этот коммент: modxclub.ru/blog/voprosy-spetsyalistov/309.html#comment2906
Но тонкостей здесь очень много, и нельзя будет это просто так сделать. Основная причина кроется в том, что даже сам биллинг магазина надо дорабатывать. В настоящий момент после того, как товар добавлен в корзину, при добавлении такого же товара будет меняться только его кол-во, но не цена. То есть подсчет суммы потом идет стоимость*количество. В данном случае вам придется весьма серьезно похардкодить (что в принципе допускается изначальной концепцией). Давайте немного теории по этому поводу:
Данные товаров в корзине — это записи объектов OrderProduct. Когда добавляется первая запись — тогда происходит создание объекта OrderProduct (соответственно со значениями product_id, price, quantity и т.п.) (выполняется процессор create). А когда меняется число товаров в корзине (простой пересчет или добавление еще этих же товаров), тогда происходит просто обновление записи (процессор update).
Эти процессоры расширяют базовые процессоры modObjectCreateProcessor и modObjectUpdateProcessor процессоры соответственно. Нам это важно понимать, так как там будут очень полезные функции beforeSet() и beforeSave(), в которых будет доступен текущий объект записи.
К пример, на добавление товара мы хотим пересчитать сумму товара в зависимости от количества (к примеру, дать скидку 10%, если товаров более 10). Код будет такой:
public function beforeSave(){ if($this->object->get('quantity') >= 10){ $price = $this->object->get('price') * 0.9; $this->object->set('price', $price); // Специально выполнять сохранение здесь не надо, // объект будет сохранен дальше автоматически } return parent::beforeSave(); }