Skip to Content

Das Menü-System

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:

/**
* 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()));
}
Jetzt sollte im User-Menü der Menüpunkt erscheinen und die Callback-Funktion 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

payday loans

mcnwosrq payday loans KiNRF payday loans 2916 cash advance PGwYqo cash advance ufZaRy

cash advance

viagra kaufen

mnlbmsud viagra kaufen 8640 compra cialis KdXmI cialis kaufen >:-[ viagra 7590 viagra :-O cialis NhKRH