🧱 Суть

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 делает шаблон простым и удобным для поддержки

🔗 Связано