Я пытаюсь найти событие, на которое я могу подписаться для метода addMessage.
Мне нужно запускать некоторый код каждый раз, когда добавляется сообщение о состоянии. Отреагировав на это событие, мне нужно отправить переменную из php в JS. Я не смог найти событие для подписки, поэтому вместо этого я использовал предварительный процесс, как показано ниже.
<?php
функция mymodule_preprocess_status_messages(&$variables) {
$variables['#attached']['drupalSettings']['send_me_to_js']['_variable'] = 'Переход к js...';
}
Этот предварительный процесс запускается каждый раз, когда используется addMessage, и отображается сообщение о состоянии, но переменная, которую мне нужно отправить в JS, не всегда отправляется.
Например, это работает для сообщений, созданных из ядра, и я получаю переменную в JS. Но когда Drupal Commerce использует addMessage (например, при добавлении товара в корзину в настройке ajax), запускается предварительный процесс, отображается сообщение о состоянии, но переменная недоступна в JS.
Вот javascript:
(функция ($, Drupal, drupalSettings) {
Drupal.behaviors.alwave_alerts = {
прикрепить: функция (контекст, настройки) {
$('.мой-класс', контекст).once('уникальная-строка').each(функция () {
// Запуск после каждого вызова ajax
$(документ).ajaxComplete(функция () {
// Это иногда не определено, даже если препроцесс выше работает
// и на экране появляется сообщение о статусе
// (например, когда коммерция создает сообщение о статусе)
console.log(settings.send_me_to_js);
});
});
}
};
}(jQuery, Drupal, настройки drupal));
Должен быть простой способ?
Обновлять:
Я обнаружил, что предварительный процесс не отправляет переменную в javascript только по запросам ajax. При загрузке первой страницы она отправляется, но последующие ajax-запросы не отправляют эту переменную в JS. Кажется, это последовательность, в которой вещи выполняются во время запросов ajax.
Итак, вопрос в том, как мне отправить переменную в JS из этого предварительного процесса при вызовах ajax?