Компоненты «Битрикс»: введение
Информация в CMS «Битрикс» организована в виде информационных блоков. Эти «кирпичики» дают администратору доступ к данным из базы в структурированном, универсальном и гибко настраиваемом формате. А для преобразования данных в пользовательский формат предназначены компоненты. Они включают исполняемый код, так называемые контроллеры, и шаблоны оформления страниц.
Какие задачи выполняют компоненты «Битрикс»?
При помощи компонентов на сайтах выводятся динамические разделы различного назначения: товарные каталоги, фотогалереи, разделы новостей и статей. Компоненты, служащие для реализации этих задач, называются комплексными.
Помимо этого, компоненты применяются для организации регулярно используемых модулей сайта. Например, для авторизации, подписки на обновления, поиска.
Наконец, компоненты служат для вывода обновляющейся информации. Например, новостной ленты, случайной цитаты или фото, рейтинга.
Компоненты «Битрикс» на странице
Страница сайта может содержать произвольное количество компонентов. Допустим, один выводит подробное описание из инфоблока, другой показывает форму оформления заказа, третий публикует рекламные баннеры. Один компонент может вызываться на сайте неограниченное количество раз, в произвольном количестве и любом месте сайта.
Конкретный вид данных, обрабатываемых компонентом в конкретной точке, задается параметрами компонента. Параметры и их типы перечисляются в специальном файле в составе компонента, оформленные в виде хэш-массива.
Простые (одностраничные) компоненты
Служат для вывода определенной области на одной странице. Сочетание простых компонентов на странице дает возможность совмещать данные различных модулей и инфоблоков. Например, выводить вместе блоги, новости и товары.
Комплексные (многостраничные) компоненты
Комплексные компоненты автоматически размещают параметры одностраничных компонентов, избавляя администратора от необходимости делать эту работу вручную. Поэтому, они служат для создания разделов сайта, таких, как каталог или раздел новостей. Фактически, один файл с исполняемым кодом вызывает сразу целый набор динамических страниц.
Как работают комплексные компоненты?
Получив от действий пользователя команду, например, при нажатии пункта меню, комплексный компонент устанавливает, какую страницу следует показать, и выводит эту динамическую страницу со своим шаблоном компонента.
Затем шаблон комплексного компонента подключает простые компоненты, при этом настраивает их свойства автоматически.
Далее простые компоненты обращаются к ядру CMS, получают данные, форматируют в соответствии с собственными шаблонами, в том числе и активные элементы страницы. Такие, как кнопки, формы, ссылки, меню и так далее.
И наконец пользователь реагирует на полученную страницу, и нажатием на активную область снова отдает команду комплексному компоненту.
Для чего служат комплексные компоненты?
Исключают необходимость создания множества страниц для вывода одностраничных компонентов.
Автоматически организуют сложные связи между выводимыми динамическими страницами. Например, между лентой сообщений форума, профилями участников и темами форума.
Кастомизация (доработка) кода комплексного компонента изменяет вывод всех отображаемых им простых компонентов.
Как подключаются компоненты «Битрикс»?
По правилам работы CMS «Битрикс», файлы компонентов должны храниться по адресу:
/bitrix/components/название вашего сайта
На странице компонент следует подключать кодом:
IncludeComponent(
componentName, // имя компонента
componentTemplate, // шаблон компонента, пустая строка если шаблон по умолчанию
arParams=array(), // параметры
parentComponent=null,
arFunctionParams=array()
);?>
Как устроены компоненты «Битрикс»?
Компонент состоит из обязательного набора папок и файлов:
В папке install находятся файлы скриптов, предназначенных для установки или удаления компонента, install.php и uninstall.php соответственно.
Языковая папка lang содержит файлы сообщений компонента на разных языках. По умолчанию, на русском и английском.
Папка шаблонов templates содержит стилевые файлы, определяющие формат вывода компонента.
Исполняемый файл основного кода component.php. Без этого файла компонент не будет работать.
Исполняемый файл для редактора description.php. Без него компонент работать будет, но в редакторе работать с ним станет невозможно. Он содержит название компонента, его описание и место в файловой структуре.
Исполняемый файл параметров компонента .parameters.php.
Файл классов .class.php
Часто встречающиеся при работе с компонентами ошибки
«Код вызова компонента не удалось обнаружить»
Нередко встречается при редактировании в визуальном редакторе параметров компонента.
Причины бывают следующие:
1. Код вызова компонента не заключен в
Эти элементы обозначают начало и конец отдельного фрагмента исполняемого кода.
Записать так неправильно:
Записать так правильно:
2. HTML-код содержит ошибки
Тут, как вы понимаете, универсального рецепта нет. Проверьте все фрагменты HTML-кода и устраните ошибки.
3. Разнобой кодировок
Замечание: В текущих версиях битиркса этот раздел не актуален.
Например, сайт в целом на кодировке UTF-8, а конкретная страница на windows-1251. Эта проблема устраняется через файл .htaccess
Если сайт в кодировке UTF-8:, надо добавить в него строки:
php_value mbstring.func_overload 2
php_value mbstring.internal_encoding utf-8
И напротив, если сайт в кодировке windows-1251, то строки надо добавить такие:
php_value mbstring.func_overload 0
php_value mbstring.internal_encoding cp1251
4. Взаимное несоответствие прав
Прав пользователя, работающего с файлом, недостаточно для выполнения компонента. Надо изменить настройки прав.
Кэширование компонентов
Кэширование сайта и отдельных его элементов существенно снижает нагрузку на сервер и ускоряет загрузку страниц для посетителей. В первую очередь настройка производится на уровне компонентов.
Средства CMS «Битрикс» позволяют включить автоматическое кэширование всех компонентов нажатием одной кнопки. После этого компоненты сгенерируют кэши и в дальнейшем будут работать с ними, а не с базами данных. Это существенно ускоряет работу, но может давать неожиданные результаты при обновлении сайта.
Чтобы полностью очистить кэш при обновлении, надо действовать так:
1. Сбросить кэш конкретной страницы, нажав кнопку на панели управления
2. Перейдите в панель управления конкретного компонента и очистите кэш нажатием кнопки
3. Настройте режим сброса кэша через определенный промежуток времени.
4. Наконец, в настройках нужных компонентов можно установить режим работы «без кеширования»
Где находятся компоненты в битрикс
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы ( Marketplace > Обновление платформы ).
Ограничений нет
Мы разместили на странице компонент Компонент — специальный элемент системы, предназначенный для вывода информации из Базы данных сайта.
Подробнее. , теперь приступим к настройке.
Видеоурок
- в визуальном редакторе;
- в публичной части сайта в режиме «Правка».
В визуальном редакторе
В визуальном редакторе Визуальный редактор — инструмент, позволяющий отображать редактируемый текст в точности так же, как он будет выглядеть на странице, без использования HTML кода.
нажмите дважды левой кнопкой мыши на иконку компонента 1 или нажмите правой кнопкой мыши по иконке и выберите пункт меню Параметры компонента 2 :
Tакже вы можете изменять настройки компонента в режиме редактирования исходного кода, однако мы не рекомендуем пользоваться этим способом контент-менеджерам.
Откроется форма настройки:


