Добавление товара в избранное на ajax в Битрикс - разработка и поддержка сайтов BUSSOL


Заказать разработку

Добавление товара в избранное на ajax в Битрикс

Автор:

Дата публикации:

Добавление товара в избранное на ajax в Битрикс

Добавление товара или статьи в избранное - это обязательная фишка для интернет-магазина или блога. Однако, в Битрикс по умолчанию нет функционала добавления элемента инфоблока в избранное. Поэтому в данной статье я рассмотрю один из вариантов реализации такого функционала c помощью cookie.

Реализовывать добавление в избранное будем в компоненте catalog.element. Не забудьте скопировать компонент в свое пространство имен. Для начала добавим в шаблон компонента саму ссылку/кнопку добавления в избранное:

Как видите, для ссылки мы задаем обработчик onclick, который вызывает функцию favBtn добавления элемента в избранное, в который передаем ID элемента. Далее, напишем саму функцию favBtn в файле js-скриптов. Можно использовать файл скрипта в верстке, можно использовать файл скрипта самого компонента catalog.element. Только не забудьте скопировать код в минифицированную версию:


function favBtn(pid){

    $.post('/addfavorite.php', {PID: pid}, function(data){
          alert("Товар добавлен в избранное!")
    })

    return false
}

Внутри функции мы используем ajax для передачи данных в php-скрипт. А передаем мы идентификатор товара PID, которой в свою очередь передали в функцию. Теперь создадим в корне сайта файл addfavorite.php со следующим содержимым:


require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

global $APPLICATION;

$arFavorits = unserialize($APPLICATION->get_cookie("UF_FAVORITS"));

$arFavorits[] = ['pid' => $_POST['PID']];

$UF_FAVORITS = serialize($arFavorits);

$APPLICATION->set_cookie("UF_FAVORITS", $UF_FAVORITS);

$application = \Bitrix\Main\Application::getInstance();
$context = $application->getContext();
$context->getResponse()->flush('');

Три последние строчки файла должны обязательно присутствовать. Без них куки устанавливаться не будут. Сохранение id избранных элементов производится в куки с ключом UF_FAVORITS. Сначала мы получаем куки с данным ключом, затем преобразуем куки в массив id. Добавляем к массиву id элемента, который хотим добавить в избранное. Затем производим обратный процесс, т.е. преобразуем массив в сериализованную строку и записываем ее в переменную $UF_FAVORITS. И наконец перезаписываем куки с ключем UF_FAVORITS значением переменной $UF_FAVORITS.

Данный способ можно использовать не только на сайтах, работающих на Битрикс, если вместо битриксовых методов работы с cookie использовать стандартный метод php setcookie и супермассив $_COOKIE.

Теперь на любой странице сайта, например, в специально созданном разделе для отображения избранных товаров, разместите компонент catalog.section, если речь идет о избранных товарах. Или компонент news.list, если речь идет о статьях:


$arFavorits = unserialize($APPLICATION->get_cookie("UF_FAVORITS"));

global $favFilter;
$favFilter = array("=ID" => $arFavorits);
$APPLICATION->IncludeComponent(
	"bitrix:catalog.section", 
	"", 
	array(
		"IBLOCK_TYPE_ID" => "catalog",
		"IBLOCK_ID" => "5",
		"BASKET_URL" => "/personal/cart/",
		"COMPONENT_TEMPLATE" => "",
		"IBLOCK_TYPE" => "catalog",
		"SECTION_ID" => $_REQUEST["SECTION_ID"],
		"SECTION_CODE" => "",
      "FILTER_NAME" => "favFilter",
		...............................................................................
                ...............................................................................
	),
	false
);

Сначала получаем массив ID товаров. Потом создаем пользовательский фильтр favFilter, т.е. компонент будет выводить только те товары, ID которых находятся в массиве $favFilter. И название фильтра добавляем в параметр FILTER_NAME массива параметров компонента, только без символа $. На этом все, компонент выведет товары, которые добавили вы добавили в избранное.

241027, Россия, Брянская область, поселок Путевка, улица Рослальская, дом 8, кв.121
Телефон: +7 (953) 298-86-66

13 января 2024


Добавление товара или статьи в избранное - это обязательная фишка для интернет-магазина или блога. Однако, в Битрикс по умолчанию нет функционала добавления элемента инфоблока в избранное. Поэтому в данной статье я рассмотрю один из вариантов реализации такого функционала c помощью cookie.

