Изменение цены в зависимости от группы польз.
        Здравствуйте. Пытаюсь самостоятельно изучать modx для себя (ну и возможно в будущем применять свои знания). По большей части большую часть проблем решал методом гугления. Но возникла проблема, которую решить еще не смог. 
Я подумал о реализации изменения цены в зависимости от группы в которой находится авторизованный пользователь. Условно, если пользователь в группе «group1», то окончательная стоимость заказа умножается на коэффициент (например, 0.9).
Собирая по крупицам информацию, я решил поменять некоторые функции класса «msCartHandler» (add и change). Т.е. умножив окончательную стоимость на переменную коэффициента. (да, наверняка это топорный способ, но я еще только начинаю).
И тут возник вопрос. Каким образом в этих функциях можно получить переменную коэффициента (которая зависит от группы пользователя).
Заранее благодарю за адекватные ответы.
    
    
                                                                                
            Я подумал о реализации изменения цены в зависимости от группы в которой находится авторизованный пользователь. Условно, если пользователь в группе «group1», то окончательная стоимость заказа умножается на коэффициент (например, 0.9).
Собирая по крупицам информацию, я решил поменять некоторые функции класса «msCartHandler» (add и change). Т.е. умножив окончательную стоимость на переменную коэффициента. (да, наверняка это топорный способ, но я еще только начинаю).
И тут возник вопрос. Каким образом в этих функциях можно получить переменную коэффициента (которая зависит от группы пользователя).
Заранее благодарю за адекватные ответы.
Комментарии: 7
                Собственно, тоже возникает вопрос. Ну так а где вы храните этот коэффициент?            
                    
                Последовательно проверяя принадлежность к группе пользователя с помощью ветвления, а затем присваивая.
Примерно таким образом
                    Примерно таким образом
if ($currentGroup == "group1") {
	$coef = 0.9;
	}
	else if ($currentGroup == "group2") {
	$coef = 0.8;
	}
	.....
	else {
	$coef = 1;
	}Суть моего вопроса в том, чтоб узнать способ получения переменной $currentGroup(название группы в которой находится активный пользователь) в классе «msCartHandler».            
                Мне показалось, что вы спрашивали как получить коэффициент.
Группу пользователя можно получить так:
В виде строки(через запятую, если несколько) можно вот так:
                    Группу пользователя можно получить так:
$modx->user->getUserGroupNames();Но на выходе будет массив, групп же может быть несколько.В виде строки(через запятую, если несколько) можно вот так:
implode(',',$modx->user->getUserGroupNames());            
                Ни одним из этих способов нельзя получить группу пользователя. Т.к. данный класс не знает о данных функциях. Именно по этому и возник данный вопрос. Таким образом можно было написать в снипете. Например, я пробовал изменять сниппет «msCart». 
Добавив в начале:
                    Добавив в начале:
if($modx->user->isMember('group1'))
{
    $coef = 0.9;
}
else if ($modx->user->isMember('group2'))
{
    $coef = 0.8;
}
.....
else
{
    $coef = 1;
}И изменив подсчет таким образом:$outer['total_cost'] +=  $v['count'] * $v['price'] * $v['weight'] * $coef;Однако, это работает только при первой загрузке. Т.е. когда мы переходим в корзину то видим сразу новую цену, однако если прямо в корзине поменять что-то (например, удалить товар из корзины или изменить количество), то стоимость опять считается без коэффициента.            
                А если, адекватно, по делу, то перепиливание классов ни к чему хорошему вас не приведет, прекращайте. Классы можно расширять, если есть необходимость. В вашем случае ее нет, можно написать плагин на события минишопа. Ну если вы с хранением коэффициентов для разных групп все уже продумали.            
                    
                5 минутные оптовые цены на tv. по хорошему плагином товар расширять.
                    <?php
if($modx->event->name != 'msOnGetProductPrice') return;
if($modx->user->id != 0  && $modx->user->isMember('Wholesaler')){
    $values = & $modx->event->returnedValues;
    $resource = $modx->getObject('msProduct', $product->id);
    $wholesale_price = $resource->getTVValue('price_opt');
    if($wholesale_price){
        $values['old_price'] = $values['price'];
        $values['price'] = $wholesale_price;
    }
}upd. думал нужно по товарам, оказывается по всей корзине, вообще у корзины похожее решение, смотрите плагины mscart и msorder.            
                Если я вас правильно понял, то вы говорите об изменении сниппетов mscart и maorder, а конкретно добавлением подобного вашему кода. Но если мы будем производить изменения только в этих сниппетах, то цена у нас поменяется только при первоначальной загрузке. 
Например, я положил товар в корзину -> перешел в корзину -> получил правильную стоимость -> поменял кол-во товара\удалил какой-то товар -> стоимость поменялась на стоимость без коэффициента.
Я думал о написании какого-то плагина, однако почти полностью не понимаю процесс подключения плагина (в частности — создание контроллера). Скорее всего из-за недостатка опыта, поскольку я еще учусь.
                    Например, я положил товар в корзину -> перешел в корзину -> получил правильную стоимость -> поменял кол-во товара\удалил какой-то товар -> стоимость поменялась на стоимость без коэффициента.
Я думал о написании какого-то плагина, однако почти полностью не понимаю процесс подключения плагина (в частности — создание контроллера). Скорее всего из-за недостатка опыта, поскольку я еще учусь.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.