Добрый день.
На сайте реализована возможность покупки без регистрации. Если человек нажимает из корзины Оформить заказ, не будучи авторизованным, то его тайно регистрирует скриптом на рандомное имя и email, при этом пользователь этого не знает.
Со стороны заказчика пришла такая доработка - если пользователь зашел на оформление заказа без авторизации (т.е. скрипт уже тайно его зарегал), то он может вдруг вспомнить, что не авторизовался и захотеть это сделать. Но авторизоваться он не сможет, т.к. уже тайно авторизован). Соответсвенно, я сделал AJAX-запрос на скриптик, в котором его разлогиниваю, прежде чем кинуть его на форму авторизации. Но тут возникает проблема - после logout все товары из корзины удаляются :-(
Я придумал такую штуку - перед логаутом считываем товары из корзины, после логаута докидывает их в корзину уже не авторизованному пользователю (у него уже сменился FUSER). Но это не работает( Товар действительно появляется в корзине, но Битрикс его не видит. Т.е. если зайти в корзину - товар там есть, но в массиве корзины его нет.
Код скрипта |
|---|
[CODE]=================ФУНКЦИЯ ПОЛУЧЕНИЯ ТОВАРА==================== function getBasketItems(){ //функция получения товаров (взята из документации)
$arID = array(); $arBasketItems = array(); $dbBasketItems = CSaleBasket::GetList( array( "NAME" => "ASC", "ID" => "ASC" ), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, ), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "PRODUCT_PROVIDER_CLASS") ); while ($arItems = $dbBasketItems->Fetch()) { $arID[] = $arItems["ID"]; } if (!empty($arID)) { $dbBasketItems = CSaleBasket::GetList( array( "NAME" => "ASC", "ID" => "ASC" ), array( "ID" => $arID, "ORDER_ID" => "NULL" ), false, false, array( "PRODUCT_ID", "PRODUCT_PRICE_ID", "PRICE", "CURRENCY", "WEIGHT", "QUANTITY", "LID", "DELAY", "CAN_BUY", "NAME", "DETAIL_PAGE_URL", ) ); while ($arItems = $dbBasketItems->Fetch()) { $arBasketItems[] = $arItems; } } return $arBasketItems; } =================КОНЕЦ ФУНКЦИИ====================
if (($USER->IsAuthorized()) && (isset($_COOKIE['BX_CWR']))) //если юзер зареган без регистрации { $arBasketItems = getBasketItems(); //получаем товары $USER->Logout(); foreach ($arBasketItems as $key => $item) { CSaleBasket::Add($item); //докидываем товарю новому юзеру } } [/CODE] |