Создание компонента Битрикс с нуля

Довольно часто возникает необходимость написать собственный компонент под Битрикс. Например из-за что стандартные вам не подходят для конкретной задачи или же потому что вам нужен ваш собственный компонент для вашего модуля.

Если вы не знаете как писать компоненты с нуля, то в начале статьи мы приведём для вас ликбез. А если у вас уже есть опыт их написания, то в параграфе "Быстрая и простая разработка компонентов" мы покажем вам более быстрый и удобный способ их создания, который сэкономит вам немало сил.

Компоненты Битрикса. Базовая теория

В общих чертах компонент содержит:

  • Логику
  • Представление
  • Настройки

Так как компонент - это цельная система по получению какой-либо информации, её обработке и выводу, а также возможной обработки действий пользователей и совершению других действий на странице сайта.

Файловая структура

Ниже представлена структура файлов компонента в общем виде.

  • my.component/
    • class.php
    • component.php
    • .parameters.php
    • .description.php
    • templates/
      • .default/
        • .parameters.php
        • result_modifier.php
        • template.php
        • style.css
        • script.js
        • component_epilog.php
        • lang/
          • ru/
            • .parameters.php
            • result_modifier.php
            • template.php
            • component_epilog.php
    • lang/
      • ru/
        • class.php
        • component.php
        • .parameters.php
        • .description.php

Подробнее про каждый файл

component.php и/или class.php отвечают за логику: сбор данных, их модификацию, обработку форм, работу с кешем и так далее. Могут использовать как вместе так и по отдельности. Component.php это "старая школа", в то время как class.php это уже ООП подход ядра D7. Выбор между подходами зависит от вас, но мы рекомендуем использовать только class.php, так как работа с ним легче в плане читаемости и доработок.

.parameters.php-файлы отвечают за настройки компонента. Как раз те, которые вы могли видеть в визуальном редакторе при работе со страницами, на которых есть компоненты. Сами настройки описываются как элементы специального массива $arComponentParameters, который имеет строго определённый формат. В зависимости от расположения файла в системе меняется его роль. Если файл лежит в корне папки компонента, то настройки из него будут видны всегда при подключении компонента, а если в папке шаблона, то только после выбора этого шаблона.

.description.php - это файл с общей информацией о компоненте. Хранит его название, описание, путь в визуальном редакторе и дополнительную информацию, наподобие сортировки и иконки. Всё это описывается в специальном массиве $arComponentDescription, который также имеет свою определённую структуру.

Все папки, которые лежат внутри папки templates/ являются шаблонами компонента. Есть специальное название .default, которое обозначает шаблон по умолчанию, то есть тот шаблон, который подключится, если не выбран конкретный шаблон. Кстати, шаблон с таким названием должен быть всегда.

Подробнее про файлы шаблона

template.php - это собственно и есть представление компонента. По замыслу в нём не должно быть какой-либо логики, только вывод той информации, которую он должен получать уже подготовленной.

result_modifier.php - файл, который подключится до template.php. Его роль - дополнительная подготовка информации. Это необходимо для ситуации, когда у одного компонента есть несколько шаблонов, и какому-то из них нужно как-то особенно обработать полученные данные перед выводом или же получить новые. Это следует делать как раз в данном файле.

component_epilog.php - файл, который подключится уже после template.php, то есть уже после вывода информации. У него своя особенная роль, о которой будет рассказано в параграфе о кешировании.

style.php и script.php - это соответственно стили и javascript-файл шаблона. Если в папке шаблона будут файлы с именно такими названиями, то они подключатся автоматически.

Все надписи и строчки текста должны быть вынесены из файлов в соответствующие им lang-файлы, иначе при загрузке они могут стать нечитаемыми вследствие нарушения кодировки. К тому же переводы компонентов на другие языки осуществляются через создание дополнительных папок внутри lang-папки.

Потоки информации между файлами компонента

Как вы понимаете, в компоненте присутствует множество файлов. Одни отвечают за получение настроек, другие за сбор информации, третьи же за её вывод. Так как же эти данные передаются от файла к файлу?

Есть 2 специальных массива: $arParams и $arResult.

Первый отвечает за настройки компонента, за те, которые в описали в .parameters.php. Он содержит в себе код настройки и значение, которое указано в массиве подключения компонента на странице.

$arResult хранит всю необходимую для работы информацию. Он создаётся в class.php (или component.php), модифицируется в result_modifier.php, выводится в template.php. За всё время жизни он проходит следующий путь.

  1. class.php (или component.php)
  2. result_modifier.php
  3. template.php
  4. component_epilog.php

