В этой статье мы рассмотрим, как пробросить данные из PHP в JavaScript в Drupal 11 с использованием js_settings_alter(). Этот метод позволяет изменять или добавлять переменные в объект drupalSettings, который доступен в JavaScript на всех страницах.
Drupal предоставляет мощный механизм для проброса данных из PHP в JavaScript через drupalSettings. Чтобы корректно изменить или добавить данные, нам нужно использовать хук js_settings_alter().
Для начала создадим библиотеку JavaScript, которую мы подключим к страницам. В Drupal это делается через файл my_module.libraries.yml.
|
1 2 3 4 5 6 7 8 |
my_script: version: 1.x js: js/script.js: {} dependencies: - core/jquery - core/Drupal - core/drupalSettings |
Здесь мы создаем библиотеку my_module/my_script, которая будет подключать файл script.js. Также мы указываем зависимость от jQuery, так как часто его используют в Drupal для работы с DOM.
Проброс переменной через js_settings_alter()
Теперь, для передачи данных из PHP в drupalSettings, мы будем использовать хук js_settings_alter(). Он позволяет модифицировать уже существующие данные в объекте drupalSettings, который затем будет доступен в JavaScript.
Пример hook_js_settings_alter():
|
1 2 3 4 5 6 7 |
/** * Implements hook_js_settings_alter(). */ function my_module_js_settings_alter(array &$settings) { // Добавляем или изменяем переменную var в drupalSettings $settings['my_module'] = ['var' => 'value'; // Пример переменной } |
В этом примере мы добавляем или изменяем переменную var в drupalSettings.my_module.
Подключение библиотеки в hook_page_attachments()
Теперь, когда мы добавили переменные в drupalSettings, нам нужно подключить библиотеку JavaScript к странице. Для этого используем hook_page_attachments().
|
1 2 3 4 5 6 7 |
/** * Implements hook_page_attachments(). */ function my_module_page_attachments(array &$attachments) { // Подключаем нашу JavaScript-библиотеку $attachments['#attached']['library'][] = 'my_module/my_script'; } |
Здесь мы подключаем нашу библиотеку my_module/my_script, которая будет использовать переменную из drupalSettings.
Использование переменной в JavaScript
Теперь, после того как данные были переданы через drupalSettings, мы можем использовать их в JavaScript. В файле my_script.js доступ к этим данным осуществляется через объект drupalSettings.
Пример my_script.js:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
(function ($, Drupal, drupalSettings) { Drupal.behaviors.myModuleBehavior = { attach: function (context, settings) { // Доступ к переменной из drupalSettings let varValue = drupalSettings.my_module.var; // Выводим в консоль для проверки console.log('Значение переменной var: ' + varValue); // Дополнительное использование переменной // Например, можно изменить содержание элемента на странице: $('#my-element').text(varValue); } }; })(jQuery, Drupal, drupalSettings); |


