Разные цены для разных групп покупателей
        Есть несколько групп пользователей, им нужно в товарах отдавать разную цену
наткнулся на этот вопрос,
но там обсуждается подмена цены при добавлении в корзину
другие цены, допустим, будут находится в тв поле (или в опции, не знаю как лучше)
подскажите, как в итоге делать полную подмену цены для отдельной группы пользователей?
    
    
                                                                                
            наткнулся на этот вопрос,
но там обсуждается подмена цены при добавлении в корзину
другие цены, допустим, будут находится в тв поле (или в опции, не знаю как лучше)
подскажите, как в итоге делать полную подмену цены для отдельной группы пользователей?
Комментарии: 7
                Вам нужно создать плагин на событие msOnGetProductPrice
Пример кода такой
Здесь по коду проверяем в каких группах состоит клиент. Если среди них есть скидочная группа — то подменяем price на нужное вам число
                    Пример кода такой
/** @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 на нужное вам число
in_array($id_group, $userGroups)здесь мб вместо id_group sale_group должно быть?
                Да верно.            
                    
                а так спасибо, как раз начал пробовать с этим событием msOnGetProductPrice            
                    
                А если групп пользователей несколько и каждой группы своя цена, то как будет выглядеть плагин?            
                    
                я делал так-то так:
                    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;
            }
}наверное не самое элегантное решение, но работает            
                Я нафигачил просто несколько условий            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.