Блог Горошко Андрея 1C-Битрикс result_modifier.php: Модификация данных компонента перед выводом в шаблон

result_modifier.php: Модификация данных компонента перед выводом в шаблон

Файл result_modifier.php — это специальный файл в шаблоне компонента, который выполняется после component.php, но до template.php.

Его главная и единственная задача — модифицировать массив $arResult, подготавливая его к максимально простому выводу в шаблоне.

Зачем он нужен? (Принцип «простого» шаблона)

Идеальный template.php должен быть «простым» — содержать минимум PHP-логики, в основном циклы foreach и echo.

В нем не должно быть вызовов CFile::ResizeImageGet, форматирования дат, сложных вычислений или группировки массивов. Всю эту «подготовительную» работу и должен выполнять result_modifier.php.

Схема работы:

  1. component.php: Получает «сырые» данные из базы (GetList) и складывает их в $arResult.
  2. result_modifier.php: Берет $arResult, обрабатывает его (ресайзит картинки, форматирует даты, группирует) и изменяет $arResult по ссылке.
  3. template.php: Получает уже полностью готовый к выводу $arResult и просто выводит его в HTML.

Пример: Подготовка данных для списка новостей

Задача: Для списка новостей нужно:

  1. Подготовить миниатюру для PREVIEW_PICTURE размером 200×200.
  2. Отформатировать дату ACTIVE_FROM в удобный вид «день.месяц.год».

Плохой подход (логика в template.php)

// template.php - НЕ ДЕЛАЙТЕ ТАК!
foreach ($arResult['ITEMS'] as $arItem) {
    $resizedImage = CFile::ResizeImageGet(
        $arItem['PREVIEW_PICTURE'], 
        ['width'=>200, 'height'=>200], 
        BX_RESIZE_IMAGE_PROPORTIONAL
    );
    
    $formattedDate = CIBlockFormatProperties::DateFormat(
        'd.m.Y', 
        MakeTimeStamp($arItem['ACTIVE_FROM'], CSite::GetDateFormat())
    );

    echo '<img src="'.$resizedImage['src'].'">';
    echo '<span>'.$formattedDate.'</span>';
}
// Проблема: Логика смешана с версткой, код повторяется в цикле, его сложно читать.

// Правильный подход (используем `result_modifier.php`):

// component.php`:

// component.php - просто получаем данные
$arResult['ITEMS'] = [];
$rsElements = CIBlockElement::GetList(...);
while($ob = $rsElements->GetNextElement()){ 
    $arFields = $ob->GetFields();  
    $arResult['ITEMS'][] = $arFields;
}

result_modifier.php

// /path/to/component/templates/.default/result_modifier.php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();

/** @var array $arResult */

foreach ($arResult['ITEMS'] as &$arItem) { // Обрабатываем по ссылке (&), чтобы изменить массив
    
    // 1. Ресайз изображения
    if (!empty($arItem['PREVIEW_PICTURE'])) {
        $resized = CFile::ResizeImageGet(
            $arItem['PREVIEW_PICTURE'],
            ['width' => 200, 'height' => 200],
            BX_RESIZE_IMAGE_PROPORTIONAL
        );
        $arItem['PREVIEW_PICTURE_RESIZED'] = $resized;
    }

    // 2. Форматирование даты
    if (!empty($arItem['ACTIVE_FROM'])) {
        $arItem['DISPLAY_ACTIVE_FROM'] = CIBlockFormatProperties::DateFormat(
            'd.m.Y',
            MakeTimeStamp($arItem['ACTIVE_FROM'], CSite::GetDateFormat())
        );
    }
}
unset($arItem); // Обязательно сбрасываем ссылку после цикла

template.php

// template.php - теперь он "тупой" и чистый
foreach ($arResult['ITEMS'] as $arItem) {
    if (isset($arItem['PREVIEW_PICTURE_RESIZED'])) {
        echo '<img src="' . $arItem['PREVIEW_PICTURE_RESIZED']['src'] . '">';
    }
    if (isset($arItem['DISPLAY_ACTIVE_FROM'])) {
        echo '<span>' . $arItem['DISPLAY_ACTIVE_FROM'] . '</span>';
    }
}

Вывод:
result_modifier.php — это важнейший инструмент для соблюдения принципа разделения логики и представления. Он позволяет держать component.php чистым от «украшательств», а template.php — свободным от сложной логики.

Правильное использование этого файла делает ваши компоненты более профессиональными, гибкими и легкими в поддержке.

result_modifier.php, Битрикс, модификация arResult, подготовка данных, CFile::ResizeImageGet, компонент Битрикс, шаблон.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Создание интернет-магазина с интеллектуальной системой кросс-сейла и апсейлаСоздание интернет-магазина с интеллектуальной системой кросс-сейла и апсейла

Реализация проекта «Создание интернет-магазина с интеллектуальной системой кросс-сейла и апсейла» направлена на создание технологического преимущества компании, масштабирование продаж и обеспечение бесперебойной работы под высокими нагрузками. алгоритмы умных рекомендаций на базе

Техническая поддержка и абонентское обслуживание сайтов на 1С-БитриксТехническая поддержка и абонентское обслуживание сайтов на 1С-Битрикс

Профессиональная поддержка, модернизация и оптимизация производительности сайта на 1С-Битрикс — это гарантия высокой конверсии, стабильности продаж и защиты от киберугроз. Услуга «Техническая поддержка и абонентское обслуживание сайтов на 1С-Битрикс» включает

Интеграция 1С-Битрикс с сервисами email-рассылок (SendPulse, Unisender, Mindbox)Интеграция 1С-Битрикс с сервисами email-рассылок (SendPulse, Unisender, Mindbox)

Бесшовная интеграция сайта на 1С-Битрикс с внешними системами — это ключевое условие автоматизации продаж и масштабирования бизнеса. Услуга «Интеграция 1С-Битрикс с сервисами email-рассылок (SendPulse, Unisender, Mindbox)» обеспечивает автоматическая отправка писем