Încerc să găsesc un eveniment la care să mă pot abona pentru metoda addMessage.
Trebuie să declanșez un cod de fiecare dată când este adăugat un mesaj de stare. Reacționând la acest eveniment, trebuie să trimit o variabilă de la php la JS. Nu am putut găsi un eveniment la care să mă abonez, așa că am folosit un preproces, mai jos.
<?php
funcția mymodule_preprocess_status_messages(&$variabile) {
$variables['#attached']['drupalSettings']['send_me_to_js']['_variable'] = 'Mergem la js...';
}
Acest preproces rulează de fiecare dată când se folosește addMessage și este afișat un mesaj de stare, dar variabila pe care trebuie să o trimită la JS nu este întotdeauna trimisă.
De exemplu, acest lucru funcționează pentru mesajele create din core și primesc variabila în JS. Dar când Drupal Commerce folosește addMessage (de exemplu, când adăugați un produs în coș în configurarea ajax), preprocesul rulează, se afișează mesajul de stare, dar variabila nu este disponibilă în JS.
Iată javascript-ul:
(funcție ($, Drupal, drupalSettings) {
Drupal.behaviors.alwave_alerts = {
atașați: funcție (context, setări) {
$('.my-class', context).once('unique-string').each(function () {
// Rulați după fiecare apel ajax
$(document).ajaxComplete(funcție () {
// Aceasta este uneori nedefinită, chiar dacă rulează preprocesul de mai sus
// și există un mesaj de stare pe ecran
// (de exemplu, când comerțul creează un mesaj de stare)
console.log(settings.send_me_to_js);
});
});
}
};
}(jQuery, Drupal, drupalSettings));
Trebuie să existe o cale ușoară?
Actualizați:
Am descoperit că preprocesul nu trimite variabila la javascript doar la cererile ajax. La încărcarea primei pagini, este trimisă, dar cererile ulterioare ajax nu trimit această variabilă la JS. Pare a fi ordinea în care lucrurile sunt executate în timpul solicitărilor ajax.
Deci întrebarea este: Cum trimit o variabilă la JS din acest preproces pe apelurile Ajax?