🧱 Суть

result_modifier.php – специальный файл шаблона компонента, который выполняется после получения данных, но до подключения template.php.

Он используется для подготовки данных к отображению:

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

Таким образом логика отображения остаётся простой, а компонент не перегружается кодом, специфичным для конкретного шаблона.

📦 Проблема

Без result_modifier.php часто возникает одна из двух ситуаций:

  • сложная подготовка данных выполняется прямо в template.php;
  • логика, нужная только одному шаблону, попадает в component.php.

В результате нарушается разделение ответственности:

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

✅ Решение

Использовать result_modifier.php для подготовки данных перед отображением.

Тогда:

  • компонент отвечает за получение данных;
  • result_modifier.php – за их подготовку;
  • template.php – только за вывод HTML.

💻 Код

Где находится файл

result_modifier.php располагается рядом с шаблоном:

templates/
└── cards/
    ├── template.php
    ├── result_modifier.php
    ├── style.css
    └── script.js

Если файла нет – Битрикс просто пропускает этот этап.

Когда выполняется

Жизненный цикл выглядит так:

IncludeComponent()


component.php


$arResult заполнен


result_modifier.php


template.php


HTML

Таким образом result_modifier.php уже имеет доступ ко всем данным компонента.

Доступные переменные

В файле доступны:

$arResult
$arParams

Например:

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

После изменения массива новые данные автоматически станут доступны в template.php.

Добавление новых данных

Например, можно вычислить количество элементов:

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

В шаблоне:

<p>Всего элементов: <?= $arResult["COUNT"] ?></p>

Форматирование данных

Допустим, требуется изменить формат даты.

<?php
 
foreach ($arResult["ITEMS"] as &$item) {
    $item["DATE_FORMATTED"] = date(
        "d.m.Y",
        strtotime($item["DATE_ACTIVE_FROM"])
    );
}

В шаблоне:

<?= $item["DATE_FORMATTED"] ?>

Теперь template.php не содержит лишней логики.

Добавление вычисляемых полей

Например:

<?php
 
foreach ($arResult["ITEMS"] as &$item) {
    $item["IS_NEW"] =
        strtotime($item["DATE_ACTIVE_FROM"]) >
        strtotime("-7 days");
}

В шаблоне:

<?php if ($item["IS_NEW"]): ?>
 
    <span>Новинка</span>
 
<?php endif; ?>

Подготовка изображений

Часто в result_modifier.php получают дополнительные данные для изображений.

Например:

$item["IMAGE"] = CFile::GetPath($item["PREVIEW_PICTURE"]);

После этого шаблон использует уже готовый путь.

Когда использовать

result_modifier.php подходит для:

  • форматирования дат;
  • вычисления новых полей;
  • подготовки изображений;
  • сортировки данных;
  • преобразования массивов;
  • подготовки данных исключительно для конкретного шаблона.

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

Получать данные из базы

Плохо:

CIBlockElement::GetList(...);

Получением данных должен заниматься компонент (component.php).

Размещать HTML

Плохо:

echo "<h1>Новости</h1>";

result_modifier.php ничего не выводит.

Его задача – только изменить $arResult.

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

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

Дублировать вычисления

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

Изменять $arParams

Обычно параметры компонента считаются входными данными и изменять их не рекомендуется.

Лучше добавлять новые значения в $arResult.

🎯 Вывод

  • result_modifier.php выполняется между component.php и template.php
  • Используется для подготовки данных к отображению
  • Позволяет разгрузить template.php
  • Работает с массивами $arResult и $arParams
  • Не должен получать данные из базы и выводить HTML
  • Помогает разделить получение данных, их подготовку и отображение

🔗 Связано