Menü mit Node-Daten / Bilder-Menü
Eingetragen von c (79)
am 27.03.2011 - 14:54 Uhr in
am 27.03.2011 - 14:54 Uhr in
Hallo,
ich möchte ein Menü ausgeben und dabei in den einzelnen Links Daten aus dem Node-Objekt des jeweils verlinkten Nodes verwenden. Also, konkret: Jeder Node vom Typ „Page“ hat bei mir ein Image Field. Dieses Bild soll im Menü als Thumbnail ausgegeben werden.
Es ginge natürlich über Views, aber dann könnte ich wohl nicht mit der Menü-Struktur arbeiten und müsste für jedes neue Submenü eine eigene neue View anlegen.
Würde mich über alle Hinweise freuen.
Danke
- Anmelden oder Registrieren um Kommentare zu schreiben
Du kannst dies mithilfe der
am 27.03.2011 - 19:26 Uhr
Du kannst dies mithilfe der Theming Funktionen von Drupal realisieren:
Dazu überschreibst du in deinem Theme die Funktion theme_menu_item -> {deintheme}_menu_item und liest dir die entsprechenden Daten des Nodes über menu_get_object aus. Ist etwas Frickelei - funktioniert aber...
Über einen View könntest du das aber auch realisieren - die "Untermenus" könntest du dann über ein Views Argument "ansprechen" bzw. anzeigen lassen.
SteffenR
Cool, danke schon mal für die
am 28.03.2011 - 14:18 Uhr
Cool, danke schon mal für die Hinweise. Werde es erst mal mit den Theme-Funktionen versuchen.
Danke für den Hinweise, aber
am 28.03.2011 - 16:29 Uhr
Danke für den Hinweise, aber ja, tatsächlich etwas Frickelei.
Wie komme ich innerhalb der theme_menu_item() an die nid des jeweiligen verlinkten Link-Items? menu_get_object() braucht wohl selbst die Node-ID, um die jeweiligen Daten rauszugeben (ohne Übergabe eines konkreten Pfades geht er einfach vom aktiven aus). Die Doku erhellt mich da leider nicht.
Also, konkret - Das hier:
$node = menu_get_object();
$node->field_image[0]['imagepath'];
... wirft mir im Menü in jedem Link-Item das gleiche Bild aus – aber auch nur das des jeweils aktiven/geöffneten Nodes.
Und wie kann ich innerhalb der theme_menu_item()-Funktion den Link verändern? Ich möcte das Bild ja im A-Tag einfügen und nicht davor oder danach. Es gibt die Variable $link, die den fertigen Link auswirft. Diese Variable kann ich zwar anscheinend per theme_menu_item_link() anpassen, aber da komme ich dann ja eher noch weniger an die Daten des verlinkten Nodes.
Noch mal kurz
am 28.03.2011 - 16:37 Uhr
Noch mal kurz mein Ziel: Ich möchte einfach in jedem Menü-Item (innerhalb der A-Tags) ein paar Node-Daten (des jeweils verlinkten Nodes) mit ausgeben. Es würde ja schon reichen die Node ID zu bekommen (um das Node-Objekt dann per node_load() zu laden).
Genau dies tut die Funktion
am 28.03.2011 - 16:51 Uhr
Genau dies tut die Funktion menu_get_object() menu_get_object() will provide you the current node on path - lass dir mal den Inhalt des $noce Objekts über devel ausgeben - dann kannst du dir die Felder einfacher durchschauen.
SteffenR
Stehe ich gerade auf dem
am 28.03.2011 - 21:30 Uhr
Stehe ich gerade auf dem Schlauch? menu_get_object() gibt bei mir, wie in der Doku auch steht, (ohne Argument) den current Node aus. Also den aktuell aktiven/geöffneten. In einem Menü mit vier Links wird da vier mal das gleiche (aktive) Node-Objekt geladen.
Hier mein Code (vereinfacht):
function meintheme_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
$node = menu_get_object();
return '<a href="'.$node->path.'">' . $node->title . '</a>';
}
Resultat:
<a href="pfad/zum/aktiven/node/beispiel/42">Titel von Node 42</a>
<a href="pfad/zum/aktiven/node/beispiel/42">Titel von Node 42</a>
<a href="pfad/zum/aktiven/node/beispiel/42">Titel von Node 42</a>
<a href="pfad/zum/aktiven/node/beispiel/42">Titel von Node 42</a>
So sieht das Submenü dann auf Seite 42 aus. Es wird also nicht Link für Link das jeweils verlinkte Node-Objekt geladen, sondern immer nur das aktive, also das der Seite, auf der man sich gerade befindet.
Über das 3. Argument kann man die menu_get_object()-Funktion wohl ein anderes Node-Objekt laden lassen, aber da beißt sich die Katze in den Schwanz: Dazu muss man die Node ID des jeweils verlinkten Nodes übergeben (bzw. den Pfad). Aber woher bekomme ich ID oder Pfad?
Lösung gefunden und hier mal
am 30.03.2011 - 12:19 Uhr
Lösung gefunden und hier mal für die Nachwelt festgehalten:
function theme_menu_item_link($link) {
$node = menu_get_object('node', 1, $link['href']);
return theme('imagecache', 'preset_name', $node->field_image[0]['filepath'], '', '', null);
}
In der theme_menu_item()-Funktion bin ich nicht weiter gekommen, aber über theme_menu_item_link() kann man auf die Einzelteile des Links zugreifen. So kann dann der menu_get_object()-Funktion der Pfad übergeben werden und zurück bekomme ich das Node-Objekt. In diesem Fall greife ich auf ein Image-Feld zu, das ich per Imagecache ausgebe.