msoptionsprice2 - модификация в зависимости от диапазона значений опции

Добрый день.
Имеем мебельный интернет-магазин. И допустим в шкафах цена меняется в зависимости от размера. пусть будет ширина.
Какие то базовые размеры мы задали, к пример 800, 900, 1000 мм и к ним сделали модификации.
А теперь встала задача седелать так чтобы пользователь мог в окошке вбивать свой размер клавишами, например 857 мм. и в зависимости от этого ему считалась цена, но она не должна быть меньше чем цена за 800 и не больше чем цена за 900.
Как сделать чтобы можно было указывать диапазон размера для наценки, к примеру, 800-900мм: +500 руб.
Андрей
07 апреля 2024, 15:10
modx.pro
129
0

Комментарии: 1

Наумов Алексей
07 апреля 2024, 19:27
0
Ну… попробую описать) у меня в проекте очень длинный код и он делает не много не то, что вам нужно, поэтому всю портянку сюда не вставить.

0. на фронте добавляем поле для выбора ширины или ввода его вручную

1. Создадим плагин на событие msopOnAfterGetCost
if ($modx->event->name == 'msopOnAfterGetCost') {
    $isGetModificationAction = (isset($_REQUEST['action']) && $_REQUEST['action'] == "modification/get");
    $isCartAddAction = (isset($_REQUEST['ms2_action']) && $_REQUEST['ms2_action'] == "cart/add");
    
    // Обрабатываем только ajax запросы, в которых компонент msOptionsPrice2 отдает цену
    // Есть альтарнативный способ: проверять $_REQUEST['ms2_action'] !== cart/add
    if($isGetModificationAction || $isCartAddAction) {
    // здесь наш основной код
    // доступна переменная $modification
    // если пользователь выбрал определенную модификацию и у нее есть цена, то берем данные из нее
    if($modification['id']) {
    } else {
        // нет модификации, соответствующей переданным параметрам...
        // нужно высчитать цену, исходя из ширины вашего товара
        // ...
        // а вот тут мы вернем цену
        $modx->event->returnedValues['cost'] = ???;
    }
    
    
    }
}
2.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1