Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

privatemsg und hook_menu_alter liefern kein Ergebnis

Eingetragen von mike_1985 (76)
am 23.04.2010 - 12:17 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

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

‹ [gelöst] hook_form_alter: Reihenfolge von Formularelementen festlegen Formularfelder von Elternmodul erweitert & möchte die Werte der zusätzlichen Formularfelder mitspeichern ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

API

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für die Hinweise...ich

Eingetragen von mike_1985 (76)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast Du den Drupal Cache

Eingetragen von Sense (1559)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sense schrieb Hast Du den

Eingetragen von mike_1985 (76)
am 25.04.2010 - 16:08 Uhr
Sense schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

weight?

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

stBorchert schrieb Mir kommt

Eingetragen von mike_1985 (76)
am 29.04.2010 - 14:55 Uhr
stBorchert schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Weight

Eingetragen von stBorchert (6003)
am 29.04.2010 - 15:07 Uhr

Hallo.
Welche Gewichtung hat den Dein Modul in der Tabelle? Und welchen haben devel und privatemsg?

  • Anmelden oder Registrieren um Kommentare zu schreiben

stBorchert

Eingetragen von mike_1985 (76)
am 29.04.2010 - 15:45 Uhr
stBorchert schrieb

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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Titel

Eingetragen von stBorchert (6003)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo stBorchert danke für

Eingetragen von mike_1985 (76)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

form_alter

Eingetragen von stBorchert (6003)
am 01.05.2010 - 22:22 Uhr
mike_1985 schrieb

Hast du diese Lösung bei dir ausprobiert?

Jup. Funktioniert ohne Probleme (siehe Screenshot #1 und #2).

mike_1985 schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

stBorchert schrieb mike_1985

Eingetragen von mike_1985 (76)
am 04.05.2010 - 15:08 Uhr
stBorchert schrieb
mike_1985 schrieb

Hast du diese Lösung bei dir ausprobiert?

Jup. Funktioniert ohne Probleme (siehe Screenshot #1 und #2).

mike_1985 schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 2 Tagen
  • Hey danke
    vor 2 Wochen 3 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 3 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 1 Tag
  • Da scheint die Terminologie
    vor 3 Wochen 1 Tag
  • Kannst doch auch alles direkt
    vor 3 Wochen 5 Tagen
  • In der entsprechenden View
    vor 3 Wochen 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 5 Tagen
  • gelöst
    vor 6 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20454

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 32 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association