Разработка своего компонента для Битрикс с классами и D7
Войти

Разработка своего компонента для Битрикс с классами и D7

Разработка своего компонента для Битрикс с классами и D7

С 12й версии 1С-Битрикс появилась возможность писать компоненты используя классы, но наиболее примечательной, на мой взгляд, стала возможность наследовать классы компонентов. Таким образом, можно написать стандартный компонент, а потом при необходимости наследоваться от него и добавлять новый необходимый функционал, не копипастя повторяющиеся и стандартные куски кода. Так же с 12й версии ребята анонсировали появление нового ядра D7 (почему такое название я не знаю), они переписывают ядро, появились неймспейсы, ORM, в 14й версии стали появляться компоненты переписанные под новую идеологию, появился целый раздел в документации, посвященный D7. Опираясь на эти нововведения попытаемся написать компонент по новому.

Сразу скажу, я не фанат компонентов, которые настраиваются целиком и полностью и выполняют 100500 задач. В моем понимании компонент имеет минимальное количество настроек и выполняет одну конкретную задачу.

При работе с битриксом 90% это работа с инфоблкоми, поэтому можно выделить три основных компонента для работы инфоблоками:

  • компонент вывода списка элементов инфоблока (например, список новостей);
  • компонент вывода описания элемента инфоблока (например, детальное описание новости);
  • комплексный компонент ( назовем его роутер, для работы ЧПУ)

Рассмотрим создание компонента списка элементов инфоблока, от которого потом можно было бы наследоваться (параметры, отличительные особенности, «структура» компонента, ссылка на код компонента в конце статьи, считаем, что вы знакомы с битриксом).

Стандартные настройки для компонента:

  • выбор типа инфоблока (список);
  • выбор инфоблока (список);
  • показывать постраничную навигацию (чекбокс);
  • количество элементов (число; если 0, то показывать все элементы;
  • если не ноль и установлен чекбокс постраничной навигации, то это количество элементов на странице; если не ноль и чекбокс постраничной навигации не установлен, то количество элементов, выбранных сверху);
  • поле для сортировки (сортировок обычно две);
  • направление сортировки;
  • кеширование (тип кеширования, время кеширования).

Компонент должен выполнять следующие функции:

  • подключает языковой файл (для вывода языковых фраз) — данный метод является стандартным, мы его лишь переопределяем;
  • подготавливает параметры компонента — данный метод является стандартным, переопределяем. Важно, что бы все параметры компонента были подготовлены, по возможности приведены к ожидаемому типу, т.к. от этого зависит кеш компонента;
  • подключает необходмые модули;
  • подключает обязательные параметры;
  • выполняет действия перед кешированием;
  • кеширует работу компонента;
  • проводит выборку данных для отображения;
  • подключает шаблон вывода;
  • выполняет действия после кеширования (например, установка заголовков, выполнение отложенных функций, любые действия, которые необходимо выполнять постоянно «за кешем компонента»).

Такую структуру можно наследовать и переопределять только те методы, которые необходимо (например, для получения спискаразделов достаточно переопределить метод выборки, а не переписывать весь компонент).

Отличительные особенности:

по новой идеологии, в случае появления нештатной ситуации необходимо выбросить исключение, поэтому в коде появились битриксовые исключения; появились неймспейсы, поэтому работа с языковыми фразами осуществляется через класс BitrixMainLocalizationLoc, при этом необходимо явно подключать языковые файлы через метод Loc::getMessages(__FILE__), а получение языковой фразы — Loc::getMessage();
подключение модулей осуществляется через метод BitrixMainLoader::includeModule();
в случае выбрасывания эксепшена MainArgumentNullException необходимо указать код поля, он подставится в шаблон вывода сообщения об ошибке.

Ссылки по теме:

  1. 1. https://habrahabr.ru/sandbox/82859/
Теги:
php