Как создать простой компонент 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,
]);

После этого компонент появится и в визуальном редакторе в разделе «Мои компоненты».

Все статьи

Расскажите о задаче — подберём платформу и оценим работу

Обсудить проект