Добро пожаловать на сайт Bitrix Q&A, где вы можете задавать вопросы о программировании и разработке на Битрикс и получать быстрые и квалифицированные ответы от профессионалов!


как использовать arResult в другом компоненте

0 голосов
Добрый вечер, господа!
помогите советом. данные из arResult нужно использовать на странице еще в 2 компонентах.
объявляю его глобальным
Код
global $arResult; 

но в другом компоненте вызвать
Код
global $APPLICATION; 
global $arResult; 

не получается.
как правильнее обранизовать работу в таком случае?
заранее спасибо!
спросил 28 Июль, 13 от Exet (380 баллов)

7 Ответы

0 голосов
Если по уму - то никак. А так - попробуйте в component_epilog.php передавать в какую-нибудь глобальную переменную.
ответил 28 Июль, 13 от Pomnep (13,960 баллов)
0 голосов
Цитата
Евгений Жуков пишет:
Если по уму - то никак. А так - попробуйте в component_epilog.php передавать в какую-нибудь глобальную переменную.


Добавлю. Если использовать глобальную переменную, то ее нужно добавить в cache_id или передавать эту переменную через параметры компонента(добавить новый параметр, н.п. "AR_RESULT"), иначе некоторые компоненты, в которых вы собираетесь использовать $arResult, при в ключенном кешировании будут выдавать результат не учитывая данную переменную(массив).
ответил 24 Сен, 13 от Poleolog (1,240 баллов)
0 голосов
Цитата
Андрей Шилов пишет:
Добавлю. Если использовать глобальную переменную, то ее нужно добавить в cache_id или передавать эту переменную через параметры компонента(добавить новый параметр, н.п. "AR_RESULT"), иначе некоторые компоненты, в которых вы собираетесь использовать $arResult, при в ключенном кешировании будут выдавать результат не учитывая данную переменную(массив).

Что за бред? При чем тут это? component_epilog.php выполняется каждый раз и как раз предназначен для выполнения задач, которые в кеш попадать не должны, типа установки свойств страницы, например.
ответил 24 Дек, 13 от Pomnep (13,960 баллов)
0 голосов
Цитата
Евгений Жуков пишет:
Что за бред? При чем тут это? component_epilog.php выполняется каждый раз и как раз предназначен для выполнения задач, которые в кеш попадать не должны, типа установки свойств страницы, например.


я говорил про использование в следующем компоненте этой глобальной переменной, если она влияет на кешируемый результат.

из справки StartResultCache:

Кеш зависит от текущего сайта ( SITE_ID), имени компонента, имени шаблона, входных параметров $arParams. Если кеш должен зависеть от каких-либо дополнительных параметров, то их необходимо передать сюда в виде строки. По умолчанию параметр равен False, т.е. кеш зависит только от текущего сайта SITE_ID, имени компонента, имени шаблона и входных параметров $arParams.

Я не вижу тут упоминания о некоторой глобальной переменной пришедшей из другого компонента.
ответил 09 Апр, 14 от Poleolog (1,240 баллов)
0 голосов
Перечитал. В общем случае, согласен.
ответил 02 Авг, 14 от Pomnep (13,960 баллов)
0 голосов
Есть хорошая картинка на эту тему:

Рисунок
ответил 06 Дек, 14 от Eddie (2,060 баллов)
0 голосов
большое спасибо за помощь, господа!
но ввиду того, что не все понял сделал через отложенные функции
Код
global $LeftMenu; 
$LeftMenu=$arResult["FINAL"]; 
function ShowLeftMemu($LeftMenu) 
{ 
global $LeftMenu; 
ob_start(); 
foreach($LeftMenu as $arProp)
echo $arProp."<br>";
$retrunStr = @ob_get_contents(); 
ob_end_clean(); 
return $retrunStr; 
}

вызываю непосредственно в шаблоне сайта
Код
$APPLICATION->AddBufferContent("ShowLeftMemu");

все хорошо, но если в настройках автокеширования устанавливаю кешировать компоненты, функция не срабатывает.
так и должно быть?
ответил 29 Март, 15 от Exet (380 баллов)

Похожие вопросы

0 голосов
0 ответов
0 голосов
2 ответов
0 голосов
3 ответов
0 голосов
3 ответов
Управление продуктом: аналитика, разработка, продвижение