Создание компонентов
Фактически, на сегодняшний момент свой компонент нужно писать лишь тогда, когда нужен абсолютно новый функционал для сайта. Если учесть тот факт, что состав стандартных компонентов довольно большой, то в большинстве случаев написание новых и не требуется. Достаточно расширить функционал уже имеющихся.
Тем не менее, приходит время, когда разработчик должен научиться создавать свои компоненты.
Типовая последовательность действий
- В веб-проекте, при составлении ТЗ и проектировании, выявляют и описывают возможные виды собственных компонентов.
- Определяется пространство имен собственных компонентов, например, с использованием названия проекта. Системные компоненты Bitrix Framework размещены в пространстве имен bitrix, компоненты проекта могут размещаться в пространстве имен, к примеру, citybank.
Внимание ! Названия создаваемых компонентов не должны пересекаться со стандартными. - Определяется, какой стандартный компонент можно взять за основу для создания собственного. В коде стандартных компонентов много примеров типичного и правильного использования API и техник программирования, поэтому рекомендуется брать их за основу. - К каждому компоненту продумывается интерфейс – какие параметры должны быть доступны администратору веб-сайта для редактирования. Например, для компонента, отображающего прогноз погоды, можно в настройки для администратора вынести свойство Адрес веб-сервиса и Таймаут соединения с веб-сервисом и т.п. - Определяется, в каком разделе дерева компонентов в визуальном редакторе необходимо разместить созданный компонент. - Компонент кодируется. Особое внимание уделяется настройке автокеширования компонента и профилированию его работы – он не выполняет запросы к базе данных в режиме кэширования, выполняет минимальное количество запросов к базе данных при устаревании кэша, хранит в кэше только необходимые данные, использует минимально возможный объем оперативной памяти (не сортирует массивы размером с десятки-сотни мегабайт и т.п).
Порядок создания
Выделить необходимый php-код в отдельный файл для того, чтобы использовать его потом в виде вызываемого файла несложно. Но компонент еще нужно подключить в систему с помощью файла описания, который опознается ядром Bitrix Framework. Без этого пользователь не увидит в визуальном редакторе иконку с названием компонента и сможет настраивать его свойства.
Напомним, что компонент – это выделенный в отдельный файл php-код с законченной функциональностью, файл регистрации компонента в системе и описания его параметров, а также файлы локализации.
- Регистрация компонента
- Выделение необходимого php-кода в отдельный файл.
- Создание файла описания .description.php
- Размещение файлов в папке в собственном пространстве имен.
- Задание параметров в коде компонента
- Локализация
- Подготовка файлов с текстовыми константами для файлов компонента. Подробнее про языковые файлы читайте в разделе Папки локализаций.
Важно! Все ключи в $MESS, содержащие название, описание и параметры компонента, а также идентификаторы веток компонента в дереве компонентов визуального редактора должны быть уникальными в рамках всего продукта.
При создании компонента для Marketplace нужно создавать мастер установки (аналогично модулю).
Совет от М. Месилова:
Если на сайте используются компоненты собственной разработки и требуется их большое обновление, то рекомендуется использовать в префиксе номер версии: news.list.v2 так вы не поломаете старые компоненты по всему сайту и у вас будет возможность сделать новый компонент с потерей обратной совместимости.
Созданные для веб-проекта собственные компоненты могут использоваться как основа для новых компонентов, а также, по причине модульной структуры и "отчуждаемости от проекта" - эффективно использоваться в других веб-решениях.
Примечание: При создании компонента рекомендуется использовать:
- SEF режим
В комплексные компоненты встроена функция генерации ЧПУ. У этих компонентов всегда есть входной параметр SEF_MODE, который может принимать значения Y и N. Если параметр SEF_MODE равен N, то компонент работает с физическими ссылками и все параметры передает через стандартные параметры HTTP запроса.
а в шаблоне компонента:
- JS-класс
Иногда при разработке компонента его шаблон необходимо наделить js-функциональностью, событиями и прочим. Выглядеть это может примерно так:
Подробнее ... , - буферизацию
Усовершенствованные методы буферизации в шаблоне позволяют более не использовать CBitrixComponentTemplate::EndViewTarget() ввиду того, что конец шаблона вызывает завершение буферизации автоматически.