Реализовывать добавление в избранное будем в компоненте catalog.element. Не забудьте скопировать компонент в свое пространство имен. Для начала добавим в шаблон компонента саму ссылку/кнопку добавления в избранное:

Как видите, для ссылки мы задаем обработчик onclick, который вызывает функцию favBtn добавления элемента в избранное, в который передаем ID элемента. Далее, напишем саму функцию favBtn в файле js-скриптов. Можно использовать файл скрипта в верстке, можно использовать файл скрипта самого компонента catalog.element. Только не забудьте скопировать код в минифицированную версию:


function favBtn(pid){

    $.post('/addfavorite.php', {PID: pid}, function(data){
          alert("Товар добавлен в избранное!")
    })

    return false
}

Внутри функции мы используем ajax для передачи данных в php-скрипт. А передаем мы идентификатор товара PID, которой в свою очередь передали в функцию. Теперь создадим в корне сайта файл addfavorite.php со следующим содержимым:


require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

global $APPLICATION;

$arFavorits = unserialize($APPLICATION->get_cookie("UF_FAVORITS"));

$arFavorits[] = ['pid' => $_POST['PID']];

$UF_FAVORITS = serialize($arFavorits);

$APPLICATION->set_cookie("UF_FAVORITS", $UF_FAVORITS);

$application = \Bitrix\Main\Application::getInstance();
$context = $application->getContext();
$context->getResponse()->flush('');

Три последние строчки файла должны обязательно присутствовать. Без них куки устанавливаться не будут. Сохранение id избранных элементов производится в куки с ключом UF_FAVORITS. Сначала мы получаем куки с данным ключом, затем преобразуем куки в массив id. Добавляем к массиву id элемента, который хотим добавить в избранное. Затем производим обратный процесс, т.е. преобразуем массив в сериализованную строку и записываем ее в переменную $UF_FAVORITS. И наконец перезаписываем куки с ключем UF_FAVORITS значением переменной $UF_FAVORITS.

Данный способ можно использовать не только на сайтах, работающих на Битрикс, если вместо битриксовых методов работы с cookie использовать стандартный метод php setcookie и супермассив $_COOKIE.

Теперь на любой странице сайта, например, в специально созданном разделе для отображения избранных товаров, разместите компонент catalog.section, если речь идет о избранных товарах. Или компонент news.list, если речь идет о статьях:


$arFavorits = unserialize($APPLICATION->get_cookie("UF_FAVORITS"));

global $favFilter;
$favFilter = array("=ID" => $arFavorits);
$APPLICATION->IncludeComponent(
	"bitrix:catalog.section", 
	"", 
	array(
		"IBLOCK_TYPE_ID" => "catalog",
		"IBLOCK_ID" => "5",
		"BASKET_URL" => "/personal/cart/",
		"COMPONENT_TEMPLATE" => "",
		"IBLOCK_TYPE" => "catalog",
		"SECTION_ID" => $_REQUEST["SECTION_ID"],
		"SECTION_CODE" => "",
      "FILTER_NAME" => "favFilter",
		...............................................................................
                ...............................................................................
	),
	false
);

Сначала получаем массив ID товаров. Потом создаем пользовательский фильтр favFilter, т.е. компонент будет выводить только те товары, ID которых находятся в массиве $favFilter. И название фильтра добавляем в параметр FILTER_NAME массива параметров компонента, только без символа $. На этом все, компонент выведет товары, которые добавили вы добавили в избранное.

ДРУГИЕ СТАТЬИ

Возврат к списку
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
 
Участник программы мониторинга качества внедрения Золотой сертифицированный партнер 1с-Битрикс

Заказать проект или работы:

Проверяем мессенджеры и почту 3 раза в день. Отвечаем в течении 24-х часов.

Заказать разработку

Копирайт 2014-2024. BUSSOL - разработка и продвижение сайтов.
BUSSOL, ОГРНИП: 321325600054519,
Смотреть все реквизиты
Сайт работает на 1С-Битрикс.Управление сайтом

bussolweb.ru использует файлы «cookie» с целью персонализации сервисов и повышения удобства пользования веб-сайтом. Если Вы не хотите, чтобы Ваши пользовательские данные обрабатывались, пожалуйста, ограничьте их использование в своём браузере
Политика конфиденциальности
Публичная оферта