privatemsg und hook_menu_alter liefern kein Ergebnis
Eingetragen von mike_1985 (76)
am 23.04.2010 - 12:17 Uhr in
am 23.04.2010 - 12:17 Uhr in
Hallo Zusammen,
hab vor einiger Zeit mit der Modulentwicklung für Drupal angefangen. Bin also noch ein bißchen am rumspielen.
Ich möchte gerne den Linktitel des Privatemsg Moduls ändern. Dachte mir mit menu_hook_alter() sollte dies kein Problem sein. Aber leider scheint das Modul selbst einen Riegel davor zu schieben.
Mein Code:
/**
* Implementation of hook_menu_alter().
*
* @param $items Associative array of menu router definitions returned from hook_menu().
*/
function my_profile_menu_alter(&$items) {
$count = ' (' . privatemsg_unread_count($account) . ')';
$txt = t(variable_get('myprofile_privatemsg_text', 'Messages')) . $count;
$items['messages']['title'] = t($txt);
}
Mein Ziel ist es den Text veränderbar zu machen und falls erwünscht einen Zähler für ungelesene Nachrichten hinzuzufügen. Wie gesagt, ein wenig spielerei um auch ein wenig mit der Form API zu experimentieren.
Alle anderen Links, die aus dem Core zum Beispiel, lassen sich ändern.
Ich hoffe jemand kann mir weiterhelfen.
Mit freundlichen Grüßen
- Anmelden oder Registrieren um Kommentare zu schreiben
API
am 23.04.2010 - 13:00 Uhr
Hallo.
Ein gut gemeinter Tipp vorweg: bitte lies Dir dringend die entsprechenden Handbücher zur Entwicklung durch.
Ich pflücke Deinen Code mal ein wenig auseinander ...
$count = ' (' . privatemsg_unread_count($account) . ')';
Wo wird
$account
definiert?Du möchtest vermutlich Folgendes:
<?php
global $user;
$count = ' ('. privatemsg_unread_count($user) .')';
?>
$txt = t(variable_get('myprofile_privatemsg_text', 'Messages')) . $count;
Bitte nicht so. Texte, die der t-Funktion übergeben werden sind von sich aus über die Oberfläche ("übersetzen") änderbar. Dazu benötigt man nicht noch eine zusätzliche Variable. Und Variablen sollten sowieso nicht als Parameter der t-Funktion verwendet werden.
Verwende einfach den folgenden Code; Änderungen können dann über die Standardoberfläche für Übersetzungen gemacht werden.
<?php
global $user;
$link_title = t('Messages (!count)', array('!count' => privatemsg_unread_count($user)));
?>
$items['messages']['title'] = t($txt);
Ganz böse. Du jagst einen bereits übersetzten Text nochmal durch die Übersetzungsfunktion? Was genau soll das bringen? Das benötigst Du nicht.
Komplett sieht die Funktion dann also folgendermassen aus:
<?php
/**
* Implement hook_menu_alter().
*/
function mymodule_menu_alter(&$items) {
global $user;
$items['messages']['title'] = t('Messages (!count)', array('!count' => privatemsg_unread_count($user)));
}
?>
hth,
Stefan
Danke für die Hinweise...ich
am 23.04.2010 - 22:08 Uhr
Danke für die Hinweise...ich werds mir auf jedenfall zu herzen nehmen.
Trotzdem bekomme ich kein Ergebnis.
Hat jemand noch andere Vorschläge? Worauf muss ich denn noch achten oder woran könnte es liegen?
MFG
Hast Du den Drupal Cache
am 25.04.2010 - 13:03 Uhr
Hast Du den Drupal Cache geleert? Unter "Verwalten" -> "Einstellungen" -> Leistung und unten auf den Button Cache leeren klicken.
Sense schrieb Hast Du den
am 25.04.2010 - 16:08 Uhr
Hast Du den Drupal Cache geleert? Unter "Verwalten" -> "Einstellungen" -> Leistung und unten auf den Button Cache leeren klicken.
Hallo Sense.
Dane für den Hinweis, aber den Cache habe ich natürlich geleert, sogar mehrmals.
Der Code funktioniert ja prinzipiel. Tausche ich beispielsweise "messages" mit "node/add" erhalte ich mein gewünschtes ergebnis. Es scheint also an dem Modul selbst zu liegen. Oder?
MFG
weight?
am 25.04.2010 - 17:03 Uhr
Mir kommt da gerade noch so eine Idee ... ich vermute mal, Dein Modul hat in der Tabelle
{system}
eine geringere Gewichtung als [do:privatemsg PrivateMsg] (oder beide haben die Gewichtung 0).In diesem Fall existiert nämlich zu dem Zeitpunkt, an dem Dein Modul eingreift, der Menüpunkt noch gar nicht und [do:privatemsg PrivateMsg] überschreibt Deine Einstellungen.
Gehe einfach mal in die Tabelle
{system}
und setze den Wert in der Spalte "weight" bei Deinem Modul etwas nach oben (mindestens 1 höher als der Wert von [do:privatemsg PrivateMsg]).Dann sollte es funktionieren.
hth,
Stefan
stBorchert schrieb Mir kommt
am 29.04.2010 - 14:55 Uhr
Mir kommt da gerade noch so eine Idee ... ich vermute mal, Dein Modul hat in der Tabelle
{system}
eine geringere Gewichtung als [do:privatemsg PrivateMsg] (oder beide haben die Gewichtung 0).In diesem Fall existiert nämlich zu dem Zeitpunkt, an dem Dein Modul eingreift, der Menüpunkt noch gar nicht und [do:privatemsg PrivateMsg] überschreibt Deine Einstellungen.
Gehe einfach mal in die Tabelle
{system}
und setze den Wert in der Spalte "weight" bei Deinem Modul etwas nach oben (mindestens 1 höher als der Wert von [do:privatemsg PrivateMsg]).Dann sollte es funktionieren.
hth,
Stefan
Hallo Stefan
danke für den Tipp. Aber leider wieder kein Ergebnis.
Die Pfade "node/add" und "admin" beispielsweise funktionieren wunderbar. Aber bei anderen Pfaden wie eben "messages" oder auch "admin/settings/devel" funktioniert es wiederum nicht. Ich kann mir das leider nicht erklären. Bin ja schließlich auch noch Anfänger.
Ich hoffe jemand von euch Profis hat noch eine Idee???
MFG
Weight
am 29.04.2010 - 15:07 Uhr
Hallo.
Welche Gewichtung hat den Dein Modul in der Tabelle? Und welchen haben devel und privatemsg?
stBorchert
am 29.04.2010 - 15:45 Uhr
Hallo.
Welche Gewichtung hat den Dein Modul in der Tabelle? Und welchen haben devel und privatemsg?
Also mein Modul habe ich mal auf 20 hochgesetzt. Die anderen hatte 0. Habe jetzt aber beide mal angehoben. Devel auf eins und Privatemsg auf zwei.
Cache und so wurde natürlich geleert.
Titel
am 29.04.2010 - 16:42 Uhr
Ok, ich hab mir das Modul jetzt nochmal genauer angeschaut. Es bringt nichts, den Titel des Menüpunktes zu ändern, da der eigentliche Titel über die in "title callback" angegebene Funktion gesetzt wird.
Dementsprechend musst Du den Title-Callback ändern (ich hab das mal in ein kleines Testmodul namens "pmsg" gepackt):
<?php
// $Id$
/**
* @file
* Main functions for pmsg.module.
*/
/**
* Implement hook_menu_alter().
*
* @param $items Associative array of menu router definitions returned from hook_menu().
*/
function pmsg_menu_alter(&$items) {
$items['messages']['title callback'] = 'pmsg_title_callback';
}
/**
* Custom title callback.
*/
function pmsg_title_callback($title = NULL) {
$count = privatemsg_unread_count();
if ($count > 0) {
return t('Messages (@count)', array('@count' => $count));
}
return t('Messages');
}
?>
Das funktioniert (auch ohne "weight" anzupassen).
hth,
Stefan
Hallo stBorchert danke für
am 01.05.2010 - 19:53 Uhr
Hallo stBorchert
danke für deine Mühe. Hab mich schon gefreut mit der Lösung endlich mal wieder ein wenig weiter zu machen?
ABER
wieder kein Ergebnis :-(
Hast du diese Lösung bei dir ausprobiert?
Muss ich auf noch etwas achten?
Greetz
form_alter
am 01.05.2010 - 22:22 Uhr
Hast du diese Lösung bei dir ausprobiert?
Jup. Funktioniert ohne Probleme (siehe Screenshot #1 und #2).
Muss ich auf noch etwas achten?
Hm, eigentlich nicht.
Wenn Du aus obigem Code ein "richtiges" Modul machst (also mit .info Datei) dann funktioniert das einfach so. Jedenfalls hat es das bei mir.
Stefan
stBorchert schrieb mike_1985
am 04.05.2010 - 15:08 Uhr
Hast du diese Lösung bei dir ausprobiert?
Jup. Funktioniert ohne Probleme (siehe Screenshot #1 und #2).
Muss ich auf noch etwas achten?
Hm, eigentlich nicht.
Wenn Du aus obigem Code ein "richtiges" Modul machst (also mit .info Datei) dann funktioniert das einfach so. Jedenfalls hat es das bei mir.
Stefan
Endlich funktioniert alles...das Problem war das ich den Menüeintrag geändert hatte. Also unter admin/build/menu.
Hmm ich frage mich jetzt aber wie ich das Problem abfangen kann und woran das dann lag? Sprich wieso konnte mein Modul die Änderung nicht ausführen?
Greetz und danke an alle für eure Mühe