При создании собственных компонентов в 1С-Битрикс важно понимать, как правильно использовать две основные переменные: $arParams и $arResult. Именно они позволяют передавать параметры при вызове компонента и возвращать результат выполнения в шаблон. В данной статье мы подробно разберём назначение этих переменных, их особенности, а также рассмотрим различные способы изменения $arResult, в том числе через файл result_modifier.php.

1. Основная роль $arParams
Переменная $arParams содержит входные параметры вашего компонента. Когда вы подключаете компонент, в его вызове указываются настройки, которые и попадают в $arParams. Например, вы можете передать заголовок, идентификатор элемента, количество выводимых записей и т.д.
Основные особенности:
- Автоматическое экранирование
Перед тем как значения попадут в$arParams, к ним применяется функцияhtmlspecialcharsEx(). Это важно для безопасности и предотвращения XSS-атак. К примеру, если посетитель попытается передать HTML-теги или вредоносный скрипт, они будут экранированы. - Сохранение исходных значений
Параллельно с экранированной версией сохраняется и исходная (необработанная) версия параметра. И если$arParams["NAME"]— экранированное значение, то$arParams["~NAME"]— исходное. Это особенно полезно, если вам нужно работать с «сырым» HTML. - Приведение к нужному типу
В начале кода компонента рекомендуется делать валидацию и приведение типов параметров. Например, если параметр должен быть целым числом, используйтеintval(). Такая проверка гарантирует корректность данных при их дальнейшем использовании. - Отражение изменений
$arParams— это псевдоним (ссылка) на член класса компонента. Следовательно, все изменения, которые вы производите в$arParams, станут доступны и в шаблоне, и во всех других частях компонента.
Пример настройки $arParams в начале компонента:
// Убеждаемся, что TITLE определён, и приводим к строке
if (!isset($arParams["TITLE"]) || $arParams["TITLE"] === '') {
$arParams["TITLE"] = "Заголовок по умолчанию";
} else {
// Экранируем потенциально опасные символы
$arParams["TITLE"] = htmlspecialcharsEx($arParams["TITLE"]);
}
// Приводим числовой параметр к целому числу
$arParams["ITEMS_COUNT"] = intval($arParams["ITEMS_COUNT"]);
// При необходимости используем исходное значение
$arResult["RAW_TITLE"] = $arParams["~TITLE"];
2. Основная роль $arResult
Если $arParams отвечает за «вход», то $arResult — за «выход». Это массив, в который компонент складывает результаты своей работы перед тем, как передать их в шаблон. Например, в $arResult могут лежать данные, полученные из БД, вычисленные значения или что угодно ещё, что нужно отобразить.
Основные особенности:
- Инициализация
По умолчанию переменная$arResultинициализируется как пустой массив:
Обычно это делается в самом начале компонента, чтобы затем «наполнять»$arResult = array();$arResultданными по мере выполнения бизнес-логики. - Передача данных в шаблон
Подключение шаблона происходит через$this->IncludeComponentTemplate(). При этом движок 1С-Битрикс автоматически передаёт$arResultв файлtemplate.php. Вам не нужно вручную что-то «пробрасывать» — главное, чтобы данные уже находились в$arResult. - Привязка к члену класса
Как и$arParams,$arResultсвязан с внутренней логикой класса компонента. Если вы меняете$arResultв коде компонента, эти изменения немедленно становятся доступны в шаблоне и в других вспомогательных файлах, например вresult_modifier.php.
Пример формирования $arResult:
$arResult["ITEMS"] = array(); // Подготовим массив
// Допустим, у нас есть результат выборки из БД
$dbRes = CIBlockElement::GetList(
array(),
array("IBLOCK_ID" => $arParams["IBLOCK_ID"]),
false,
array("nTopCount" => $arParams["ITEMS_COUNT"]),
array("ID", "NAME", "DETAIL_PAGE_URL")
);
while ($arItem = $dbRes->Fetch()) {
$arResult["ITEMS"][] = $arItem;
}
// Внесём какую-то дополнительную информацию
$arResult["TITLE"] = $arParams["TITLE"];
// Подключаем шаблон
$this->IncludeComponentTemplate();
В файле template.php вы можете вывести эти данные, используя $arResult["ITEMS"] и $arResult["TITLE"].
3. Роль result_modifier.php и примеры изменения $arResult
Для более тонкой настройки результата компонента 1С-Битрикс предлагает файл result_modifier.php. Он находится в папке шаблона компонента, рядом с template.php, и загружается после выполнения основного кода компонента (где формируется $arResult), но до подключения template.php.
Таким образом, result_modifier.php позволяет модифицировать содержимое $arResult перед тем, как оно окончательно попадёт в шаблон.
Как это работает
- Компонент выполняется и формирует
$arResult. - Подключается
result_modifier.php. Здесь можно внести изменения в$arResult. - После этого загружается шаблон
template.php, который уже получает финальный вариант$arResult.
Пример result_modifier.php
Допустим, в процессе работы компонента мы записали в $arResult["ITEMS"] массив элементов из инфоблока. В result_modifier.php мы можем добавить к каждому элементу новую информацию, либо изменить уже существующие данные.
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
die();
}
// Добавим к каждому элементу кастомное поле
if (!empty($arResult["ITEMS"]) && is_array($arResult["ITEMS"])) {
foreach ($arResult["ITEMS"] as &$item) {
// Добавим поле для дополнительной информации
$item["CUSTOM_FIELD"] = "Дополнительные данные";
}
unset($item); // разрываем ссылку, чтобы не было проблем в будущем
}
// Можно создать новое поле вне цикла
$arResult["MODIFIER_INFO"] = "Информация, добавленная в result_modifier.php";
Таким образом, когда шаблон template.php будет подключаться, в $arResult["ITEMS"] уже появится новое поле CUSTOM_FIELD, а также будет доступно поле MODIFIER_INFO.
Зачем это нужно
- Разделение логики: часть общей бизнес-логики мы оставляем в самом компоненте (например, выборку данных из БД), а все «тонкие» или косметические изменения выносим в
result_modifier.php. - Удобство переиспользования шаблонов: вы можете иметь несколько шаблонов для одного компонента, и в каждом своя логика постобработки результатов.
- Расширяемость: можно гибко подстраивать массив
$arResultпод разные задачи, не переписывая логику самого компонента.
4. Использование ссылок (references) в PHP
В PHP ссылка (reference) даёт возможность обращаться к одним и тем же данным под разными именами переменных. В контексте 1С-Битрикс это означает, что $arParams и $arResult «привязаны» к объекту компонента. Однако если вы явно переопределите одну из переменных ссылкой на другой массив, связь с компонентом будет потеряна:
// Пример неправильного использования:
// полностью переназначаем $arParams, теперь он ссылается на $newArray,
// и изменения не попадут в шаблон компонента
$arParams = &$newArray;
Также, если вы удалите переменную через unset($arParams), то связь между $arParams и компонентом будет разорвана:
// Разрыв связи
unset($arParams);
Будьте осторожны с подобными приёмами, чтобы не нарушить работу компонента.
5. Обобщённый пример структуры компонента
Ниже приведён упрощённый пример, показывающий, в какой момент мы работаем с $arParams и $arResult, а также как взаимодействует result_modifier.php.
/local/components/namespace/my_component/
|-- .parameters.php
|-- .description.php
|-- class.php (или component.php)
|-- templates
|-- .default
|-- result_modifier.php
|-- template.php
.parameters.php
Описывает настройки (параметры) компонента, которые будут доступны при его вызове.class.php(илиcomponent.php)
Содержит основную логику:- Проверка и приведение входных параметров (
$arParams). - Формирование массива
$arResult(результат работы). - Вызов
$this->IncludeComponentTemplate()для подключения шаблона.
- Проверка и приведение входных параметров (
templates/.default/result_modifier.php
- Дополнительная обработка результата перед его выводом.
- Изменение
$arResult, добавление новых полей, фильтрация данных и т.д.
templates/.default/template.php
- Финальный вывод (HTML + PHP), где вы используете
$arResultдля отображения информации.
- Финальный вывод (HTML + PHP), где вы используете
6. Заключение
$arParamsотвечает за входные параметры и безопасность: экранирование значений, приведение типов, проверку корректности.$arResultформируется в процессе работы компонента и передаётся в шаблон, где отображается пользователю.result_modifier.php— мощный инструмент для «допиливания» и преобразования$arResultуже после выполнения основной логики компонента, но до отображения шаблона.- Система ссылок (references) в PHP делает
$arParamsи$arResult«живыми»: их изменение в одном месте отражается в другом. При этом нужно аккуратно подходить к переназначению или удалению этих переменных, чтобы не потерять связь с объектом компонента.
Понимание и грамотное использование $arParams, $arResult и механизма result_modifier.php помогают выстраивать более гибкую, понятную и поддерживаемую архитектуру компонентов 1С-Битрикс. Берегите разделение логики, следите за безопасностью входных данных и используйте все возможности фреймворка по максимуму!