Для удобства параметры разделены на группы 1 . Сами параметры расположены правее 2 . Наведите мышку на значок для получения подсказки 3 . Не все параметры требуют вашего вмешательства, зачастую достаточно определить только основные параметры.
Чтобы быстро найти конкретный параметр воспользуйтесь строкой Поиск , которая расположена над группами параметров 1 . Начните вводить текст в строку и в правой части формы отобразятся только те параметры, в которых присутствует искомое слово (или часть слова).
В публичной части сайта
- В публичной части Публичный раздел — то, что видит посетитель сайта, но для контент-менеджера — это основное место работы.
Подробнее. сайта в режиме Правки Режим Правка — специальный режим работы «1С-Битрикс: Управление сайтом», в котором
происходит изменение информации на сайте.

Подробнее. наведите мышь на область компонента, появится панель настроек. Выберите пункт Редактировать параметры компонента. Откроется форма настройки, ее описание выше.
Для чего нужны остальные пункты всплывающего меню? Давайте разберемся.
Помимо команды редактирования мы видим список компонентов, которые использованы в интересующей нас области. Для каждого компонента видим три команды:
- Копировать шаблон;
- Редактировать шаблон;
- Отключить компонент.
Первые две команды используют для работы с шаблоном, чаще всего это задача администратора сайта. А вот команда Отключить компонент может помочь контент-менеджеру. Эта опция делает компонент неактивным, но выполненные настройки компонента не сбрасывает. Данные из этого компонента не будут показаны на странице, пока вы не включите его вновь Место расположения компонента при включённом режиме правки обозначится квадратом с красной
точкой. Для включения компонента выполните обратные действия:

