Всем Здравствуйте!
Сначала краткая история:
Есть ИМ с множеством городов, где для каждого города свои цены товара. Ну вроде все просто - создаем столько типов цен и групп пользователей, сколько городов и при выборе города пользователю даем нужную группу с помощью CUser::SetUserGroupArray, т.к. пользователь у нас не авторизован (для тех, кто в танке - данный метод пишет группу пользователя в сессию, а не в БД).

Делаем для наших Москвичей цену поболее:

Заходит покупатель, выбирает город Москва, ему присваивается группа "Покупатель Москвы" и он видит цену:

Жмет купить и видит такую штуку ((( Т.е. получается, что пользователь не может купить товар по цене, которую он видит.

Далее идем разбираться, почему так. Вскрываем ядро, получаем, что в классе CatalogProvider теперь при покупке группы пользователя учитываются только из БД

С недавними обновлениями разработчики решили, что не нужно учитывать группы из сессии, тем самым положив немалое количество Интернет-магазинов. Ну вроде ясно почему теперь так, только как организовать покупку по определенному типу цены неавторизованного пользователя?
Сходу накидал обработчик на OnGetOptimalPrice, чтобы завести ИМ:
Теперь наши Москвичи смогут покупать товар по установленной для них цене. Заходим в оформленный заказ, тут вроде все как надо

Не знаю, где и когда кританет, но пока работает. Надеюсь, кому-то данное решение будет полезным и с радостью просмотрю Ваши решения!
Сначала краткая история:
Есть ИМ с множеством городов, где для каждого города свои цены товара. Ну вроде все просто - создаем столько типов цен и групп пользователей, сколько городов и при выборе города пользователю даем нужную группу с помощью CUser::SetUserGroupArray, т.к. пользователь у нас не авторизован (для тех, кто в танке - данный метод пишет группу пользователя в сессию, а не в БД).
Делаем для наших Москвичей цену поболее:
Заходит покупатель, выбирает город Москва, ему присваивается группа "Покупатель Москвы" и он видит цену:
Жмет купить и видит такую штуку ((( Т.е. получается, что пользователь не может купить товар по цене, которую он видит.
Далее идем разбираться, почему так. Вскрываем ядро, получаем, что в классе CatalogProvider теперь при покупке группы пользователя учитываются только из БД
С недавними обновлениями разработчики решили, что не нужно учитывать группы из сессии, тем самым положив немалое количество Интернет-магазинов. Ну вроде ясно почему теперь так, только как организовать покупку по определенному типу цены неавторизованного пользователя?
Сходу накидал обработчик на OnGetOptimalPrice, чтобы завести ИМ:
| Код |
|---|
static private $depth = 0;
public static function onGetOptimalPrice($productId, $quantity, $arUserGroups, $renewal, $priceList, $siteID, $needCoupons)
{
if (!self::$depth) {
global $USER;
$arUserGroups = $USER->GetUserGroupArray();
self::$depth++;
$price = \CCatalogProduct::getOptimalPrice($productId, $quantity, $arUserGroups, $renewal, $priceList, $siteID, $needCoupons);
self::$depth--;
return $price;
}
return true;
}
|
Теперь наши Москвичи смогут покупать товар по установленной для них цене. Заходим в оформленный заказ, тут вроде все как надо
Не знаю, где и когда кританет, но пока работает. Надеюсь, кому-то данное решение будет полезным и с радостью просмотрю Ваши решения!
