-
Роман ЦукановРазработчик -
Дата публикации31.07.2025
-
Категория1С-Битрикс
Задача:Добавить, удалить элемент инфоблока в избранное. Отобразить список данных в избранном.
Для того, чтобы добавить элемент в избранное, а также при необходимости удалить его, можно воспользоваться приведенным в стате кодом.
Для начала создадим объект, по которому будем отслеживать клик мышью:
<button data-iblock-id="1" data-element-id="44" class="card-button-fav" type="button">
Добавить в избранное
</button>
Далее напишем код JS:
function addFavourite(id, iblockId, $this)
{
var param = 'id='+id+"&iblockId="+iblockId;
$.ajax({
url: '/local/templates/devstages/api/favourites/addToFavourite.php', // URL отправки запроса
type: "GET",
dataType: "html",
data: param,
success: function(response) { // Если Данные отправлены успешно
var result = $.parseJSON(response);
$($this).toggleClass('active'); // Если необходимо
if(response == 1){
$($this).text('В избранном');
}
if(response == 2){
$($this).text('В избранное');
}
},
error: function(jqXHR, textStatus, errorThrown){ // Если ошибка, то выкладываем печаль в консоль
console.log('Error: '+ errorThrown);
}
});
}
$('.card-button-fav').on('click', function(e) {
let favourId = $(this).data('element-id');
let iblockId = $(this).data('iblock-id');
let $this = this;
if(favourId && iblockId) {
addFavourite(favourId, iblockId, this);
}
});
А теперь обработчик на стороне сервера:
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetTitle(" ");
$GLOBALS['APPLICATION']->RestartBuffer();
use Bitrix\Main\Application,
Bitrix\Main\Web\Cookie,
Bitrix\Main\Context;
global $APPLICATION;
if ($_GET['id']) {
$iblockId = $_GET['iblockId'];
switch ($iblockId) {
case 1:
$cookieName = 'favoritesFlats';
break;
case 7:
$cookieName = 'favoritesPantries';
break;
case 6:
$cookieName = 'favoritesCommercial';
break;
case 4:
$cookieName = 'favoritesParking';
break;
}
$arElements = unserialize($APPLICATION->get_cookie($cookieName));
if(empty($arElements)) {
$arElements[] = $_GET['id'];
$result = 1; // Датчик. Добавляем
} else {
if (!in_array($_GET['id'], $arElements)) {
$arElements[] = $_GET['id'];
$result = 1; // Датчик. Добавляем
} else {
$key = array_search($_GET['id'], $arElements); // Находим элемент, который нужно удалить из избранного
unset($arElements[$key]);
$result = 2; // Датчик. Удаляем
}
}
$context = Application::getInstance()->getContext();
$cookie = new Cookie($cookieName, serialize($arElements), time() + 60 * 60 * 24 * 60);
$cookie->setDomain($context->getServer()->getServerName());
$cookie->setHttpOnly(false);
$cookie->setPath('/');
$cookie->setSecure(false);
$response = $context->getResponse();
$response->addCookie($cookie);
$response->writeHeaders();
}
/* Избранное */
echo json_encode($result);
die(); ?>