Кеширование в компонентах

Наверняка вы слышали о довольно мощной системе кеширования в Битриксе. Она позволяет свести запросы к базе данных практически до нуля, а также не повторять всевозможные дополнительные вычисления. Поскольку вы пишете компонент сами, вам нужно самим позаботиться о кешировании. Мы советуем подробнее изучить метод StartResultCache. Вы будете вызывать в class.php компонента, откуда соответственно начнёт собираться кеш.

Все файлы шаблона кешируются. За исключением component_epilog.php, в этом и есть его специальное предназначение. В отличие от других файлов, код внутри component_epilog.php будет выполняться на каждом хите.

Но есть способ лишний не думать о структуре файлов, структуре массивов и просто писать нужный для бизнеса код.

Быстрая и простая разработка компонентов

В нашем Конструкторе модулей есть специальный мастер для компонентов. Он позволяет избавиться от большей части рутинных процедур. Ниже мы расписали некоторые из них по пунктам. Только посмотрите как всё упрощается.

Не нужно подготавливать файловую структуру

Каждый раз, когда вы начинаете новый компонент, вы проделываете множество повторяющихся из раза в раз операций:

  • Создаёте папку компонента с нужным кодом
  • Создаёте файл class.php по определённому шаблону
  • Подготавливаете хотя бы минимальный .description.php
  • Создаёте папку дефолтного шаблона
  • Создаёте template.php шаблона по определённому шаблону

И это только минимум того что нужно сделать хотя бы для начала работы над компонентом. А теперь посмотрите как произвести все эти операции в нашем сервисе.

Форма создания компонента в конструкторе

И всё! Просто заполнить форму, где вы указываете лишь самые необходимые параметры. И уже после этого вы можете скачать готовую к работе папку компонента, где автоматически созданы и заполнены все обязательные файлы.

Не нужно изучать работу с настройками

Массив внутри .parameters.php имеет специальный формат. Вы помните его наизусть? А сколько типов полей существует для настроек? А вы знали, что у массива настроек компонента и массива настроек шаблона разные имена?

Больше не нужно об этом даже задумываться. Посмотрите как легко работать с настройками компонента в нашем сервисе.

Форма работы с настройками компонента

Не нужно писать ни строчки кода, думать над о формате, кавычках, вытаскивать фразы в lang. Просто мышкой на форме вбиваете имя и код свойства, его тип, дополнительную информацию по необходимости и на выходе получаете готовый файл с массивом.

Кстати, в мастере работы с шаблоном можно точно также просто создавать отдельные настройки для шаблона.

Не нужно знать структуру .description.php

Вы умеете работать со структурой компонентов в визуальном редакторе? Некоторые компоненты иногда нужно положить в корень, некоторые в папку модуля, некоторые во вложенную папку внутри другой папки. Для всех этих вариантов нужно уметь работать с массивом $arComponentDescription. Но сделать это в данном сервисе проще простого, взгляните на картинку ниже.

Форма настройки пути до компонента в визуальном редакторе

Не нужно вытаскивать фразы в lang-файлы вручную

Вы знаете, что Битрикс поломает всю кириллицу в любом из файлов компонента при их скачивании из Маркетплейса. Поэтому мы должны вытаскивать фразы в специальные массивы внутри соответствующих lang-файлов, а в самих файлах компонента вставлять код вывода фразы. Делаеть вручную это безумно муторно. Также это необходимая операция при переводе компонента на другой язык.

Но мы подготовили специальный раздел для упрощения таких работ. Там вам показывается, какие из ваших файлов требуют внимание.

Список файлов для перевода

А на странице работы с конкретным файлом, вы в один клик можете вытащить фразу в lang или транслитерировать комментарий.

Форма вытаскивания фразы в lang

Не нужно писать логику с нуля

Очень часто компоненты выполняют похожие операции. Например, получение элементов или категорий инфоблока, обработка формы, показ информации об элементе. Чтобы не писать каждый раз логику с нуля, у нас есть пополняемый список готовых шаблонов для class.php.

Страница с шаблонами class.php

Более того вы можете добавить свой шаблон.

Форма добавления своего шаблона class.php

Попробуйте создать свой компонент всего за несколько минут бесплатно и прямо сейчас. И прочувствуете всю лёгкость нового способа работы.
И, конечно же, пишите со всеми вопросами и предложениями нам. Сервис развивается специально для вас.