При разработке сайтов на битриксе иногда возникает необходимость вывести определенную локальную переменную из компонента где-нибудь еще, или же использовать её иным способом. В рамках данного примера, такой переменной является значение города из компонента определения пользовательского местоположения. Существуют несколько путей решения данной задачи. В данной заметке рассматривается путь не самый идеальный, но наиболее простой.
Решение данной задачи возможно через объявление искомой переменной глобальной — т.е. видимой и за пределами исходного компонента.
Для внесения ясности можно привести следующий пример из реальной практики автора данной заметки: Требуется получить значение города из компонента «Определитель города» и, на основании полученных данных, вывести тот, или иной баннер.
Шаг 1. Код компонента
Первым делом, мы идем в код шаблона компонента и ищем там искомую переменную/массив данных. Шаблон компонента, как известно, может быть расположен либо в папке с шаблоном сайта, либо в папке /bitrix/components/.
В нашем случае, это часть массива $arResult: $arResult[«USER_CHOICE»]; Если мы попробуем вывести этот массив за пределами компонента, например, в футере (через print_r()), то получим пустое значение.
Переопределяем: $GLOBALS[‘sonicYouth’] = $arResult[«USER_CHOICE»];
Шаг 2. Вывод содержимого массива
Вызываем в футере содержимое нашего массива через print_r:
<?print_r($GLOBALS['sonicYouth']);?>
Проверяем:
//Бинго! Array ( [REGION] => Array ( [CODE] => 77 [NAME] => Москва [FULL_NAME] => Москва Город [SOCR] => г ) [DISTRICT] => Array ( [CODE] => [NAME] => [SOCR] => ) [CITY] => Array ( [ID] => [NAME] => Москва [SOCR] => г [POSTINDEX] => 0 [ID_DISTRICT] => 77000 ) [CODE] => 77000000000 )
Шаг 3. Вывод условия
Из условия задачи, нам нужно получить имя города пользователя и, на основании полученного значения, вывести тот или иной баннер. Следовательно, имя города из данного массива можно получить следующим образом:
$GLOBALS['sonicYouth']['CITY']['NAME']
А само условие будет примерно таким:
if($GLOBALS['sonicYouth']['CITY']['NAME'] == 'Москва'){ echo $banner1; } else { echo $banner2; }
В целом всё, но нужно сказать несколько слов об опасности глобальных переменных. Почему нельзя ими злоупотреблять.
Опасность глобальных переменных
Глобальные переменные имеют одну очень характерную особенность — их значение может изменить любая функция, где они вызываются и результат может может значительно отличаться от ожидаемого. Конечно, в рамках данного примера это маловероятно, но если бы были задействованы переменные каталога, то, вполне вероятно, могли бы возникнуть определенные трудности. В целом, единственный совет, который можно дать в данном случае — не злоупотреблять глобальными переменными и не «вытаскивать» их без особой надобности из компонента. Как правило, большинство задач на битриксе решаются без этого.