Appearance
Модуль избранного. realweb.api.favorite
Совместимость
realweb.api v.5, v.6
Описание
Модуль позволяет добавлять элементов в списки избранного.
Пользователь может иметь сколько угодно списков на одном проекте (Избранное, сравнение, список желаний, etc )
Устанавливается в качестве модуля realweb.api
Для сохранения списка неавторизованного пользователя используется cookies После авторизации пользователя все избранные элементы переносятся (склеиваются) в БД.
Установка происходит через composer
Практическое применение
Списки избранного добавляется программистом через миграцию БД, устанавливается уникальный символьный код, Название списка, настройки проверки активности сущностей.
В настройках модуля имеется возможность настраивать проверку активности сущностей для каждого списка
Каждый список обладает следующими свойствами:
- Уникальный символьный код списка
- Название списка для администратора (отображение в настройках)
- Тип списка на выбор
- ELEMENT - элементы ИБ, по умолчанию
- SECTION - разделы ИБ
- CUSTOM - произвольные сущности
В модуль встроена проверка на активность для списков типа ELEMENT и SECTION (при включенной настройке в админке). Проверяется только поле “Активность”.
Для кастомизации проверки активности (Например, для списка типа CUSTOM или для уточнения проверки активности Элементов (например по дате активности) и Разделов) предусмотрено событие модуля onCheckActiveItems
Пример использования события
php
use Realweb\Api\Module\Favorite\Model\Helper;
\Bitrix\Main\EventManager::getInstance()
->addEventHandler(
Helper::MODULE_NAME,
'onCheckActiveItems',
array('MyClass', 'onCheckActiveItems')
);php
class MyClass{
public static function onCheckActiveItems(\Bitrix\Main\Event $obEvent): ?EventResult
{
/** @var \Realweb\Api\Module\Favorite\Model\Code\Entity $obList */
$obList = $obEvent->getParameter('list');
$arItems = $obEvent->getParameter('items');
if (count($arItems) == 0) {
return null;
}
if ($obList->isElement()) {
// Проверяем на существование элементов и на активность
$arNewItems = array();
....
$obResult = new EventResult(EventResult::SUCCESS, $arNewItems, Helper::MODULE_NAME);
return $obResult;
}
elseif ($obList->isSection()) {
// Проверяем на существование разделов и на активность
$arNewItems = array();
....
$obResult = new EventResult(EventResult::SUCCESS, $arNewItems, Helper::MODULE_NAME);
return $obResult;
}
elseif ($obList->isCustom()) {
// Проверяем на существование разделов и на активность
$arNewItems = array();
....
$obResult = new EventResult(EventResult::SUCCESS, $arNewItems, Helper::MODULE_NAME);
return $obResult;
}
return null;
}
}Модуль добавляет namespace Realweb\Api\Module\Favorite
Основные классы
- \Realweb\Api\Module\Favorite\Model\Table - Таблица
- \Realweb\Api\Module\Favorite\Model\Database - Модель
- \Realweb\Api\Module\Favorite\Model\Entity - Сущность (Строка в БД)
- \Realweb\Api\Module\Favorite\Model\Collection - Коллекция сущностей
Контроллер
php
\Realweb\Api\Module\Favorite\Controller\IndexControllerМетоды
- GET - получение "Избранных" id элементов по коду списка
- list_code - обязательный параметр - Название списка. Списков может быть сколько угодно
- POST - добавление элемента в список
- list_code - обязательный параметр - Название списка.
- id - обязательный параметр - ID элемента.
- DELETE - удаление элемента из списка
- list_code - обязательный параметр - Название списка.
- id - обязательный параметр - ID элемента.
Практическое использование
Добавление в избранное
php
namespace Realweb\Api\Module\Favorites\Controller;
use Realweb\Api\Module\Favorites;
\Bitrix\Main\Loader::includeModule('realweb.api.favorite');
/**
* Class \Realweb\Api\Module\Favorites\Controller\AddController
*
*/
class AddController extends \Realweb\Api\Module\Favorite\Controller\IndexController
{
public function checkPostParams()
{
$this->setParam('list_code', Favorites\Model\Helper::LIST_FAVORITE);
parent::checkPostParams();
if ($this->getComponent()->hasErrors()) {
return array(
'success' => false,
'message' => 'Ошибка',
'data' => '',
);
}
}
public function post()
{
parent::post();
return array(
'success' => true,
'message' => NULL,
'data' => '',
);
}
}