С 12й версии 1С-Битрикс появилась возможность писать компоненты используя классы, но наиболее примечательной, на мой взгляд, стала возможность наследовать классы компонентов. Таким образом, можно написать стандартный компонент, а потом при необходимости наследоваться от него и добавлять новый необходимый функционал, не копипастя повторяющиеся и стандартные куски кода.
Так же с 12й версии ребята анонсировали появление нового ядра D7 (почему такое название я не знаю), они переписывают ядро, появились неймспейсы, ORM, в 14й версии стали появляться компоненты переписанные под новую идеологию, появился целый раздел в документации, посвященный D7.
Опираясь на эти нововведения попытаемся написать компонент по новому.
Сразу скажу, я не фанат компонентов, которые настраиваются целиком и полностью и выполняют 100500 задач. В моем понимании компонент имеет минимальное количество настроек и выполняет одну конкретную задачу.
При работе с битриксом 90% это работа с инфоблкоми, поэтому можно выделить три основных компонента для работы инфоблоками:
Рассмотрим создание компонента списка элементов инфоблока, от которого потом можно было бы наследоваться (параметры, отличительные особенности, «структура» компонента, ссылка на код компонента в конце статьи, считаем, что вы знакомы с битриксом).
Стандартные настройки для компонента:
Компонент должен выполнять следующие функции:
Такую структуру можно наследовать и переопределять только те методы, которые необходимо (например, для получения спискаразделов достаточно переопределить метод выборки, а не переписывать весь компонент).
Отличительные особенности:
Собственно результат на GitHub
Полезная информация:
Компоненты
Ядро D7
Так же с 12й версии ребята анонсировали появление нового ядра D7 (почему такое название я не знаю), они переписывают ядро, появились неймспейсы, ORM, в 14й версии стали появляться компоненты переписанные под новую идеологию, появился целый раздел в документации, посвященный D7.
Опираясь на эти нововведения попытаемся написать компонент по новому.
Сразу скажу, я не фанат компонентов, которые настраиваются целиком и полностью и выполняют 100500 задач. В моем понимании компонент имеет минимальное количество настроек и выполняет одну конкретную задачу.
При работе с битриксом 90% это работа с инфоблкоми, поэтому можно выделить три основных компонента для работы инфоблоками:
- компонент вывода списка элементов инфоблока (например, список новостей);
- компонент вывода описания элемента инфоблока (например, детальное описание новости);
- комплексный компонент (назовем его роутер, для работы ЧПУ)
Рассмотрим создание компонента списка элементов инфоблока, от которого потом можно было бы наследоваться (параметры, отличительные особенности, «структура» компонента, ссылка на код компонента в конце статьи, считаем, что вы знакомы с битриксом).
Стандартные настройки для компонента:
- выбор типа инфоблока (список);
- выбор инфоблока (список);
- показывать постраничную навигацию (чекбокс);
- количество элементов (число; если 0, то показывать все элементы; если не ноль и установлен чекбокс постраничной навигации, то это количество элементов на странице; если не ноль и чекбокс постраничной навигации не установлен, то количество элементов, выбранных сверху);
- поле для сортировки (сортировок обычно две);
- направление сортировки;
- кеширование (тип кеширования, время кеширования).
Компонент должен выполнять следующие функции:
- подключает языковой файл (для вывода языковых фраз) — данный метод является стандартным, мы его лишь переопределяем;
- подготавливает параметры компонента — данный метод является стандартным, переопределяем. Важно, что бы все параметры компонента были подготовлены, по возможности приведены к ожидаемому типу, т.к. от этого зависит кеш компонента;
- подключает необходмые модули;
- подключает обязательные параметры;
- выполняет действия перед кешированием;
- кеширует работу компонента;
- проводит выборку данных для отображения;
- подключает шаблон вывода;
- выполняет действия после кеширования (например, установка заголовков, выполнение отложенных функций, любые действия, которые необходимо выполнять постоянно «за кешем компонента»).
Такую структуру можно наследовать и переопределять только те методы, которые необходимо (например, для получения спискаразделов достаточно переопределить метод выборки, а не переписывать весь компонент).
Отличительные особенности:
- по новой идеологии, в случае появления нештатной ситуации необходимо выбросить исключение, поэтому в коде появились битриксовые исключения;
- появились неймспейсы, поэтому работа с языковыми фразами осуществляется через класс Bitrix\Main\Localization\Loc, при этом необходимо явно подключать языковые файлы через метод Loc::getMessages(__FILE__), а получение языковой фразы — Loc::getMessage();
- подключение модулей осуществляется через метод Bitrix\Main\Loader::includeModule();
- в случае выбрасывания эксепшена Main\ArgumentNullException необходимо указать код поля, он подставится в шаблон вывода сообщения об ошибке.
Собственно результат на GitHub
Полезная информация:
Компоненты
Ядро D7