Gdy ląduję na stronie, która ma element menu będący rodzicem elementów menu innych stron, chciałbym móc wyświetlić listę tych elementów menu potomnego. Korzystam z następującego kodu.
$trail = menu_get_active_trail();
menu_build_tree('main-menu', array(
'expanded' => array($trail[1]['mlid'])
));
Jednak zwrócona tablica wygląda tak (z dużą ilością niepotrzebnych usuniętych).
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)
Zauważ, że 314, 315 i 316 są „poniżej” 312? Są rodzeństwem w mojej strukturze menu i wydaje się, że jest to weryfikowane przez każdego o tej samej wartości plid
(311). Oczywiście mogę to naprawić, przekazując tablicę przez inną funkcję, ale nie mogę nie myśleć, że po prostu czegoś brakuje.
$tree = menu_build_tree('main-menu', array( 'expanded' => array($trail[1]['mlid']) ));
drupal_render(menu_tree_output($tree))
Następnie za pomocą CSS mogę stylizować linki, aby usunąćul
dopełnienie, dzięki czemu wyglądają na wszystkie na tym samym poziomie. Nie idealny, ale skuteczny. EDYCJA: przepraszam, nie mogę wymyślić, jak uzyskać podział linii do pracy.get_sub_menu_based_on_active_page()
i wszystko gotowe. Musiałem przejść od próby znalezienia problemu z zagnieżdżaniem, ponieważ css sprawia, że użytkownik nie jest mądrzejszy.Odpowiedzi:
Chciałem tylko kontynuować. Wróciłem do tego pytania i znalazłem: /programming/2716787/how-to-get-all-the-menu-items-below-a-certain-parent-in-drupal, który jest dokładnie to, czego potrzebowałem.
Kod skopiowany z wyżej wspomnianego linku i zmodyfikowany w celu dostosowania do moich potrzeb (głównie w celu użycia bieżącej ścieżki do zbudowania drzewa menu, zamiast używania zakodowanej wartości:
źródło
current_path()
zamiast$_GET['q']
.$_GET['q']
zwróci alias ścieżki, gdziecurrent_path()
otrzyma węzeł / id.Można to łatwo zrobić za pomocą modułu bloku menu (konfiguracja zajmuje około 5 minut).
Wszystko co musisz zrobić to
admin/structure/block
Ustaw „Poziom początkowy” na „2 poziom (wtórny)” i ustaw region, w którym powinien być wyświetlany w „Określ, w których tematach i regionach ma być wyświetlany ten blok”.
Zrzuty ekranu:
Tak wygląda strona konfiguracji
strona admin / structure / block z włączonymi blokami modułów bloku menu
Wygenerowałem część „Podstawowej strony” za pomocą modułu Devel i podałem kilka linków do nich oraz stworzyłem zagnieżdżoną hierarchię menu
To jest drugie menu, z niektórymi elementami potomnymi, możesz już zobaczyć „Menu główne - 2. poziom” na lewym pasku bocznym, ale widoczne są tylko elementy potomne 2. poziomu
Teraz idzie głębiej:
Myślę, że użycie modułu Blok menu do tego zadania jest jednym z najłatwiejszych i najszybszych rozwiązań.
źródło
Jak zauważono w komentarzach, skończyło się na użyciu funkcji API, a następnie stylizacji za pomocą CSS:
źródło
Ta funkcja działa poprawnie, aby uzyskać podmenu bieżącej strony:
Mam nadzieję, że to pomoże!
źródło
@Chris Rockwell i @ Mario Awad
Jestem początkującym w Drupal, więc trudno mi zrozumieć, gdzie dodać tę funkcję. Przepraszam za to. Ale czy moglibyście wspomnieć, że w jakim pliku powinniśmy dodać tę funkcję?
Próbuję utworzyć nawigację na pasku bocznym, która wyświetli tylko elementy potomne na każdej stronie. Jak utworzyć menu nawigacyjne na pasku bocznym z różnymi linkami nawigacyjnymi wyświetlanymi na różnych stronach?
Doceniam!
Dzięki!
źródło
Właśnie skończyłem publikować funkcję, która pobiera elementy menu potomnego na podstawie ścieżki węzła. Możesz to sprawdzić tutaj: http://softkube.com/blog/getting-child-menu-items-drupal-menu-tree
Podaję link do przyszłego potwierdzenia odpowiedzi na wypadek, gdyby post został zaktualizowany, a także skopiuję / wkleję pełny kod na końcu.
W twoim przypadku możesz po prostu uruchomić coś takiego w swoim motywie, aby wyświetlić listę wszystkich elementów menu podrzędnego. Zmodyfikuj
echo
zestawienie i motyw według własnych upodobań.A oto pełny kod funkcji. Sprawdź link pod kątem możliwych przyszłych aktualizacji.
Powodzenia.
źródło
$parameters
wmenu_build_tree
?$parameters
czego korzystałem, i wierz mi, że wyglądałem dużo. Chciałem tylko, podając ścieżkę, uzyskać wszystkie elementy menu podrzędnego na wszystkich poziomach i po prostu nie mogłem znaleźć drogi. Jeśli jest taka, proszę o informację, chętnie poznam i zaktualizuję swoją odpowiedź i post na blogu. Twoje zdrowie.