Как создать простой компонент 1С-Битрикс
Структура своего компонента 1С-Битрикс: description, параметры, логика в class.php, шаблон и подключение на странице. Минимальный рабочий пример.
Свой компонент нужен, когда стандартных не хватает: вывести данные из своей таблицы, собрать блок из нескольких источников, сделать форму с особой логикой. Ниже — минимальный компонент, который выводит приветствие с параметром.
Структура
/local/components/
mycompany/ — пространство имён (ваша компания)
hello/ — имя компонента
.description.php — название и место в визуальном редакторе
.parameters.php — параметры для настройки
class.php — логика
templates/
.default/
template.php — вывод
Свои компоненты кладите в /local/components/, а не в /bitrix/components/: папку /bitrix/ перезаписывают обновления.
.description.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
$arComponentDescription = [
'NAME' => 'Приветствие',
'DESCRIPTION' => 'Выводит приветствие пользователю',
'SORT' => 20,
'CACHE_PATH' => 'Y',
'PATH' => ['ID' => 'mycompany', 'NAME' => 'Мои компоненты'],
];
Проверка B_PROLOG_INCLUDED в начале каждого файла запрещает открыть его напрямую по адресу.
.parameters.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
$arComponentParameters = [
'PARAMETERS' => [
'NAME' => ['PARENT' => 'BASE', 'NAME' => 'Кого приветствовать', 'TYPE' => 'STRING', 'DEFAULT' => 'гость'],
'CACHE_TIME' => ['DEFAULT' => 3600],
],
];
class.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
class MyCompanyHelloComponent extends CBitrixComponent
{
public function onPrepareComponentParams($params): array
{
$params['NAME'] = trim((string)($params['NAME'] ?? '')) ?: 'гость';
$params['CACHE_TIME'] = (int)($params['CACHE_TIME'] ?? 3600);
return $params;
}
public function executeComponent(): void
{
if ($this->startResultCache()) {
$this->arResult['GREETING'] = 'Здравствуйте, ' . $this->arParams['NAME'] . '!';
$this->includeComponentTemplate();
}
}
}
startResultCache() кеширует результат вместе с выводом шаблона — при повторных просмотрах логика не выполняется.
templates/.default/template.php
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
?>
<p class="hello"><?= htmlspecialcharsbx($arResult['GREETING']) ?></p>
Подключение на странице
<?php
$APPLICATION->IncludeComponent('mycompany:hello', '', [
'NAME' => 'коллега',
'CACHE_TYPE' => 'A',
'CACHE_TIME' => 3600,
]);
После этого компонент появится и в визуальном редакторе в разделе «Мои компоненты».