Здравствуйте. Нужно реализовать на сайте интернет-магазина на битрикс "Избранные товары".
Нашел в интернете решение, которое работает, но не полностью.
Суть такова: создаем php файл с кодом:
<?
global $USER;
if (CModule::IncludeModule ( "iblock" )) {
$elId = intval ( $_REQUEST ["elid"] );
$userId = $USER->GetID ();
$dbEl = CIBlockElement::GetList ( Array (), Array ("ID" => $elId, "IBLOCK_ID" => "2" ) );
if ($obEl = $dbEl->GetNextElement () AND !empty($userId)) {
$props = $obEl->GetProperties ();
$UserList = array_unique($props["F_USER"]["VALUE"]);
if(!in_array($userId, $UserList)) {
$UserList[] = $userId;
CIBlockElement::SetPropertyValueCode ($elId, "F_USER", $UserList);
echo "done";
}
else {
$key = array_search($userId, $UserList);
unset($UserList[$key]);
CIBlockElement::SetPropertyValueCode ($elId, "F_USER", $UserList);
echo "deleted";
}
}
else {
echo "fail";
}
}
exit;?>
В компоненте bitrix.section в месте, где нужна ссылка такой код:
<?if(in_array($USER->GetId(),$arItem["PROPERTIES"]["F_USER"]["VALUE"])){
$check = " checked";
}
else{
$check = "";
};?>
<a href="#" class="catalog-item-fav favorite_check<?=$check?>" data-id="<?=$arItem['ID']?>"></a>
<div class="favorit_label"> <?=$val?></div>
Все это обрабатывается скриптом с ajax функцией:
<script>
$("document").ready(function(){
$(".favorite_check").click(function(e){
e.preventDefault();
var $this = $(this);
$.get("/personal/favoriteajax.php", {
elid: $this.data('id')
}, function(data){
switch(data){
case 'done' : var response = 'Товар успешно добавлен в избранное';$this.addClass("checked");break;
case 'deleted' : var response = 'Товар успешно удален из избранного';$this.removeClass("checked");break;
case 'fail' : var response = 'Вы не авторизованы, либо Ваш запрос некорректен';$this.removeClass("checked");break;
}
$(".favorit_label").html(response).fadeIn().delay(2000).fadeOut();
});
});
});
</script>
Свойство F_USER создается в свойствах товаров и с ним все уже завязывается.
Что работает: скрипт при нажатии работает, т.е обращается к php документу. Товару задается свойство F_USER, т.е товар добавляется в избранное.
Что не работает: в скрипте есть функция добавления класса "checked" ссылке. Это нужно, чтобы на данный класс повесить нужные стили. Также есть функция вывода сообщения о том, что товар добавлен. Все это должно происходить одномоментно, без перезагрузки страницы - нажал на ссылку, она поменяла цвет и сообщение выскочило. У меня это не работает. Более того, класс добавляется только тогда, когда "сбрасываю кеш".
В чем может быть ошибка? Спасибо.