Всем привет!
Сегодня я расскажу вам доступных переменных в таких файлах как: result_modifier.php, template.php, component_epilog.php. Возможно вы об этом всем знаете, но иногда нужно освежить память, а возможно почерпнуть что-то новое. Ниже рассмотрим пример шаблона компонента
$arResult - не тот arResult который мы ожидаем
$this - не объект класса
Сегодня я расскажу вам доступных переменных в таких файлах как: 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}}']);