Den Hook hook_menu() als reines Menü-System zu bezeichnen trifft es nicht genau. Das hook_menu() ist einiges mehr. Jedes Script braucht einen Punkt über den es aufgerufen werden kann. Dies wird über das hook_menu() erreicht. Zudem wird hier auch festgelegt welche Funktion, im eigenen Script, die Antwort auf einen Request der Seite zurückgibt. Weiter können die Berechtigungen festgelegt werden, die es erlauben bestimmte Funktionen bzw. Menüpunkte aufzurufen. Dabei ist jeder Menüpunkt ein eigenes Array. Das Array besteht aus folgenden Komonenten:
- path
- Der Pfad über den der Punkt zu erreichen ist. Pflichtangabe
- title
- Der übersetzte Titel im Menü. Pflichtangabe
- callback
- Die Funktion die aufgerufen wird, wenn der User den Menüpunkt aufruft.
- callback arguments
- An array of arguments to pass to the callback function.
- access
- Ein Boolean-Wert der angibt ob der Menüpunkt angezeigt werden soll. Gibt eine Entscheidung an user_access(). If omitted and "callback" is also absent, the access rights of the parent menu item will be used instead.
- weight
- Ist ein Integerwert der bestimmt an welcher Stelle im Menü der Punkt erscheint (Wertebereich -10 bis 10; Default 0. Wenn hier keine Angabe gemacht wurde, wird alphabetisch sortiert.
- type
- Gibt an in welchem Menü der Punkt erscheinen soll. A bitmask of flags describing properties of the menu item. Many shortcut bitmasks are provided as constants in menu.inc:
- MENU_NORMAL_ITEM
- Anzeige im normalen Menü-Baum. Die Position kann vom Administrator verändert werden.
- MENU_ITEM_GROUPING
- Item groupings are used for pages like "node/add" that simply list subpages to visit.
- MENU_CALLBACK
- Callbacks simply register a path so that the correct function is fired when the URL is accessed.
- MENU_DYNAMIC_ITEM
- Dynamic menu items change frequently, and so should not be stored in the database for administrative customization.
- MENU_SUGGESTED_ITEM
- Modules may "suggest" menu items that the administrator may enable.
- MENU_LOCAL_TASK
- Erzeugt einen lokalen Tab.
- MENU_DEFAULT_LOCAL_TASK
- Alle Seiten mit Tab's benötigen einen "default" Tab. Dieser wird immer zu Anfang aufgrufen.
Fehlt der "type", wird MENU_NORMAL_ITEM angenommen.
Jetzt aber ein wenig Code:
/** Jetzt sollte im User-Menü der Menüpunkt erscheinen und die Callback-Funktion
* Einhängen in das Menue
*/
function ersterinhalt_menu($may_chache)
{
$items = array();
if(!$may_chache)
{
$items[] =
array(
'path' => 'ersterinhalt',
'title' => t('Erster Inhalt'),
'callback' => 'ersterinhalt_seiteninhalt',
'callback arguments' => array(''),
'access' => TRUE,
// user_access('anonymous user'),
'type' => MENU_NORMAL_ITEM );
}
return $items;
}
/**
* Die Callback-Funktion
*/
function ersterinhalt_seiteninhalt()
{
return t('Hallo Mein erster Seiteninhalt. '.date('d.m.Y H:i:s', mktime()));
}
ersterinhalt_seiteninhalt() sollte einen Inhalt rausgeben.

Über das Administrationsmenü kann der Punkt dann gesondert verschoben werden, so das er an der richtigen Stelle erscheint:

Dabei werden die Informationen in der Datenbank gespeichert und beim nächsten Aufruf wieder ausgelesen. Es ist gut zu wissen wie die internen Abläufe zum Menü-Aufbau sind, daher eine kleine Übersicht:
Damit ist auch klar das MENU_DYNAMIC_ITEM nicht in der Datenbank gespeichert werden können. Diese Funktion ist wichtig, wenn Menüs aus eigenen Datenbeständen erstellt werden sollen - z. B. Produktkatalogen. Ferner ist es möglich für Menüpunkte Unterpunkte zu definieren. Dazu wird in der Funktion hook_menu(), in unserem Beispiel function erster_inhalt() ein weiterer Menüpunkt definiert. function ersterinhalt_menu($may_chache)
{
$items = array();
if(!$may_chache)
{
$items[] = array
(
'path' => 'ersterinhalt',
'title' => t('Erster Inhalt'),
'callback' => 'ersterinhalt_seiteninhalt',
'callback arguments' => array(''),
'access' => TRUE,
'type' => MENU_NORMAL_ITEM,
);
// Hier wird der erste Unterpunkt definiert
$items[] = array
(
'path' => 'ersterinhalt/upunkt',
'title' => t('Erster Unterpunkt'),
'callback' => 'ersterinhalt_ersterupunktinhalt',
'callback arguments' => array(''),
'access' => TRUE,
'type' => MENU_NORMAL_ITEM
);
}
return $items;
}
/**
* Die Callback-Funktion des ersten Seiteninhaltes
*/
function ersterinhalt_seiteninhalt()
{ return t('Hallo
Mein erster Seiteninhalt.
'.date('d.m.Y H:i:s', mktime()));
}
/**
* Die Callback-Funktion für den ersten Unterpunkt
*/
function ersterinhalt_ersterupunktinhalt()
{
return t('Hallo
Mein erster Seiteninhalt im Unterpunkt.
'.date('d.m.Y H:i:s', mktime()));
}
Sollte das Menü über die Administrationsoberfläche geändert worden sein, werden die neuen Werte in der Datenbank (Tabelle menu) gespeichert. Werden dann Änderungen im Code gemacht, die die Sichtbarkeit oder Bezeichnung beeinflussen, kann es passieren das diese nicht korrekt umgesetzt werden. Hier einfach ein Update der Struktur durchführen (Verwalten -> Strukturieren -> Modul => Link update.php oder ./update.php). Drupal überprüft dann alle Module auf Änderungen und trägt diese neu in die Datenbank ein.
Kommentare
viagra
bbpiauu viagra >:-[ viagra 8983 cialis vnWAUo cialis 8]]]
bad credit payday loan
adjgoo bad credit payday loan >:]] payday loan >:]] payday loan kdDhc
payday loans
mcnwosrq payday loans KiNRF payday loans 2916 cash advance PGwYqo cash advance ufZaRy
cash advance
xxyjlfn cash advance :-O payday loans uDJRPV instant cash advance %-[[[ payday loans UK >:-[
viagra kaufen
mnlbmsud viagra kaufen 8640 compra cialis KdXmI cialis kaufen >:-[ viagra 7590 viagra :-O cialis NhKRH