Передача данных из компонента в js, BX.message в BX
По сути файл script.js
подключается после template.php
, поэтому для передачи в него каких-то данных, мы можем задать глобальную переменную, например в объекте window
:
template.php<script>window.var = 123;</script>
Далее в script.js
получить значение из window.var
, но это неправильный метод загрязняющий глобальный объект.
В 1С Битрикс, правильно использовать встроенный объект BX.message
. Для примера, передадим в script.js
путь к папке шаблона компонена, для этого в файле шаблона template.php
, прописываем:
template.php<script>
BX.message({
TEMPLATE_PATH: '<? echo $this->GetFolder(); ?>'
});
</script>
В файле script.js
можем этот путь получить:
script.jslet folderPath = BX.message('TEMPLATE_PATH');
Передача языковых фраз в JS
Сначала считаем языковые фразы в переменную и передаем в объект BX
:
template.php$messages = Loc::loadLanguageFile(__FILE__);
BX.message(<?=CUtil::PhpToJSObject($messages)?>);
Для передачи всех языковых фраз шаблона в JS, можно воспользоваться такой структурой:
template.php<php>
use \Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
$messages = Loc::loadLanguageFile(__FILE__);
</php>
<script>
BX.message(<?=CUtil::PhpToJSObject($messages)?>);
</script>