Изменение цены в зависимости от группы польз.
Здравствуйте. Пытаюсь самостоятельно изучать 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, а конкретно добавлением подобного вашему кода. Но если мы будем производить изменения только в этих сниппетах, то цена у нас поменяется только при первоначальной загрузке.
Например, я положил товар в корзину -> перешел в корзину -> получил правильную стоимость -> поменял кол-во товара\удалил какой-то товар -> стоимость поменялась на стоимость без коэффициента.
Я думал о написании какого-то плагина, однако почти полностью не понимаю процесс подключения плагина (в частности — создание контроллера). Скорее всего из-за недостатка опыта, поскольку я еще учусь.
Например, я положил товар в корзину -> перешел в корзину -> получил правильную стоимость -> поменял кол-во товара\удалил какой-то товар -> стоимость поменялась на стоимость без коэффициента.
Я думал о написании какого-то плагина, однако почти полностью не понимаю процесс подключения плагина (в частности — создание контроллера). Скорее всего из-за недостатка опыта, поскольку я еще учусь.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.