Menü dynamisch erweitern
Eingetragen von benny1979 (119)
am 17.11.2009 - 23:46 Uhr in
am 17.11.2009 - 23:46 Uhr in
Hallo,
ist es möglich, unterhalb eines speziellen Hauptmenüpunkts dynamisch Untermenüpunkte aus einer externen Quelle einzufügen (hook_menu?)? Und falls ja, kann das Zugriffsrechte-System dann den Zugriff auf diese in der Drupal-Datenbank nicht existenten Menüpunkte beschränken?
VG,
Benny
- Anmelden oder Registrieren um Kommentare zu schreiben
benny1979 schrieb ...
am 18.11.2009 - 10:55 Uhr
... dynamisch Untermenüpunkte aus einer externen Quelle einzufügen (hook_menu?)?
Sobald man PHP einsetzt (also insbesondere auch Drupal), sollte man das Wort dynamisch aus seinem Vokabular streichen. PHP erzeugt dynamisch HTML-Seiten. Etwas in Zusammenhang mit PHP als dynamisch zu bezeichnen erhöht also nicht den Informationsgehalt der Aussage.
Am einfachsten wäre wohl der Weg über
hook_menu
. Als Page Callback kannst dudrupal_goto
nehmen und die Ziel-URL übergibst du in den Page Arguments. Dann steht dir auch die komplette Bandbreite an Zugriffskontrolle zur Verfügung.Die Datenbanktabellen für das Menü werden selten neu befüllt, du müsstest also in periodischen Abständen ein Neubau der Tabellen anstoßen:
hook_cron
,menu_rebuild
.Schau dir auch
menu_link_save
an: da du inhook_menu
nicht nur einen Callback anlegst, sondern ihn auch im Navigationsmenu abbilden willst, musst du dieplid
der übergeordneten Seite angeben. Ich weiß nicht ob du das direkt inhook_menu
machen kannst, oder ob du dazuhook_menu_link_alter
implementieren musst.--
Hook_menu für eigene module
am 26.11.2009 - 19:02 Uhr
Hallo Leute,
hab gerade diesen hilfreichen Thred gefunden, da ich selber fast genau das gleiche Problem habe. Natürlich bin ich auch ein Drupal Neuling und überwältigt wie geil das eigentlich ist. Lobpreisungen werden verkürzt durch das Wort an sich dargestellt.
Zu meinem Beitrag: Also ich habe es jetzt geschafft einene Menü Punkt über Hook_menu einzuspeisen. Der Link wird dann über eine Callback Funktion aufgerufen und dann via drupal_goto() ausgeführt. Funktioniert alles perfekt! Danke für den Tipp an dieser Stelle. Nun zu meinem Problem. Wenn ich nun das Menü Unterpunkt Navigation aufrufe führt dies zu einer Fehlermeldung die zweifelsfrei auf meinen Menüpunkt zurück zu führen ist.
Fatal error: Unsupported operand types in /home/website/public_html/includes/common.inc on line 1573
Habe meinen Menü Punkt mal aus der Db gelöscht und es ging wieder. Konnte den Fehler eingrenzen und denke das es an dem plid Eintrag liegen könnte. Der ist nämlich 0 in der DB. Jetzt kommt meine Frage ist für genau diesen Fehler hook_menu_link_alter() zuständig? Diesen Hook habe ich nämlich gar nicht benutzt bisher, da ich dachte das dies alles "automatisch" über hook_menu ausgeführt wird.
Ich habe schon ein wenig rumgesucht nur leider nicht wirklich eine befriedigende Antwort für mich erfunden, die mir das Verständnis für das Problem vor Augen führt. So eine Antwort wie von traxer wäre super! Klar deutlich und verständlich. Für Newbees halt...
Danke schonmal
Zitat:Jetzt kommt meine
am 27.11.2009 - 11:39 Uhr
Jetzt kommt meine Frage ist für genau diesen Fehler hook_menu_link_alter() zuständig?
Nö, wie sollte er auch wenn du diesen in deinem Modul nicht implementiert hast?
da ich dachte das dies alles "automatisch" über hook_menu ausgeführt wird
wird es auch. Wenn es zu einem Fehler kommt, dann hast du in deinem Modul etwas falsch programmiert. Zeig doch mal deinen Code. Eventuell findet jemand den Fehler.
Danke stebeg für deine
am 27.11.2009 - 13:13 Uhr
Danke stebeg für deine schnelle Antwort. Ich hab den Code mal angehangen evt. fällt euch ja auf wo ich einen Fehler gemacht habe.
<?php
function user_tracker_menu() {
$items['Tracker'] = array(
'title' => 'User Tracker',
'description' => 'User Login Link zum persönlichen Website Tracker',
'page callback' => 'user_tracker_login_link',
'access callback' => 'user_access',
'access arguments' => array('access tracker login link'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function user_tracker_login_link(){
global $user, $base_url;
drupal_goto($base_url.'/sites/all/modules/contrib/user_tracker/tracker/index.php', 'module=Login&action=logme&login='.$user->name.'&password='.$user->pass, $fragment = NULL, $http_response_code = 302);
}
?>
gelöst
am 02.12.2009 - 01:41 Uhr
Das Problem ist ganz einfach! Ich bin durch Zufall darauf gestoßen. Es ist das ö !!! Das hat das Modul am arbeiten gestört!