Всем Здравствуйте!
Сначала краткая история:
Есть ИМ с множеством городов, где для каждого города свои цены товара. Ну вроде все просто - создаем столько типов цен и групп пользователей, сколько городов и при выборе города пользователю даем нужную группу с помощью 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; } |
Теперь наши Москвичи смогут покупать товар по установленной для них цене. Заходим в оформленный заказ, тут вроде все как надо
Не знаю, где и когда кританет, но пока работает. Надеюсь, кому-то данное решение будет полезным и с радостью просмотрю Ваши решения!