К сожалению (а быть может к счастью) в эпилог компонента падает не весь массив с параметрами. Ниже вы узнаете как добавить в массив переменные, без дополнительных запросов
Как добавить данные из $arResult в component_epilog.php
Без долгих вступлений, начнем. Вам понадобится любой компонент, и 2 файла относящиеся к этому компоненту result_modifier.php и component_epilog.php . Если их еще нет, создайте. В самом конце резалт модифаера пишем следующий код:
// result $cp = $this->__component; // объект компонента if (is_object($cp)) { // добавим в arResult компонента поля $cp->arResult['SPECIAL_LOGO_SRC'] = $arResult['PREVIEW_PICTURE']['SRC']; $cp->arResult['SPECIAL_SLIDER_SRC'] = $arResult['DETAIL_PICTURE']['SRC']; $cp->arResult['SPECIAL_DESCR'] = $arResult['PREVIEW_TEXT']; $cp->SetResultCacheKeys(array('SPECIAL_LOGO_SRC','SPECIAL_SLIDER_SRC', 'SPECIAL_DESCR')); // сохраним их в копии arResult, с которой работает шаблон $arResult['SPECIAL_LOGO_SRC'] = $cp->arResult['SPECIAL_LOGO_SRC']; $arResult['SPECIAL_SLIDER_SRC'] = $cp->arResult['SPECIAL_SLIDER_SRC']; $arResult['SPECIAL_DESCR'] = $cp->arResult['SPECIAL_DESCR']; }
Что мы делаем? Записываем из массива $arResult, который уже содержит все необходимые свойства со значениями, свои уникальные для эпилога.
Теперь, они доступны как в самом template.php так и в эпилоге:
//epilog <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <? $APPLICATION->SetPageProperty('SPECIAL_LOGO_SRC', $arResult['SPECIAL_LOGO_SRC']); $APPLICATION->SetPageProperty('SPECIAL_SLIDER_SRC', $arResult['SPECIAL_SLIDER_SRC']); $APPLICATION->SetPageProperty('SPECIAL_DESCR', $arResult['SPECIAL_DESCR']);
Мне пригодилось это при использовании SetPageProperty, который потом используется в header.php . Что делать с футером сайта (footer.php вашего шаблона) вы уже знаете по этой статье.
Если бы не эта возможность, пришлось бы по $arResult[‘ID’] вытаскивать всю необходимую информацию, которые мы и так уже получили.
На этом всё. Всем удачи и терпения 🙂 .
UPDATE Обратите внимание на комментарии
Ну прям костыль какой-то. Если Вы сдавали экзамены по Битрикс или хотя бы готовились, то Вам должно быть известно о такой функции компонента как SetResultCacheKeys(), который принимает массив ключей, которые и будут “прокинуты” в некешируемые части компонента (конкретно в нашем случае – component_epilog.php )
Для “проброса” из файла компонента:
$this->SetResultCacheKeys([
‘TOTAL_FOR_EXAMPLE’,
]);
Для “проброса” из файла result_modifier:
$this->__component->SetResultCacheKeys([
‘TOTAL_FOR_EXAMPLE’
]);
перечитал документацию, действительно работает и так и так, ссылка на эту главу
https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2975&LESSON_PATH=3913.4565.2975
Дополню ваш пример для полноты, перед вашим кодом необходимо добавить в массив значение
$arResult[‘TEST’] = ‘test_value’;
а затем Для «проброса» из файла result_modifier:
$this->__component->SetResultCacheKeys([
‘TEST’
]);
Благодарю за конструктив 🙂
Работает, но если поменять значение TEST в result_modifier, то оно срабатывает только после сброса кэша, а должно насколько я понял всегда, конкретно в шаблоне catalog.section пробовал. Судя по всему нужно еще и в component.php/class.php лезть, хз.