<?php 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");
use Bitrix\Main\Application;
use Bitrix\Main\Web\Cookie;

/* Избранное */
function setLike($ID){
    global $APPLICATION;
    $iblockId=33;
    $application = Application::getInstance();
    $context = $application->getContext();
    $arElements = unserialize($APPLICATION->get_cookie('favorites'));
    if(!in_array($ID, $arElements))
    {
        $arElements[] = $ID;
        $result = 1; // Датчик. Добавляем
        
    }
    else {
        $key = array_search($ID, $arElements); // Находим элемент, который нужно удалить из избранного
        unset($arElements[$key]);
       
        $result = 2; // Датчик. Удаляем
    }
    $db_props = CIBlockElement::GetProperty($iblockId,$ID,['sort'=>'asc'],['CODE'=>'LIKES']);
    if($ar_props = $db_props->Fetch())
        $LikeCount = IntVal($ar_props["VALUE"]);
    else $LikeCount=0;

    if($result==1){
        $LikeCount++;
    }
    else $LikeCount--;

    CIBlockElement::SetPropertyValuesEx($ID, $iblockId, array('LIKES' => $LikeCount));
    $cookie = new Cookie("favorites", serialize($arElements), time() + 60*60*24*60); 
    $cookie->setDomain($context->getServer()->getHttpHost());
    $cookie->setHttpOnly(false);
    $context->getResponse()->addCookie($cookie);
    $context->getResponse()->writeHeaders("");
    echo $LikeCount;
}

if($_REQUEST['ajax'] && $_REQUEST['id'] && $_REQUEST['action']){

    $ID=(int)$_REQUEST['id'];
    switch ($_REQUEST['action']) {
        case 'counter':
            CIBlockElement::CounterInc($ID);
            break;

        case 'like':
            setLike($ID);
            break;
        
        default:
            // code...
            break;
    }
}
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");

 ?>