.
Параметры компонентов
Рассмотрим часто встречающиеся Параметры отличаются для каждого компонента, мы рассмотрим только часто встречающиеся параметры. Если у вас возникнут вопросы по настройке того или иного компонента — обратитесь к документации. группы параметров компонентов:
- Шаблон компонента
- Основные параметры и Источник данных
- Шаблоны ссылок
- Управление адресами страниц
- Управление режимом AJAX AJAX — технология обращения к серверу без перезагрузки страницы.
- Настройки кеширования
- Дополнительные настройки
Шаблон компонента
Параметр Шаблон компонента отвечает за внешний вид. У большинства компонентов только один шаблон по умолчанию (.default). Разработчики сайтов добавляют собственные шаблоны, которые появляются в этом списке
Если шаблонов несколько — выберите нужный в выпадающем списке. Учтите, что при смене шаблона изменится внешний вид создаваемой страницы.
Основные параметры и Источник данных
Здесь мы задаем источник публикуемых данных (инфоблок, форумы, веб-форма, опрос и т.д.):

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

Шаблоны ссылок
Здесь мы производим настройку адресов страниц (обратитесь к администратору за дополнительной информации):

Подробнее о настройке адресов почитайте на примере публикации веб-формы на сайте.
Управление адресами страниц
Тут мы выполняем настройку режима ЧПУ ЧПУ — это веб-адрес, удобный для восприятия человеком. Это аббревиатура от словосочетания «человеко-понятный урл» (где «урл» — жаргонное обозначение URL).

Управление режимом AJAX AJAX — технология обращения к серверу без перезагрузки страницы.
Здесь мы настраиваем AJAX в компоненте. Технология AJAX обновляет (загружает) не всю страницу, а только некоторую ее часть после действий пользователя (например, при нажатии на кнопку). Таким образом, пользователь быстрее увидит результат своих действий.

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

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

Распространенные вопросы

-
Как определить какой компонент используется в конкретном месте страницы? В режиме Правки Режим Правки — специальный режим работы «1С-Битрикс: Управление сайтом», в котором происходит изменение информации на сайте.
Подробнее. наведите мышь на интересующую вас область страницы. Появится всплывающая панель, наведите мышь на «шестеренку»
и вы увидите название компонента и информацию о нем.
и вам не до конца понятны параметры этого компонента. Переходим в пользовательскую документацию, в поиске вводим
название нужного нам компонента, выбираем первый результат и видим страницу с подробным объяснением каждого параметра.
Это значит что вы пытаетесь редактировать комплексный компонент (освежите свои знания о комплексных компонентах в предыдущих уроках). В этом случае верхняя панель служит для настройки самого комплексного компонента. Для управления простыми компонентами используются панели ниже.
Заключение
В этом непростом уроке мы разобрались с настройкой компонентов. Стоит отметить, что набор параметров у каждого компонента свой. Для подробной информации по конкретному компоненту и его параметрам обращайтесь к документации. В следующем уроке мы закрепим полученные знания с помощью реальных примеров использования компонентов.
Внесение изменений в шаблон компонентов
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы ( Marketplace > Обновление платформы ).
Ограничений нет
В готовом решении «Некстайп: Магнит» используются собственные шаблоны компонентов. По умолчанию они расположены в папке:
/bitrix/templates/magnet_/components/bitrix//
В большинстве случаев шаблон имеет название main, но в некоторых случаях шаблонов будет несколько.
Если вам необходимо внести изменения в шаблон, следуйте данной инструкции:
- Сделайте копию шаблона в папке с компонентом.
Например, вам нужно добавить произвольный код на детальную страницу товара. Для этого в разделе /bitrix/templates/magnet_/components/bitrix/catalog.element/ создайте папку. Дайте ей понятное название, например main_with_block.

- В эту папку скопируйте содержимое папки main.
- В настройках компонента укажите созданный шаблон. В нашем примере это будет каталог.

