Текущие наработки:
1. Создал для корзины пользовательское свойство типа "число" с названием "UF_REG_BASKET_ID".
2. Если значение переменной $_SESSION["SALE_USER_ID"] (это ID корзины) не пустое, по событию OnAfterUserRegister загоняю его в значение пользовательского сва
| Код |
|---|
function OnAfterUserRegisterHandler(&$arFields) {
// сохраним ID корзины в пользовательское свойство UF_REG_BASKET_ID
if (!empty($_SESSION["SALE_USER_ID"]))
$User = new CUser;
$arNewFields = Array(
"UF_REG_BASKET_ID" => $_SESSION["SALE_USER_ID"]
);
$User->Update($arFields["USER_ID"], $arNewFields);
}
} |
3. По событию OnAfterUserLogin проверяю, заполнено ли пользовательское свойство UF_REG_BASKET_ID и если да, то его значение присваиваю переменной $_SESSION["SALE_USER_ID"], а затем чищу "UF_REG_BASKET_ID". На данном этапе массив $USER еще пустой, и это наверное даже хорошо, ведь чуть позже судя по всему корзина привязывается к авторизованному пользователю, а ее ID берется как раз из переменной $_SESSION["SALE_USER_ID"].
| Код |
|---|
function OnAfterUserLoginHandler(&$arParams) {
$user = CUser::GetByID($arParams["USER_ID"])->Fetch();
$_SESSION["SALE_USER_ID"] = $user["UF_REG_BASKET_ID"];
} |
В общем после активации и авторизации в другом браузере у пользователя сразу содержимое корзины, которое было в другом, причем при обновлении состава корзины одном браузере, обновляется и в другом (где пользователь еще не авторизован) и то же самое в обратном порядке. В принципе сойдет, но есть еще одна трабла, если войти с этим же логином на том браузере, где юзер еще не авторизован, то корзина на обоих браузерах опустошается. Ситуация конечно из ряда вон выходящая, но хотелось бы понять почему так происходит?
C "backurl" все делается по аналогии и даже проще. Если пользовательское свойство заполнено, после логина перенаправляем юзера на этот URL и чистим значение свойства.