У Reds Group есть подробная статья по созданию функционала добавления товаров в избранное в 1С-Битрикс. Предполагается, что список избранных товаров у неавторизованного пользователя хранится в файлах cookie, а у авторизованных — в отдельное пользовательское поле. От себя дополню её небольшой фичей: после авторизации будем забирать ID товаров из избранного в cookie-файле ‘favorites’ и сохранять в профиле юзера.
// в init.php
$eventManager->addEventHandler("main","OnAfterUserAuthorize",'OnAfterUserAuthorizeHandler');
function OnAfterUserAuthorizeHandler($arUser)
{
global $APPLICATION;
$arrFavouritesList = unserialize($APPLICATION->get_cookie("favorites")); //избранные ID товаров из куки
$idUser = $arUser['user_fields']['ID'];
$rsUser = CUser::GetByID($idUser);
$arUser = $rsUser->Fetch();
$arElements = $arUser['UF_FAVORITES']; // Достаём избранное пользователя
foreach ($arrFavouritesList as $itemID) {
if(!in_array($itemID, $arElements)) // Если еще нету этой позиции в избранном
{
$arElements[] = $itemID;
}
}
$user = new CUser;
$user->Update($idUser, Array("UF_FAVORITES" => $arElements)); // Добавляем элементы в избранное
}
Единственное, я так и не решил, что лучше с точки зрения пользовательского опыта: очистить файл куки после успешного добавления товаров в профиль пользователя, оставить как есть или дополнить его полным списком? Как поступили бы вы?