Готово. Теперь вы можете вести разработку в созданном шаблоне, и изменения не затрутся при обновлении решения.
В случае, если вы вели разработку в шаблоне по умолчанию, в папке с этим шаблоном будут созданы файлы вида:
__template.php — это и есть ваш файл template.php, из которого можно восстановить выполненные доработки.
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала.
ООО «Некстайп» 2022 © Все права защищены
Написание собственного комплексного компонента в CMS 1С-Битрикс
Комплексные компоненты необходимо использовать в случаях, когда функционал состоит из нескольких страниц с простыми компонентами.
Во-первых это более удобно использовать если вы планируете использовать ЧПУ, но только если все страницы с простыми компонентами имеют первую общую часть url. Например, страница со списком записей раздела имеет маску адреса /news/#SECTION_CODE#/, а страница детального описания имеет маску /news/#SECTION_CODE#/#ELEMENT_CODE#/, то есть неизменяемая общая часть url — это /news/
Во-вторых вы один раз при разработке комплексного компонента прописали параметры компонентов и при повторном использовании комплексного компонента, вам не нужно следить за связью настроек простых компонентов в случае если бы этот функционал был бы реализован с помощью нескольких страниц и простыми компонентами. То есть упрощает повторное использование и уменьшает шанс возникновения багов.
Основное отличие комплексного компонента от простого заключается в структуре шаблона. У простого компонента в шаблоне стандартно в большинстве случаев подключается template.php, а шаблон комплексного компонента всегда имеет более одного файла и основная задача комплексного компонента — это определение какой конкретно файл шаблона подключить в зависимости от url страницы. Сам комплексный компонент не должен выполнять бизнес-логику — за это должны отвечать простые компоненты, которые подключаются на конкретной странице шаблона.
Но чаще всего не пишут комплексные компоненты из-за проблем с реализацией роутинга. Поэтому я решил на этом акцентировать внимание.
Особенности:
- Включен или нет в настройках компонента режим ЧПУ («SEF_MODE»). Важно понимать, что после включения ЧПУ в режиме редактирования и сохранения настроек компонента через интерфейс битрикса, добавляется элемент массива с чпу параметрами в массив файл /urlrewrite.php. Поэтому если вы через ftp напрямую в коде включили/выключили чпу, то не забудьте прописать/удалить правила в /urlrewrite.php.
- Использование алиасов (псевдоимен). Они необходимы если отличаются названия переменных в коде компонента и в url маске в настройках компонента, то есть, чтобы не нужно было переписывать код компонента под маску url страницы. К примеру, в коде компонента вы обращаетесь к $arVariables[‘CODE’], а в настройках компонента вы указали /news/#SECTION_CODE#/. Поэтому мы указываем в алиасах ‘CODE’ => ‘SECTION_CODE’.
Структура компонента
Вместо файла template.php, в папке шаблона находятся два php файла — это element.php и section.php. В зависимости от url комплексный компонент будет подключать из из этих файлов с переменными, которые найдены по url-маске.
Минимальный файл .parameters.php. Параметры компонента для ЧПУ и настройка 404:
use Bitrix\Main\Loader;
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
>
/** @var array $arCurrentValues */
Loader::includeModule('iblock');
$arComponentParameters = [
"PARAMETERS" => [
"VARIABLE_ALIASES" => [//псевдоимена
"ELEMENT_CODE" => [
"NAME" => 'Символьный код элемента',
],
"SECTION_CODE" => [
"NAME" => 'Символьный код раздела',
],
],
"SEF_MODE" => [//Вкл/выкл режим ЧПУ. Каждый дочерний элемент - это шаблон, на котором подключаются простые компоненты.
"section" => [
"NAME" => 'Страница раздела',
"DEFAULT" => "#SECTION_CODE#/",
"VARIABLES" => [
"SECTION_ID",
"SECTION_CODE",
"SECTION_CODE_PATH",
],
],
"element" => [
"NAME" => 'Детальная страница',
"DEFAULT" => "#SECTION_CODE#/#ELEMENT_CODE#/",
"VARIABLES" => [
"ELEMENT_ID",
"ELEMENT_CODE",
"SECTION_ID",
"SECTION_CODE",
"SECTION_CODE_PATH",
]
]
]
]
];
//Настройки для 404.
CIBlockParameters::Add404Settings($arComponentParameters, []);
Минимальный набор для class.php. Определение какой шаблон подключить и отдача 404 если шаблон не найден.
use Bitrix\Iblock\Component\Tools;
use Bitrix\Main\Loader;
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
>
class ComplexComponent extends CBitrixComponent
/**
* Список переменных, которых также нужно получить из $_REQUEST параметров, но их нет в url-маске
* К примеру мы указали маску /catalog/#SECTION_CODE#/ и в $arComponentVariables указали "SECTION",
* то при парсинге урл /catalog/section-code/?SECTION=123 в $arVariables будет SECTION_CODE и SECTION, несмотря на то, что SECTION в маске нет.
* @var array|string[]
*/
protected array $arComponentVariables = [
"SECTION",
];
public function executeComponent()
Loader::includeModule('iblock');
if ($this->arParams["SEF_MODE"] === "Y") $componentPage = $this->sefMode();
> else $componentPage = $this->noSefMode();
>
//Отдать 404 статус если не найден шаблон
if (!$componentPage) Tools::process404(
$this->arParams["MESSAGE_404"],
($this->arParams["SET_STATUS_404"] === "Y"),
($this->arParams["SET_STATUS_404"] === "Y"),
($this->arParams["SHOW_404"] === "Y"),
$this->arParams["FILE_404"]
);
>
$this->IncludeComponentTemplate($componentPage);
>
protected function sefMode()
//Значение алиасов по умолчанию.
$arDefaultVariableAliases404 = [];
/**
* Значение масок для шаблонов по умолчанию. - маски без корневого раздела,
* который указывается в $arParams["SEF_FOLDER"]
*/
$arDefaultUrlTemplates404 = [
"section" => "#SECTION_CODE#/",
"element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
];
//В этот массив будут заполнены переменные, которые будут найдены по маске шаблонов url
$arVariables = [];
$engine = new CComponentEngine($this);
//Нужно добавлять для парсинга SECTION_CODE_PATH и SMART_FILTER_PATH (жадные шаблоны)
$engine->addGreedyPart("#SECTION_CODE_PATH#");
$engine->addGreedyPart("#SMART_FILTER_PATH#");
$engine->setResolveCallback(["CIBlockFindTools", "resolveComponentEngine"]);
//Объединение дефолтных параметров масок шаблонов и алиасов. Параметры из настроек заменяют дефолтные.
$arUrlTemplates = CComponentEngine::makeComponentUrlTemplates($arDefaultUrlTemplates404, $this->arParams["SEF_URL_TEMPLATES"]);
$arVariableAliases = CComponentEngine::makeComponentVariableAliases($arDefaultVariableAliases404, $this->arParams["VARIABLE_ALIASES"]);
//Поиск шаблона
$componentPage = $engine->guessComponentPath(
$this->arParams["SEF_FOLDER"],
$arUrlTemplates,
$arVariables
);
//Проброс значений переменных из алиасов.
CComponentEngine::initComponentVariables($componentPage, $this->arComponentVariables, $arVariableAliases, $arVariables);
$this->arResult = [
"VARIABLES" => $arVariables,
"ALIASES" => $arVariableAliases
];
return $componentPage;
>
protected function noSefMode()
$componentPage = "";
$arVariables = [];
$arDefaultVariableAliases = [];
//Объединение дефолтных алиасов. Параметры из настроек заменяют дефолтные.
$arVariableAliases = CComponentEngine::makeComponentVariableAliases($arDefaultVariableAliases, $this->arParams["VARIABLE_ALIASES"]);
//Получаем значения переменных в $arVariables
CComponentEngine::initComponentVariables(false, $this->arComponentVariables, $arVariableAliases, $arVariables);
//По найденным параметрам $arVariables определяем тип страницы
if ((isset($arVariables["ELEMENT_ID"]) && intval($arVariables["ELEMENT_ID"]) > 0)
|| (isset($arVariables["ELEMENT_CODE"]) && $arVariables["ELEMENT_CODE"] <> '')
) $componentPage = "element";
> elseif ((isset($arVariables["SECTION_ID"]) && intval($arVariables["SECTION_ID"]) > 0)
|| (isset($arVariables["SECTION_CODE"]) && $arVariables["SECTION_CODE"] <> '')
) $componentPage = "section";
>
$this->arResult = [
"VARIABLES" => $arVariables,
"ALIASES" => $arVariableAliases
];
return $componentPage;
>
>
Теперь если подключим компонент на странице /test/index.php
require($_SERVER[«DOCUMENT_ROOT»].»/bitrix/header.php»);
$APPLICATION->SetTitle(«Тест использования комплексного компонента»);
?>IncludeComponent(
«local:catalog»,
«.default»,
array(
«SEF_FOLDER» => «/test/»,
«SEF_MODE» => «Y»,
«COMPONENT_TEMPLATE» => «.default»,
«SET_STATUS_404» => «Y»,
«SHOW_404» => «Y»,
«MESSAGE_404» => «Не найдено»,
«SEF_URL_TEMPLATES» => array(
«section» => «#SECTION_CODE#/»,
«element» => «#SECTION_CODE#/#ELEMENT_CODE#/»,
)
),
false
);?>
Не забываем, что если подключаем не через интерфейс битрикса, то нужно в urlrewrite.php прописать правило чпу:
array (
'CONDITION' => '#^/test/#',
'RULE' => '',
'ID' => 'local:catalog',
'PATH' => '/test/index.php',
'SORT' => 100,
),
Теперь по адресу /test/section-code/ — подключается файл шаблона section.php с переменными:
Array( [VARIABLES] => Array ( [SECTION_CODE] => section-code ) [ALIASES] => Array ( ) )
По адресу /test/section-code/element-code/ — подключается файл шаблона element.php с переменными:
Array( [VARIABLES] => Array ( [SECTION_CODE] => section-code [ELEMENT_CODE] => element-code ) [ALIASES] => Array ( ) )
По адресам, которые не подходят под url-маски, будет показана 404 страница.

