Главная » Разработка Битрикс » Компоненты » result_modifier.php в Битрикс — обработка данных перед выводом шаблона

result_modifier.php в Битрикс — обработка данных перед выводом шаблона

Файл 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

    Порядок выполнения компонента:
    1. component.php — формирование $arResult
    2. result_modifier.php — модификация данных
    3. template.php — вывод данных
    4. 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 — важный инструмент архитектуры компонентов Битрикс. Он позволяет упростить шаблоны, улучшить читаемость кода и правильно разделить ответственность между слоями компонента.
    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний