Файл result_modifier.php в 1C-Битрикс используется для модификации массива $arResult перед тем, как данные будут переданы в шаблон компонента. Это важный инструмент для разделения логики подготовки данных и отображения.
Краткий ответ
result_modifier.php позволяет изменить, дополнить или подготовить данные $arResult после выполнения component.php и перед вызовом template.php.
<?php
$arResult['CUSTOM_FIELD'] = 'Hello Bitrix';
Где находится result_modifier.php
Файл располагается внутри шаблона компонента:
/local/components/vendor/component.name/templates/.default/
component.php
template.php
result_modifier.php
Когда выполняется result_modifier.php
Порядок выполнения компонента:
- component.php — формирование $arResult
- result_modifier.php — модификация данных
- template.php — вывод данных
- component_epilog.php — постобработка
Зачем нужен result_modifier.php
Этот файл используется для:
- подготовки данных для шаблона
- форматирования полей
- добавления новых ключей в $arResult
- обработки массивов (например, элементов инфоблока)
- упрощения template.php
Пример использования result_modifier.php
Добавление нового поля
<?php
foreach ($arResult['ITEMS'] as &$item)
{
$item['UPPER_NAME'] = mb_strtoupper($item['NAME']);
}
Форматирование даты
<?php
foreach ($arResult['ITEMS'] as &$item)
{
$item['FORMATTED_DATE'] = date('d.m.Y', strtotime($item['DATE_CREATE']));
}
Добавление URL
<?php
foreach ($arResult['ITEMS'] as &$item)
{
$item['DETAIL_URL'] = '/catalog/' . $item['CODE'] . '/';
}
Работа с $arResult
Главный объект в result_modifier.php — это $arResult. Он передаётся из component.php и может содержать массивы элементов, параметры и служебные данные.
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
$arResult['COUNT'] = count($arResult['ITEMS']);
Особенности result_modifier.php
- выполняется перед шаблоном
- имеет доступ к $arResult и $arParams
- не должен содержать бизнес-логику
- используется только для подготовки данных
Типичные ошибки
1. Перегрузка бизнес-логикой
result_modifier.php не должен заменять component.php или классы сервиса.
2. Изменение $arParams
Параметры компонента нельзя менять — только $arResult.
3. Отсутствие проверки безопасности
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
4. Сложные SQL-запросы
Все запросы должны выполняться в component.php, а не в result_modifier.php.
5. Потеря производительности
Большие циклы без кеширования могут замедлить загрузку страницы.
Лучшие практики
- используйте result_modifier.php только для подготовки данных
- не пишите бизнес-логику
- минимизируйте вычисления внутри циклов
- работайте только с $arResult
- не дублируйте логику component.php
Пример полного result_modifier.php
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
if (!empty($arResult['ITEMS']))
{
foreach ($arResult['ITEMS'] as &$item)
{
$item['UPPER_NAME'] = mb_strtoupper($item['NAME']);
$item['DETAIL_URL'] = '/catalog/' . $item['CODE'] . '/';
$item['FORMATTED_DATE'] = date('d.m.Y', strtotime($item['DATE_CREATE']));
}
}
$arResult['ITEMS_COUNT'] = count($arResult['ITEMS']);
FAQ
Когда выполняется result_modifier.php?
После component.php и перед template.php.
Можно ли обращаться к базе данных?
Не рекомендуется. Лучше делать это в component.php.
Можно ли изменять $arParams?
Нет, только $arResult.
Зачем нужен result_modifier.php?
Чтобы отделить логику подготовки данных от отображения.
Заключение
result_modifier.php — важный инструмент архитектуры компонентов Битрикс. Он позволяет упростить шаблоны, улучшить читаемость кода и правильно разделить ответственность между слоями компонента.