@Andrey_Mirov

Как вывести цену для определенной группы пользователей в Битрикс?

Всем привет. Подскажите, пожалуйста, измучился уже весь.
Пользователь принадлежит группе 8(Оптовики)
Мне надо для них выводить другую цену
global $USER;
$arPrice = CCatalogProduct::GetOptimalPrice(6, 1, $USER->GetUserGroupArray(), "N");

Вместо этого Битрикс выводит общую цену, потому что пишет, что юзер принадлежит к группе 2, которая также известна - как Все пользователи, в том числе и не авторизованные!
Что делать(
  • Вопрос задан
  • 392 просмотра
Пригласить эксперта
Ответы на вопрос 1
Читайте внимательнее описание метода CCatalogProduct::GetOptimalPrice.
Метод возвращает параметры наименьшей цены товара productID с учетом скидок в количестве quantity для посетителя, входящего в группы пользователей arUserGroups. Метод статический.

И далее описание параметра arUserGroups:
Массив групп пользователей. Если он пуст, то будут взяты группы текущего пользователя (при условии существования глобальной переменной $USER класса CUser, в случае отсутствия будет использована группа с кодом 2).
Если группы пользователей передаются в вызове, к ним будет принудительно добавлена группа с кодом 2 (Все пользователи) в случае ее отсутствия.


Т.е. в любом случае этот метод обработает группу пользователей 2 и если для неё цена будет оптимальной (например с учетом каких то скидок), то он вернет именно её.

Скорее всего у вас для группы пользователей "Оптовики" заведен отдельный тип цен, поэтому вы можете получить цену например так:

\Bitrix\Main\Loader::includeModule('catalog');

$price = \Bitrix\Catalog\PriceTable::query()
    ->setSelect(['*'])
    ->setFilter([
        '=PRODUCT_ID' => 123456,
        '=CATALOG_GROUP_ID' => 7,
    ])
    ->exec()
    ->fetch();

print_r($price);

где в CATALOG_GROUP_ID передавайте предварительно вычисленный для текущей группы пользователя тип цен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы