🧱 Суть

Шаблон компонента отвечает только за отображение данных, подготовленных компонентом.

Во время работы компонента:

  1. выполняется бизнес-логика;
  2. данные помещаются в $arResult;
  3. подключается шаблон (template.php);
  4. шаблон формирует HTML.

Такое разделение соответствует принципу разделения логики и представления (MVC).

📦 Проблема

Если получать данные и формировать HTML в одном файле:

  • код становится трудно читать;
  • появляется смешение логики и отображения;
  • шаблон сложно переиспользовать;
  • изменение внешнего вида требует изменения бизнес-логики.

✅ Решение

Всю работу с данными выполнять в компоненте, а шаблон использовать только для отображения содержимого массива $arResult.

💻 Код

Где находится шаблон

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

Структура:

/components/
└── company/
    └── weather/
        └── templates/
            ├── .default/
            │   └── template.php
            └── cards/
                └── template.php

Для собственных компонентов рекомендуется использовать:

/local/components/

Основной файл шаблона

Главный файл шаблона:

templates/.default/template.php

Именно он отвечает за вывод HTML.

Что доступно внутри шаблона

В шаблоне доступны основные переменные:

$arResult
$arParams
$APPLICATION
$this

Чаще всего используются:

  • $arResult – данные компонента;
  • $arParams – параметры компонента.

Использование $arResult

Компонент подготавливает данные:

$arResult["ITEMS"] = $items;

Шаблон выводит их:

<?php foreach ($arResult["ITEMS"] as $item): ?>
 
    <h2><?= $item["NAME"] ?></h2>
 
<?php endforeach; ?>

Шаблон не должен самостоятельно получать данные из базы.

Использование $arParams

Шаблон также может учитывать параметры компонента.

Например:

<?php if ($arParams["SHOW_DATE"] === "Y"): ?>
 
    <span><?= $item["DATE_ACTIVE_FROM"] ?></span>
 
<?php endif; ?>

Это позволяет гибко управлять отображением без изменения шаблона.

Выбор шаблона

Шаблон выбирается вторым аргументом метода IncludeComponent().

Стандартный шаблон:

$APPLICATION->IncludeComponent(
    "bitrix:news.list",
    "",
    []
);

Или собственный:

$APPLICATION->IncludeComponent(
    "bitrix:news.list",
    "cards",
    []
);

Будет использована папка:

templates/cards/

Копирование шаблона стандартного компонента

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

Например:

/local/templates/my_template/components/
    bitrix/
        news.list/
            cards/
                template.php

Так изменения не будут потеряны после обновления Битрикса.

Дополнительные файлы шаблона

Кроме template.php шаблон может содержать:

template.php
style.css
script.js
result_modifier.php
component_epilog.php

Назначение файлов:

  • style.css – стили шаблона;
  • script.js – JavaScript;
  • result_modifier.php – дополнительная обработка $arResult перед выводом;
  • component_epilog.php – код, выполняемый после вывода шаблона.

result_modifier.php
Этот файл позволяет изменить данные перед отображением.

Например:

$arResult["COUNT"] = count($arResult["ITEMS"]);

После этого значение станет доступно в template.php.

Такой подход удобен, если требуется подготовить данные именно для представления.

Повторное использование

Один компонент может использовать разные шаблоны.

Например:

.default
cards
table
slider

При этом логика компонента остаётся одинаковой, меняется только отображение.

Частые ошибки

Получать данные в template.php

Плохо:

$result = CIBlockElement::GetList(...);

Шаблон должен только отображать уже подготовленные данные.

Изменять стандартный шаблон

Не рекомендуется редактировать файлы в:

/bitrix/components/

После обновления изменения будут потеряны.
Лучше создать собственный шаблон.

Выполнять сложную бизнес-логику

Плохо:

if (...) {
    // получение данных
}

Логика должна находиться в component.php.

Дублировать HTML

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

Игнорировать $arParams

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

🎯 Вывод

  • Шаблон отвечает только за отображение данных
  • Основной файл шаблона – template.php
  • Данные доступны через $arResult, настройки – через $arParams
  • Один компонент может иметь несколько шаблонов
  • Для изменения стандартных компонентов рекомендуется создавать собственные шаблоны
  • Разделение логики и представления делает код проще в сопровождении

🔗 Связано