/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/php_interface/classes/mwi/Favorite.php
154 строки
5 KB
Alexey Karizhenskiy
Первая сборка (из ранее используемого)
19 янв 2026, 21:00
19 янв 2026, 21:00
d843e36
Код
Авторство
О чём код?
<?php namespace MWI; class Favorite { protected static $_instance; protected static $arProductIds; private function __construct() { } public static function getInstance() { if (self::$_instance === null) { self::$_instance = new self; } return self::$_instance; } // Получить код пользовательского поля public static function getUserFieldCode(): string { return 'UF_FAVORITES'; } // Получить код поля в куках public static function getCookieFieldCode(): string { return 'favorites'; } public static function getProductIds(bool $isCache = true): array { $self = self::getInstance(); if (!is_array($self->arProductIds) || !$isCache) { $self->arProductIds = $self->get(); } return $self->arProductIds; } // Получить все public static function get(): array { $application = \Bitrix\Main\Application::getInstance(); $context = $application->getContext(); $arElements = unserialize($context->getRequest()->getCookie(self::getCookieFieldCode())); if (empty($arElements)) $arElements = array(); global $USER; if ($USER->IsAuthorized()) { // Для авторизованного $idUser = $USER->GetID(); $rsUser = \CUser::GetByID($idUser); $arUser = $rsUser->Fetch(); $arUserElements = (!empty($arUser[self::getUserFieldCode()]) ? json_decode($arUser[self::getUserFieldCode()], true) : []); // Достаём избранное пользователя if (!empty($arUserElements)) { foreach ($arUserElements as $val) { if (!in_array($val, $arElements)) { $arElements[] = $val; } } } } // Проверить на действительность if (!empty($arElements) && \Bitrix\Main\Loader::includeModule('iblock')) { $arTemp = array(); $rs = \CIBlockElement::GetList( array('ID' => $arElements), array('=ID' => $arElements, 'ACTIVE' => 'Y', 'SECTION_GLOBAL_ACTIVE' => 'Y'), false, false, array('ID', 'IBLOCK_ID') ); while ($ar = $rs->Fetch()) { $arTemp[] = $ar['ID']; } $arElements = $arTemp; } return $arElements; } // Обновить все public static function update($arElements = []) { global $USER; $arElements = (!empty(($arElements) && is_array($arElements)) ? array_values($arElements) : []); if (!$USER->IsAuthorized() || empty($arElements)) { $application = \Bitrix\Main\Application::getInstance(); $context = $application->getContext(); $cookie = new \Bitrix\Main\Web\Cookie(self::getCookieFieldCode(), serialize($arElements), time() + 60 * 60 * 24 * 60); $cookie->setDomain($context->getServer()->getHttpHost()); $cookie->setHttpOnly(false); $cookie->setSecure(false); $context->getResponse()->addCookie($cookie); // $context->getResponse()->flush(""); } // Для авторизованного if ($USER->IsAuthorized()) { $idUser = $USER->GetID(); $USER->Update($idUser, array(self::getUserFieldCode() => json_encode($arElements, JSON_UNESCAPED_UNICODE))); // Добавляем элемент в избранное } return true; } // Добавить public static function add($id) { $arElements = self::get(); if (in_array($id, $arElements)) { return true; } array_unshift($arElements, $id); return self::update($arElements); } // Удалим public static function remove($id): bool { $arElements = self::get(); $arIds = (is_array($id) ? $id : [$id]); // Находим элемент, который нужно удалить foreach ($arIds as $elementID) { $key = array_search($elementID, $arElements); if (false !== $key) { unset($arElements[$key]); } } return self::update($arElements); } // Количество public static function getCount() { $arElements = self::get(); return count($arElements); } }