Разные цены для разных групп покупателей

Есть несколько групп пользователей, им нужно в товарах отдавать разную цену
наткнулся на этот вопрос,
но там обсуждается подмена цены при добавлении в корзину
другие цены, допустим, будут находится в тв поле (или в опции, не знаю как лучше)
подскажите, как в итоге делать полную подмену цены для отдельной группы пользователей?
alexandr.skyrda
12 декабря 2022, 14:15
modx.pro
1
687
0

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

Николай Савин
12 декабря 2022, 15:46
2
+3
Вам нужно создать плагин на событие msOnGetProductPrice

Пример кода такой
/** @var modX $modx */
/** @var msProduct $product */
if ($modx->event->name == 'msOnGetProductPrice') {
    $userGroups = $modx->user->getUserGroups();
    $sale_group = 4;
    //  $sale_price - цена со скидкой.  Придумайте откуда ее взять.  Отдельное поле или процент от общей цены
    $sale_price = 100;

    if (in_array($id_group, $userGroups)) {
        $modx->event->returnedValues['price'] = $sale_price
    }
}

Здесь по коду проверяем в каких группах состоит клиент. Если среди них есть скидочная группа — то подменяем price на нужное вам число
    alexandr.skyrda
    12 декабря 2022, 15:52
    0
    in_array($id_group, $userGroups)
    здесь мб вместо id_group sale_group должно быть?
    alexandr.skyrda
    12 декабря 2022, 15:53
    0
    а так спасибо, как раз начал пробовать с этим событием msOnGetProductPrice
      Сергей Карпович
      22 апреля 2024, 14:29
      0
      А если групп пользователей несколько и каждой группы своя цена, то как будет выглядеть плагин?
        alexandr.skyrda
        22 апреля 2024, 17:16
        0
        я делал так-то так:

        if ($modx->event->name == 'msOnGetProductFields') {
                $returned_values = & $modx->event->returnedValues;
                $values = $modx->event->params['data'];
                $product = $modx->getObject('msProduct', $values['id']);
                
                $userGroupId = $modx->user->getUserGroups()[0];
                $sale_group = [1, 2, 3]; // ИД групп, для которых другая цена
                    
                    if ($modx->user->isAuthenticated() && in_array($userGroupId, $sale_group)) {
                        $new_price = null;
                        switch($modx->user->getUserGroupNames()[0]) {
                            case 'НАЗВАНИЕ ГРУППЫ ПОЛЬЗОВАТЕЛЕЙ':
                                $new_price = $product->get('price_basovye')[0]; // Цена записана в опцию товара
                                break;
                        }
                        $returned_values['price'] = $new_price;
                    }
        }
        наверное не самое элегантное решение, но работает
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    7