Частая задача: передать конфигурацию, переводы или данные из компонента ($arResult) в JavaScript-файл (script.js).
Новички часто пишут echo json_encode($arResult), но в Битрикс есть более специализированный инструмент.
Метод CUtil::PhpToJSObject($data, $bWS, $bSkipNativeFunctions, $bReturnObject)
Он преобразует PHP-переменную в валидную JS-строку (объект или массив).
Базовое использование
В файле template.php:
<?php
$jsData = [
'ITEM_ID' => 123,
'NAME' => "iPhone 'Pro'", // Кавычки будут экранированы
'PRICES' => [100, 200, 300],
'IS_AVAILABLE' => true
];
?>
<script>
// Передаем данные в глобальную переменную или в конфиг класса
var myProductConfig = <?= CUtil::PhpToJSObject($jsData) ?>;
console.log(myProductConfig.NAME); // iPhone 'Pro'
</script>Параметры метода
- $data: Данные (массив, строка, число, bool).
- $bWS (bool): Добавлять ли переносы строк (false — в одну строку, компактно).
- $bSkipNativeFunctions (bool): Экранировать ли ключи (обычно false).
- $bReturnObject (bool): Вернуть JSON-объект или JS-объект? (обычно false).
Особенность: Ключи и кавычки
CUtil::PhpToJSObject отличается от json_encode тем, что он может генерировать ключи объекта без кавычек (если они валидны для JS), что немного уменьшает размер кода, и корректно обрабатывает специфичные для Битрикс типы данных.
Пример использования в классе JS:
// template.php
<script>
BX.ready(function(){
new MyComponent.Class(
<?= CUtil::PhpToJSObject($arResult['JS_PARAMS']) ?>
);
});
</script>Вывод:
Используйте CUtil::PhpToJSObject во всех шаблонах компонентов для проброса данных в JS. Это безопаснее и «роднее» для экосистемы Битрикс, чем нативный json_encode, особенно при работе со старым ядром JS.
CUtil::PhpToJSObject, передать массив в JS, JSON битрикс, PHP to JS, переменные в шаблоне, Битрикс JS.