Wenn ich auf einer Seite lande, deren Menüelement anderen Menüelementen übergeordnet ist, möchte ich eine Liste dieser untergeordneten Menüelemente anzeigen können. Ich verwende den folgenden Code.
$trail = menu_get_active_trail();
menu_build_tree('main-menu', array(
'expanded' => array($trail[1]['mlid'])
));
Das zurückgegebene Array sieht jedoch so aus (wobei viele unnötige entfernt werden).
array
'49950 PKY Truck Beauty 312' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '312' (length=3)
'plid' => string '311' (length=3)
'below' =>
array
'49952 Seminars 314' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '314' (length=3)
'plid' => string '311' (length=3)
'50000 HDMA Breakfast 316' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '316' (length=3)
'plid' => string '311' (length=3)
'50000 MATS Concert 315' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '315' (length=3)
'plid' => string '311' (length=3)
Beachten Sie, wie 314, 315 und 316 unter 312 liegen. Sie sind Geschwister in meiner Menüstruktur, und das scheint von jedem überprüft zu werden, der den gleichen Wert für plid
(311) hat. Natürlich kann ich das beheben, indem ich das Array durch eine andere Funktion leite, aber ich kann nicht anders, als zu glauben, dass mir nur etwas fehlt.
$tree = menu_build_tree('main-menu', array( 'expanded' => array($trail[1]['mlid']) ));
drupal_render(menu_tree_output($tree))
Dann kann ich mithilfe von CSS die Links so gestalten, dass dieul
Auffüllung entfernt wird, sodass sie alle auf derselben Ebene liegen. Nicht ideal, aber effektiv. EDIT: Entschuldigung, ich kann nicht herausfinden, wie Zeilenumbrüche funktionieren.get_sub_menu_based_on_active_page()
ich von überall an und bin fertig. Ich musste nicht mehr versuchen, das Verschachtelungsproblem herauszufinden, da CSS den Benutzer nicht klüger macht.Antworten:
Ich wollte nur nachfassen. Ich kam auf diese Frage zurück und fanden die folgende: /programming/2716787/how-to-get-all-the-menu-items-below-a-certain-parent-in-drupal das ist genau das, was ich brauchte.
Der Code, der über den oben genannten Link kopiert und an meine Anforderungen angepasst wurde (hauptsächlich, um den aktuellen Pfad zum Erstellen des Menübaums zu verwenden, anstatt einen fest codierten Wert zu verwenden:
quelle
current_path()
anstelle von verwenden$_GET['q']
.$_GET['q']
gibt den Pfadalias zurück, wobeicurrent_path()
Knoten / ID abgerufen wird.Die Verwendung des Menüblockmoduls ist problemlos möglich (die Konfiguration dauert ca. 5 Minuten).
Alles was du tun musst, ist
admin/structure/block
Stellen Sie "Startebene " auf "2. Ebene (Sekundär)" und legen Sie die Region fest, in der sie angezeigt werden soll, unter "Geben Sie an, in welchen Themen und Regionen dieser Block angezeigt wird".
Screenshots:
So sieht die Konfigurationsseite aus
Admin / Struktur / Block Seite mit den aktivierten Menüblock Modulblöcken
Ich habe mit dem Devel-Modul einige Inhalte der "Basisseite" generiert, einige Menüverknüpfungen zu diesen bereitgestellt und eine verschachtelte Menühierarchie erstellt
Dies ist das zweite Menü, mit einigen untergeordneten Elementen können Sie bereits das "Hauptmenü - 2. Ebene" in der linken Seitenleiste sehen, aber nur die untergeordneten Elemente der 2. Ebene werden angezeigt
Jetzt tiefer gehen:
Ich denke, dass die Verwendung des Menüblockmoduls für diese Aufgabe eine der einfachsten und schnellsten Lösungen ist.
quelle
Wie in den Kommentaren erwähnt, habe ich schließlich die API-Funktion verwendet und dann mit CSS gestylt:
quelle
Diese Funktion funktioniert ordnungsgemäß, um das Untermenü der aktuellen Seite aufzurufen:
Ich hoffe das hilft!
quelle
@ Chris Rockwell und @ Mario Awad
Ich bin ein Neuling in Drupal, daher ist es für mich schwer zu verstehen, wo ich diese Funktion hinzufügen soll. Ich entschuldige mich dafür. Aber könnt ihr bitte erwähnen, dass wir in welcher Datei diese Funktion hinzufügen sollen?
Ich versuche, eine Seitenleisten-Navigation zu erstellen, die nur untergeordnete Elemente auf jeder Seite anzeigt. Wie erstelle ich ein Navigationsmenü in der Seitenleiste mit verschiedenen Navigationslinks, die auf verschiedenen Seiten angezeigt werden?
Ich schätze!
Vielen Dank!
quelle
Ich habe gerade eine Funktion veröffentlicht, die untergeordnete Menüelemente mit dem Pfad eines Knotens abruft. Sie können es hier überprüfen: http://softkube.com/blog/getting-child-menu-items-drupal-menu-tree
Ich füge den Link zur Zukunftssicherung der Antwort hinzu, falls der Beitrag aktualisiert wird, und ich werde am Ende auch den vollständigen Code kopieren / einfügen.
In Ihrem Fall können Sie einfach so etwas in Ihrem Thema ausführen, um alle untergeordneten Menüelemente aufzulisten. Ändern Sie die
echo
Aussage und das Thema nach Ihren Wünschen.Und hier ist der vollständige Code der Funktion. Überprüfen Sie den Link auf mögliche zukünftige Updates.
Viel Glück.
quelle
$parameters
inmenu_build_tree
vorgezogen haben?$parameters
ich benutzte, und glauben Sie mir, ich sah viel aus. Ich wollte nur einen Pfad erhalten, alle untergeordneten Menüpunkte auf allen Ebenen abrufen, und ich konnte einfach keinen Weg finden. Wenn es eine gibt, informiere mich bitte. Ich werde froh sein, meine Antwort und meinen Blog-Beitrag zu erfahren und zu aktualisieren. Prost.