Разные цены для разных групп покупателей
Есть несколько групп пользователей, им нужно в товарах отдавать разную цену
наткнулся на этот вопрос,
но там обсуждается подмена цены при добавлении в корзину
другие цены, допустим, будут находится в тв поле (или в опции, не знаю как лучше)
подскажите, как в итоге делать полную подмену цены для отдельной группы пользователей?
наткнулся на этот вопрос,
но там обсуждается подмена цены при добавлении в корзину
другие цены, допустим, будут находится в тв поле (или в опции, не знаю как лучше)
подскажите, как в итоге делать полную подмену цены для отдельной группы пользователей?
Комментарии: 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;
}
}
наверное не самое элегантное решение, но работает
Я нафигачил просто несколько условий
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.