Засел за пример работы component_epilog.php и благодаря Максиму Смирнову разобрался, как же его скрещивать с result_modifier.php. Собственно, в документацию мы уже внесли, но напишу еще тут.
UPD. Для версии модуля main до 10.0
1. $arResult в компоненте и шаблоне - это разные массивы. В шаблон поступает копия. Соответственно, что с ним ($arResult) в шаблоне не делай - компоненту без разницы.
2. Если надо засунуть в кеш результат работы result_modifier.php - делаем так:
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$cp = $this->__component; // объект компонента
if (is_object($cp))
{
// добавим в arResult компонента два поля - MY_TITLE и IS_OBJECT
$cp->arResult['MY_TITLE'] = 'Мое название';
$cp->arResult['IS_OBJECT'] = 'Y';
$cp->SetResultCacheKeys(array('MY_TITLE','IS_OBJECT'));
// сохраним их в копии arResult, с которой работает шаблон
$arResult['MY_TITLE'] = $cp->arResult['MY_TITLE'];
$arResult['IS_OBJECT'] = $cp->arResult['IS_OBJECT'];
} |
3. Получим все это в component_epilog.php:
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
if (isset($arResult['MY_TITLE']))
$APPLICATION->SetTitle($arResult['MY_TITLE']);
|
Вот и все.
UPD. После упорного общения с Сергеем Лещенко и комментария Вадима Думбравану более универсальный вариант (чтобы не учитывать версию модуля main):
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$cp = $this->__component; // объект компонента
if (is_object($cp))
{
// добавим в arResult компонента два поля - MY_TITLE и IS_OBJECT
$cp->arResult['MY_TITLE'] = 'Мое название';
$cp->arResult['IS_OBJECT'] = 'Y';
$cp->SetResultCacheKeys(array('MY_TITLE','IS_OBJECT'));
// сохраним их в копии arResult, с которой работает шаблон, если модуль main меньше 10.0
if (!isset($arResult['MY_TITLE']))
{
$arResult['MY_TITLE'] = $cp->arResult['MY_TITLE'];
$arResult['IS_OBJECT'] = $cp->arResult['IS_OBJECT'];
}
}
|