Переменные в шаблоне компонента Bitrix

Всем привет!
Сегодня я расскажу вам доступных переменных в таких файлах как: result_modifier.php, template.php, component_epilog.php. Возможно вы об этом всем знаете, но иногда нужно освежить память, а возможно почерпнуть что-то новое. Ниже рассмотрим пример шаблона компонента news.detail

template.php

Здесь собрано самое большое кол-во доступных переменных.

/**
 * @var array $arResult
 * @var array $arParams
 * 
 * Текущий путь до папки шаблона родителя
 * @var string $parentTemplateFolder
 *
 * Идентификатор/имя шаблона
 * @var string $templateName
 * 
 * Текущий путь до файла шаблона
 * @var string $templateFile 
 * 
 * Текущий путь до папки шаблона (например /local/templates/.default/components/bitrix/news.detail/.default)
 * @var string $templateFolder
 * 
 * Путь к компоненту (например /bitrix/components/bitrix/news.detail)
 * @var string $componentPath 
 * 
 * Объект шаблона
 * @var \CBitrixComponentTemplate $this 
 * 
 * Объект компонента (либо объект наследника \CBitrixComponent)
 * @var \CBitrixComponent $component
 */

result_modifier.php

Здесь минимум переменных, но их все можно получить из объекта \CBitrixComponentTemplate

/**
 * @var array $arResult
 * @var array $arParams

 * Объект шаблона
 * @var \CBitrixComponentTemplate $this
 */

component_epilog.php

Здесь доступны все переменные из template.php, но с двумя оговорками:
$arResult - не тот arResult который мы ожидаем
$this - не объект класса \CBitrixComponentTemplate, а объект класса \CBitrixComponent Теоретически, как и практически вы можете через \CBitrixComponent получить текущий \CBitrixComponentTemplate , но вот arResult здесь не такой как нужно (Ниже опишу как получить все ключи, которые нам нужны в component_epilog.php)

/**
 * @var array $arResult
 * @var array $arParams
 *
 * Текущий путь до папки шаблона родителя
 * @var string $parentTemplateFolder
 *
 * Идентификатор/имя шаблона
 * @var string $templateName
 *
 * Текущий путь до файла шаблона
 * @var string $templateFile
 *
 * Текущий путь до папки шаблона (например /local/templates/.default/components/bitrix/news.detail/.default)
 * @var string $templateFolder
 *
 * Путь к компоненту (например /bitrix/components/bitrix/news.detail)
 * @var string $componentPath
 * 
 * Путь к файлу эпилога (/local/templates/mb4it/components/bitrix/news.detail/.default/component_epilog.php)
 * @var string $epilogFile
 *
 * Объект компонента (либо объект наследника \CBitrixComponent)
 * @var \CBitrixComponent $this
 */

$arResult в component_epilog.php

Как и обещал - расскажу как получить нужный нам ключ массива arResult в component_epilog.php. Дело в том, что данные arResult меняются на этапе вызова метода showComponentTemplate:

# \CBitrixComponent

final public function showComponentTemplate()
{
	if (!$this->__bInited)
		return null;
	if ($this->__template)
		$this->__template->includeTemplate($this->arResult);
	if(is_array($this->arResultCacheKeys))
	{
		$arNewResult = array();
		foreach($this->arResultCacheKeys as $key)
			if(array_key_exists($key, $this->arResult))
				$arNewResult[$key] = $this->arResult[$key];
		$this->arResult = $arNewResult;
	}
	if(!empty($this->__editButtons))
	{
		foreach($this->__editButtons as $button)
		{
			if($button[0] == 'AddEditAction')
				$this->addEditAction($button[1], $button[2], $button[3], $button[4]);
			else
				$this->addDeleteAction($button[1], $button[2], $button[3], $button[4]);
		}
	}
	$this->__template->endViewTarget();
	$this->endResultCache();
}

Именно поэтому нам нужно в файле result_modifier.php добавить нужный нам ключ $arResult в массив arResultCacheKeys с помощью метода \CBitrixComponent::setResultCacheKeys . После этого нужный вам ключ будет доступен в component_epilog.php в массиве $arResult

# result_modifier.php
$this->getComponent()->setResultCacheKeys(['{{NEEDLE_ARRESULT_KEY}}']);

© 2026 MB

Desing by mb4design