Битрикс — избранное (добавление/удаление)

11.10.2017  05:26

Часто встречается на сайтах блок Избранное. Сделаем велосипед для Битрикса.

Яваскрипт кнопочки:
if (window.jQuery) {
$(document).ready(function(){ 
	$('.like a').click(function () {
		var item = $(this).data('itemid');
		var act = $(this).data('act');
		var lnk_like = $(this);
		var lnk = '/ajax/fav.php';
		$.post(lnk, { id: item, act: act }, function(data) {
			// alert(data.res);
			if (act == 'add') {
				lnk_like.find('span').html('В избранном');
				lnk_like.data('act', 'del');
			}
			else {
				lnk_like.find('span').html('В избранное');
				lnk_like.data('act', 'add');
			}
		}, "json");
		return false;
    });
});
}


php (файл /ajax/fav.php):
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
header('Content-type: text/html; charset=utf-8');
CModule::IncludeModule('iblock');
$act = $_REQUEST['act'];
$ID = intval($_REQUEST['id']);
if($ID > 0)
   {
      $arrItemID = array();      
                     
      if(!$USER->IsAuthorized()){
         $arElements = unserialize($APPLICATION->get_cookie('bo_favorites'));
		 if ($act == 'del') {
			unset($arElements[$ID]);
		 }
		 else {
			$arElements[$ID] = $ID;
		 }
		
         $APPLICATION->set_cookie("bo_favorites",serialize($arElements));
      }
      else{
         $idUser = $USER->GetID();
         $rsUser = CUser::GetByID($idUser);
         $arUser = $rsUser->Fetch();
         $arElements = unserialize($arUser['UF_FAVORITES']);
		 if ($act == 'del') {
			unset($arElements[$ID]);
		 }
		 else {
			$arElements[$ID] = $ID;
		 }
         $USER->Update($idUser, Array("UF_FAVORITES"=>serialize($arElements)));
      }
	$array = array("res" => serialize($arElements));
	echo json_encode($array);
	exit;
	  
   }


Перед подключением компонента (я использовал catalog.section, но можно и news.list — смотря нужны цены или нет):
if(!$USER->IsAuthorized()){
	$arElements = unserialize($APPLICATION->get_cookie('bo_favorites'));
}
else{
	$idUser = $USER->GetID();
	$rsUser = CUser::GetByID($idUser);
	$arUser = $rsUser->Fetch();
	$arElements = unserialize($arUser['UF_FAVORITES']);
}
if (!empty($arElements)) {
	global $arrFilterFav;
	$arrFilterFav = array(
		"ID" => $arElements
	);
//компонент с настройкой "FILTER_NAME" => "arrFilterFav", и выключенным кешированием
}


Готово! У пользователя добавляем строковое свойство UF_FAVORITES, там будет храниться сериализованный массив товаров, добавленных в Избранное. У неавторизованных пользователей данные будут храниться в куках/cookie.


перейти в Блог | Блог (стр. 2)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 18  JavaScript 17  jQuery 10  PHP 25  web-программирование 41  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)