Skip to content

Модуль избранного. 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' => '',
        );
    }
}

Репозиторий

Репозиторий модуля