[gelöst] $messages entfernen oder verändern
Eingetragen von E-Fee (481)
am 30.03.2010 - 00:58 Uhr in
am 30.03.2010 - 00:58 Uhr in
Ich habe eine Seite, wo ich mich an einigen Stellen zwar über die ausgegebenen $messages freue, an anderen Stellen möchte ich sie jedoch nicht haben, weil es für die User nicht schön aussieht. Beispiel:
ichbineindoofernodename-123 is currently unpublished
An dieser Stelle z.B. würde ich die Meldung einfach gern "schöner" machen. Ich hab leider auch auch drupal.org nichts wirklich Erhellendes gefunden. Aber für die alten Hasen dürfte sowas doch ein Standardthema sein, oder nicht?
LG
Sonja
- Anmelden oder Registrieren um Kommentare zu schreiben
custom submit message
am 30.03.2010 - 07:27 Uhr
Hallo.
Probier mal das Modul Custom submit message.
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Das hab ich schon gefunden,
am 30.03.2010 - 07:56 Uhr
Das hab ich schon gefunden, aber das greift nur für ein paar wenige Fälle, für obiges Beispiel z.B. nicht. :-(
Drupal Freelancer im Rheinland gesucht?
So, ich möchte doch gern noch
am 04.05.2010 - 10:06 Uhr
So, ich möchte doch gern noch mal auf meine Frage hier zurückkommen.
Das obige Beispiel war vielleicht auch nicht ganz so top gewählt, weil das mit dem unpublished ohnehin an etwas anderem lag, was behoben ist.
Aber ich habe das Problem, dass Custom Submit Messages ja noch ein recht neues Modul und noch Alpha und dementsprechend buggy ist. Vor allem mit anderen Sprachen als Englisch funktioniert das wohl noch nicht so recht und genau das ist auch mein Problem.
Obwohl ich schöne Texte für das Erstellen, Ändern und Löschen der Nodes in den entsprechenden Nodetypen gesetzt habe, werden diese nicht verwendet. Ich habe die Texte sogar auch in die Kästchen fürs Englische reingestellt, funktioniert ebenfalls nicht.
Es kommt halt nicht so toll, wenn ein User einen Teil seines Content Profile editiert und dann sowas bekommt wie:
Benutzerprofil benutzerprofil-meinbenutzername wurde aktualisiert.
Stehen sollte dort eigentlich:
Der Inhalt wurde erfolgreich verändert und wartet auf Freischaltung.
So, irgendwie muss es doch möglich sein, an die $message bei der Node-Erstellung ranzukommen (wird wohl im Core sein) und diese zu modifizieren oder sogar ganz abzuschalten, am liebsten natürlich mit einem kleinen Zusatzmodul, das den Core überschreibt. Die $messages-Variable ganz aus der page.tpl.php rausnehmen ist leider keine Lösung, da ich die Messages bei anderen Sachen brauche. Und für die Edit-Seite, auf der die Message erscheint, kann ich doch auch keine page-irgendwas.tpl.php anlegen, wenn ich das richtig sehe?
Ich bin leider auch weder aus der Betrachtung des csm-Moduls (auch wenn das sicher den passenden, leider aber nicht funktionierenden Ansatz bereithält) noch aus der Volltextsuche nach allen Dateien mit $message im Code schlau geworden. Wie geht das?
LG
Sonja
Drupal Freelancer im Rheinland gesucht?
Ich hätte da vielleicht nen
am 04.05.2010 - 10:30 Uhr
Ich hätte da vielleicht nen Ansatz für dich.
Zumindest bei Erstellung, Bearbeitung, Löschung usw von Nodes könnte man es wie folgt machen:
Man schreibt sich ein kleines Modul, welche hook_nodeapi implementiert. Dort kannst du dann mittels drupal_get_messages die Meldungen auslesen. Wenn du dabei den Parameter $clear_queue auf TRUE setzt müsstest du eigentlich verhindern können, dass die Meldungen angezeigt werden. Wenn du dann also folgendes machst:
<?php
$messages = drupal_get_messages($type, $clear_queue = TRUE);
?>
speicherst du alle Meldungen in $messages. Dann kannst du dir aus diesen dann die raussuchen, die angezeigt werden soll bzw diese manipulieren und diese dann über drupal_set_message wie gewohnt ausgeben.
Das sind lediglich Überlegungen, ist somit ungetestet, könnte aber so funktionieren.
Danke, das hat mich auf die
am 04.05.2010 - 11:27 Uhr
Danke, das hat mich auf die richtige Spur gebracht. Bei solchen Sachen, die grad mal Neuland für mich sind, brauche ich meistens nur einen kleinen Schubs in die richtige Richtung und kann es mir dann aber selbst zusammenstückeln.
Habe mir ein kleines Modul mit folgender Funktion (kompletter Modulcode!) geschrieben, das alle Messages auf den Edit-Seiten löscht und eine neue Nachricht ausgibt.
function changemessages_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if ($op=='prepare') {
$messages = drupal_get_messages($type, $clear_queue = TRUE);
drupal_set_message('Der Inhalt wurde erfolgreich verändert und wartet auf Freischaltung.','status');
}
}
Das Ganze lässt sich noch verfeinern, denn im Moment gilt es noch für alle Nodetypen und auch im Fall, dass nicht moderiert wird. Auch wird nicht zwischen den einzelnen Operationen unterschieden.
LG
Sonja
Drupal Freelancer im Rheinland gesucht?
Hallo, der Thread ist schon
am 05.02.2011 - 16:43 Uhr
Hallo,
der Thread ist schon etwas älter aber ich habe auch ein Problem mit den Messages.
Ich habe den Code von E-Fee in ein eigenes Module übernommen um die Message - nach dem Speichern des User-Profiles anzupassen. Statt "prepare" nutze ich "update".
function changemessages_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if ($op=='update') {
$messages = drupal_get_messages($type, $clear_queue = TRUE);
drupal_set_message('Dein Profil wurde aktualisiert.','status');
}
}
Das funktioniert auch - die neue Message wird angezeigt aber leider wird gleichzeitig auch die alte Message darunter angezeigt.
Dein Profil wurde aktualisiert.
Profile - Usernames Profile wurde aktualisiert.
Wenn ich mir mit krumo die message-Variable anschaue, stecken tatsächlich beide Meldungen in der Variablen. Ich dachte eigentlich, dass man mit $clear_queue = TRUE die alte Message-Queue löscht ( so steht es auch in der Dokumentation) aber bei mir klappt dies leider nicht.
Hat vielleicht von Euch jemand einen Tip was ich hier falsch mache?
Danke und schöne Grüße
Matthias
Drupal rockt!!!
Tja - was ich bisher gelesen
am 05.02.2011 - 17:59 Uhr
Tja - was ich bisher gelesen habe, ist, dass die Message wohl in der Session steckt und man da nicht so einfach heran kommt. Mit der obigen Function setzt man einfach eine zweite Message dazu ohne die alte löschen zu können.
Ich wollte "nur mal schnell " die Message ändern und jetzt sitzt man wieder den ganzen Nachmittag und bekommt es nicht hin.
Manchmal ist das alles nur noch traurig.
Falls da jemand einen Tip hätte, würde ich mich freuen.
Drupal rockt!!!
Sooo ... jetzt hab ichs. Das
am 05.02.2011 - 20:45 Uhr
Sooo ... jetzt hab ichs. Das wird sicherlich ab und an auch noch andere interessieren - deshalb schreibe ich es hier mal auf.
Bei mir soll, wenn der User sein Profile ändert/speichert (Content Profile), nach dem Speichern und Redirect aufs Profile eine angepasste Message erscheinen und nicht diese Drupalinterne verwirrende Meldung. Diese Änderung soll auschließlich für den Inhaltstypen "profile" gelten.
Ich möchte ganz einfach: "Dein Profile wurde aktualisiert" haben!
Wir erstellen uns jetzt ein kleines Module.
Zuerst überschreiben wir die Message die vom Node-Module (node.pages.inc) erzeugt wird.
In unser Module schreiben wir daher ....
<?php
function dein_modulename_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'profile_node_form':
case 'story_node_form': // <---- Weitere Inhaltstypen möglich
case 'auto_bla_node_form': // <---- Weitere Inhaltstypen möglich
$form['buttons']['submit']['#submit'][0] = 'dein_modulename_form_submit';
break;
}
}
?>
"dein_modulename_form_submit" ist eine Funktion die wir im selben Module definieren. Damit erreichen wir, dass für die Message beim Node-Speichern nicht die Standard-Message verwendet wird sondern unsere eigene. "dein_modulename" muss natürlich durch den richtigen Namen ersetzt werden.
Folgende Funktion beinhaltet nicht nur eine neue Message, sobald ein bestehender Node gespeichert wird, sondern wir können auch eine eigene Message anzeigen lassen wenn ein Node erstellt wurde und eine eigene Fehlermeldung, sollte der Node nicht gespeichert werden können.
<?php
function dein_modulename_form_submit($form, &$form_state) { // <---- Den Namen des Modules nehmen
global $user;
$node = node_form_submit_build_node($form, $form_state);
$insert = empty($node->nid);
node_save($node);
$node_link = l(t('view'), 'node/'. $node->nid);
$watchdog_args = array('@type' => $node->type, '%title' => $node->title);
$t_args = array('@type' => node_get_types('name', $node), '%title' => $node->title);
if ($insert) {
watchdog('content', '@type: added %title.', $watchdog_args, WATCHDOG_NOTICE, $node_link);
drupal_set_message(t('Dein Profile wurde erstellt.', $t_args)); // <---- Da kannst Du schreiben was immer Du willst (Nodeerstellung)
}
else {
watchdog('content', '@type: updated %title.', $watchdog_args, WATCHDOG_NOTICE, $node_link);
drupal_set_message(t('Dein Profile wurde aktualisiert', $t_args)); // <---- Da kannst Du schreiben was immer Du willst (Node wurde gespeichert/updated)
}
if ($node->nid) {
unset($form_state['rebuild']);
$form_state['nid'] = $node->nid;
$form_state['redirect'] = 'node/'. $node->nid;
}
else {
drupal_set_message(t('Fehler - das Profile konnte nicht gespeichert werden.'), 'error'); // <---- Da kannst Du schreiben was immer Du willst (bei Fehlermeldung/Error)
}
}
?>
So - das wars auch schon. Nach dem abspeichern und eventuell dem Cache-Löschen, bekommt man seine eigenen Wunsch-Messages angezeigt.
Schöne Grüße
Matthias
Drupal rockt!!!