Ich bin mir nicht sicher, ob ich dich richtig verstanden habe, aber es scheint, dass du auf etwas in deinem Javascript reagieren und eine Nachricht in drupal Stil mit den Effekten anzeigen möchtest.
Um alles klar zu machen, können JavaScript und Drupal (PHP) nicht wirklich gut miteinander kommunizieren. Die einzige Lösung ist durch AJAX, so dass es keinen Sinn machen würde, drupal_set_message() von Ihrem Javascript zu verwenden. Der Grund ist, dass es ziemlich schwierig wäre und Sie würden nur mit HTML enden, das Sie an Ihre Seite anhängen müssten. Es wäre also viel einfacher, den HTML-Code in Ihrem Javascript direkt zu erstellen, wie ich es in der Antwort auf Ihre andere Frage vorgeschlagen habe. Alles, was übrig bleiben würde, wäre, die Effekte anzuhängen. Das ist eigentlich gar nicht so schwer, abhängig von Ihren Effekten. Der einzige schwierige Teil besteht darin, die Einstellungen aus dem Modul messagefx abzurufen, was momentan nicht möglich ist, da keine Einstellungen in den Skriptvariablen gespeichert werden.
Also diese Lösung in Code würde wie folgt sein:
$("#something").a_trigger(function() {
$("#messages").append('your html with message').find('the html you inserted').effect(some effect here);
});
auf die Wirkung Je Sie erstellen möchten, würden Sie eine andere Funktion aufzurufen, schauen, was messagefx tut in seiner Modul-Datei um die Linie 55.
Die andere Möglichkeit ist, dass Sie auf jede drupal_set_message() reagieren möchten. Der schwierige Teil wäre, herauszufinden, wann es eine Nachricht gibt, da es im Javascript nicht wirklich eine Möglichkeit gibt, es zu wissen. Bedenken Sie auch, dass die meisten Nachrichten das Ergebnis des Sendens eines Formulars sind, bei dem die Seite sowieso neu geladen wird, was unnötig wäre. Sie würden also mit dem Erstellen einer einfachen AJAX-Funktion beginnen, um die Daten abzurufen und ein eigenes einfaches Modul dafür zu erstellen. Im Grunde alles, was Sie brauchen, um eine URL mit hook_menu zu definieren und in diesem Callback den Ajax zu behandeln. Sie können die Nachrichten aus dem Super-globalen $ _SESSION abrufen.
So ist der Rückruf, wäre so etwas wie dies
function mymodule_ajax_callback() {
if (isset($_SESSION['messages'] && !empty($_SESSION['messages'])) {
$result = array();
foreach($_SESSION['messages'] as $message) {
$result[] = 'Generate html based on $message';
}
unset($_SESSION['messages']) // Remove the messages so they wont appear twice.
}
return drupal_json($result);
}
aussieht Der Rest wie die erste Lösung aussehen wird, erhalten Sie nur den HTML-Code aus der Ajax statt.
Möchten Sie eine Nachricht erstellen und diese mit Effekten anzeigen oder möchten Sie eine in der Sitzung gespeicherte Nachricht anzeigen? Wie können Sie verfolgen, ob eine Nachricht über drupal_set_message erstellt wurde? – googletorp
Ich möchte eine Nachricht mit Effekten anzeigen. Ich möchte eine Nachricht mit drupal_set_message auslösen und dann rufen, was auch immer aufgerufen werden muss, damit drupal sofort alle Nachrichten in der Sitzung direkt auf dem Bildschirm anzeigt. Ist das sinnvoll? – coderama