🧱 Суть
template.php – главный файл шаблона компонента, отвечающий за формирование HTML.
Он получает уже подготовленные данные из компонента и выводит их пользователю.
В идеале template.php содержит только:
- HTML-разметку;
- минимальные PHP-вставки;
- простые условия и циклы.
Получение данных и бизнес-логика должны находиться за пределами шаблона.
📦 Проблема
Если в template.php:
- выполнять SQL-запросы;
- получать данные из инфоблоков;
- писать сложную бизнес-логику;
то шаблон становится трудно читать и поддерживать.
Кроме того, его становится сложно переиспользовать.
✅ Решение
Использовать template.php только для отображения уже подготовленных данных.
Разделение ответственности выглядит так:
component.php– получает данные;result_modifier.php– подготавливает данные;template.php– отображает данные;component_epilog.php– выполняет действия после вывода.
💻 Код
Где находится файл
Структура шаблона компонента:
templates/
└── cards/
├── template.php
├── result_modifier.php
├── component_epilog.php
├── style.css
└── script.jsГлавным файлом является именно template.php.
Когда выполняется
Жизненный цикл компонента:
IncludeComponent()
│
▼
component.php
│
▼
result_modifier.php
│
▼
template.php
│
▼
component_epilog.phpК моменту выполнения шаблона данные уже полностью подготовлены.
Доступные переменные
В шаблоне доступны:
$arResult
$arParams
$APPLICATION
$thisНа практике чаще всего используются:
$arResult– данные;$arParams– настройки компонента.
Вывод данных
Например:
<h1><?= $arResult["TITLE"] ?></h1>Или:
<p><?= $arResult["DESCRIPTION"] ?></p>Шаблон только отображает содержимое массива.
Перебор элементов
Наиболее частая конструкция:
<?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; ?>Простые условия
Допустим, если элементов нет:
<?php if (empty($arResult["ITEMS"])): ?>
<p>Ничего не найдено.</p>
<?php endif; ?>Подобные проверки – нормальная практика для шаблона.
Использование подготовленных данных
Если в result_modifier.php было добавлено:
$arResult["COUNT"] = count($arResult["ITEMS"]);то в шаблоне можно использовать:
<p>Всего элементов: <?= $arResult["COUNT"] ?></p>Без дополнительных вычислений.
Использование методов шаблона
Внутри template.php доступен объект шаблона.
Например:
$this->setFrameMode(true);Этот метод включает поддержку композитного режима и используется во многих стандартных компонентах.
Частые ошибки
Получать данные из базы
Плохо:
CIBlockElement::GetList(...);Получение данных должно происходить в component.php.
Выполнять сложные вычисления
Плохо:
foreach (...) {
...
}Если вычисления нужны только для отображения, лучше выполнить их в result_modifier.php.
Перегружать шаблон PHP-кодом
Если HTML почти не видно за большим количеством PHP, стоит перенести часть логики в другие файлы компонента.
Игнорировать экранирование
При выводе пользовательских данных рекомендуется использовать безопасный вывод.
Например:
<?= htmlspecialchars($item["NAME"]) ?>Это помогает защититься от XSS.
Дублировать разметку
Если одинаковые блоки встречаются несколько раз, лучше вынести их в отдельные включаемые файлы или переиспользуемые компоненты.
🎯 Вывод
template.php– главный файл отображения компонента- Выполняется после подготовки данных в
component.phpиresult_modifier.php - Использует массивы
$arResultи$arParams - Должен содержать HTML и минимальную логику
- Не предназначен для получения данных или выполнения сложных вычислений
- Правильно организованный
template.phpделает шаблон простым и удобным для поддержки
🔗 Связано
- Битрикс. Шаблоны компонентов
- Битрикс. result_modifier.php
- Битрикс. component_epilog.php
- Битрикс. Переопределение шаблонов компонентов
- Битрикс. Компоненты Bitrix: что это и как работают
- Битрикс. Вызов компонентов через IncludeComponent()
- Битрикс. Параметры компонентов
- PHP. Основы безопасности (XSS, CSRF, SQL Injection)