Al aterrizar en una página que tiene un elemento de menú que es un elemento primario de los elementos de menú de otras páginas, me gustaría poder mostrar una lista de esos elementos de menú secundarios. Estoy usando el siguiente código.
$trail = menu_get_active_trail();
menu_build_tree('main-menu', array(
'expanded' => array($trail[1]['mlid'])
));
Sin embargo, la matriz devuelta se ve así (con una gran cantidad de innecesarios eliminados).
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)
Observe cómo 314, 315 y 316 están 'por debajo' de 312? Son hermanos en la estructura de mi menú, y eso parece ser verificado por cada uno que tiene el mismo valor para plid
(311). Obviamente, puedo solucionar esto pasando la matriz a través de otra función, pero no puedo evitar pensar que solo me falta algo.
$tree = menu_build_tree('main-menu', array( 'expanded' => array($trail[1]['mlid']) ));
drupal_render(menu_tree_output($tree))
Luego, usando CSS, puedo diseñar los enlaces para eliminar elul
relleno, haciendo que parezca que están todos en el mismo nivel. No es ideal, pero efectivo. EDITAR: lo siento, no puedo entender cómo hacer que los saltos de línea funcionen.get_sub_menu_based_on_active_page()
y estoy listo. Tuve que pasar de tratar de resolver el problema de anidación ya que css hace que el usuario no sea más sabio.Respuestas:
Solo quería hacer un seguimiento. Volví a esta pregunta y encontré lo siguiente: /programming/2716787/how-to-get-all-the-menu-items-below-a-certain-parent-in-drupal que es exactamente lo que necesitaba
El código, copiado del enlace mencionado anteriormente y modificado para ajustarse a mis necesidades (principalmente para usar la ruta actual para construir el árbol de menús, en lugar de usar un valor codificado:
fuente
current_path()
lugar de$_GET['q']
.$_GET['q']
devolverá el alias de ruta, dondecurrent_path()
obtendrá nodo / id.Se puede hacer fácilmente usando el módulo de bloque de menú (se tarda unos 5 minutos en configurarlo).
Todo lo que tienes que hacer es
admin/structure/block
Establezca "Nivel inicial" en "2do nivel (Secundario)" y configure la región donde debe mostrarse en "Especifique en qué temas y regiones se muestra este bloque".
Capturas de pantalla
Así es como se ve la página de configuración
admin / estructura / página de bloque con el módulo de bloque de menú activado
Generé algunos contenidos de "Página básica" con el módulo Devel, les proporcioné algunos enlaces de menú y creé una jerarquía de menú anidada
Este es el segundo menú, con algunos elementos secundarios, ya puede ver el "Menú principal - 2do nivel" en la barra lateral izquierda, pero solo se pueden ver los elementos secundarios del 2do nivel
Ahora yendo más profundo:
Creo que usar el módulo de bloque de menú para esta tarea es una de las soluciones más fáciles y rápidas.
fuente
Como se señaló en los comentarios, terminé usando la función API y luego peinando con CSS:
fuente
Esto funciona correctamente para obtener el submenú de la página actual:
¡Espero que esto ayude!
fuente
@ Chris Rockwell y @ Mario Awad
Soy novato en Drupal, así que es difícil de entender para mí dónde agregar esta función. Pido disculpas por eso. Pero, ¿pueden mencionarlo en qué archivo, debemos agregar esta función?
Estoy tratando de crear una barra de navegación lateral que muestre solo elementos secundarios en cada página. ¿Cómo crear un menú de navegación en la barra lateral con diferentes enlaces de navegación que se muestran en diferentes páginas?
¡Yo aprecio!
¡Gracias!
fuente
Acabo de terminar de publicar una función que obtiene elementos del menú secundario dada la ruta de un nodo. Puede verificarlo aquí: http://softkube.com/blog/getting-child-menu-items-drupal-menu-tree
Incluyo el enlace a prueba futura de la respuesta en caso de que la publicación se actualice y también copiaré / pegaré el código completo al final.
En su caso, simplemente puede ejecutar algo como esto en su tema para enumerar todos los elementos del menú secundario. Modifique la
echo
declaración y el tema a su gusto.Y aquí está el código completo de la función. Consulte el enlace para posibles actualizaciones futuras.
Buena suerte.
fuente
$parameters
demenu_build_tree
?$parameters
que usé, y créeme, me veía mucho. Todo lo que quería es, dado un camino, obtener todos los elementos del menú secundario en todos los niveles, y simplemente no pude encontrar una manera. Si hay alguno, infórmeme, estaré encantado de aprender y actualizar mi respuesta y publicación de blog. Salud.