Срок работы пробной версии продукта истек. Через две недели этот сайт полностью прекратит свою работу. Вы можете купить полнофункциональную версию продукта на сайте www.1c-bitrix.ru. Кастомизация компонентов Битрикс - файл result_modifier.php

Кастомизация компонентов Битрикс - файл result_modifier.php

Мы уже кратко описывали возможность простейшей кастомизации компонента при помощи фильтра, в данном совете мы посмотрим какие проблемы можно решить при помощи файла result_modifier.php.

Попробуем разобраться что этот файл вообще делает. Итак, result_modifier.php - позволяет внести изменения в массив результата $arResult из component.php. Данный файл необходимо разместить в директории Вашего шаблона компонента.

Ряд проблем, где поможет файл result_modifier.php:

  • Удаление данных из массива результата.
  • Обработка данных перед выводом в шаблоне.
  • Необходимость вытащить дополнительные данные из инфоблока или в целом базы данных.
  • Добавление ключей в кеш, для использования в component_epilog.php.
  • Мультиязычность в информационном блоке (один из вариантов).
  • Обработка изображений.
  • Получение дополнительной информации по связанным элементам.
  • И многие другие

Мы привели ряд проблем как общих, так и частных, главное понимать, что при помощи файла result_modifier.php можно решить большое количество проблем по кастомизации, а не сразу браться писать собственные компоненты. Приведем стандартный код файла result_modifier.php:

if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
//Подключать модуль информационных блоков не обязательно - это для наглядности
if (CModule::IncludeModule('iblock')) {
    //Выполнение обработки данных
    //Тут можем работать с массивом результата $arResult
}
//Получение объекта текущего компонента
$component = $this->__component;
//Запись данных в кеш, для использования в файле component_epilog.php
$component->setResultCacheKeys(array("KEY_ARRAY_RESULT"));

Рассмотрим простейший частный пример решения проблемы. Итак, нам необходимо получить данные из связанного элемента и добавить полученный результат в кеш. Информация по связанным элементам нам нужна в компоненте news.detail. Создаем в шаблоне компонента файл result_modifier.php и помещаем следующий код:

if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
//Подключим модуль информационные блоки
if (CModule::IncludeModule('iblock')) {
    if (isset($arResult['DISPLAY_PROPERTIES']['НАЗВАНИЕ_СВОЙСТВА'])) {
        //Проверим чтобы точно число было
        if (is_numeric($arResult['DISPLAY_PROPERTIES']['НАЗВАНИЕ_СВОЙСТВА']['VALUE'])
            && $arResult['DISPLAY_PROPERTIES']['НАЗВАНИЕ_СВОЙСТВА']['VALUE']) {
            $id = $arResult['DISPLAY_PROPERTIES']['НАЗВАНИЕ_СВОЙСТВА']['VALUE'];
            //Вытащим все данные по элементу
            $res = CIBlockElement::GetByID($id);
            if ($ar_res = $res->GetNext()) {
                if (is_numeric($ar_res['PREVIEW_PICTURE']) && $ar_res['PREVIEW_PICTURE']) {
                    //Тут например можем обработать превью изображение
                }
                $arResult['НОВЫЙ_КЛЮЧ_В_МАССИВЕ_РЕЗУЛЬТАТА'] = $ar_res;
            }
        }
    }
}

$component = $this->__component;
//Добавим в кеш полученный результат
$component->setResultCacheKeys(array('НОВЫЙ_КЛЮЧ_В_МАССИВЕ_РЕЗУЛЬТАТА'));

Теперь в файле template.php и component_epilog.php будет доступна информация по связанному элементу, чтобы получить ее надо обратиться к массиву результата:

echo $arResult['НОВЫЙ_КЛЮЧ_В_МАССИВЕ_РЕЗУЛЬТАТА']['NAME'];
 2374 Битрикс, Компоненты, result_modifier.php, component_epilog.php
1 марта 2015
Команда BXCert

Наша команда разрабатывает портал BXCert, а также занимается разработкой сайтов на CMS 1С-Битрикс. Все участники являются сертифицированными специалистами Bitrix.

Возможно Вам будет интересно

Комментарии

Чтобы оставлять комментарии необходимо зарегистрироваться и пройти авторизацию.