Un problema que me he encontrado al desarrollar una web en drupal, es que si yo creo mis menus principales con hijos dentro, donde me muestra drupal estos submenus?
Caso:
Menu 1
- Submenu 1
- Submenu 2
- Submenu 3
Menu 2
Menu 3
La idea era hacer click al menú padre que se encuentra en el header y poder mostrar los submenus al lateral izquierdo de la pagina.
Para poder mostrar los submenus modifiqué los siguientes archivos del theme.
Abrimos el fichero template.php de nuestro theme y creamos esta función:
-
function nombre_theme_menu_navigation_tree($menu_name, $level = 0) {
-
// Controlamos que exista el menu.
-
}
-
-
// Buscamos la herencia del menu.
-
$tree = menu_tree_page_data($menu_name);
-
-
// Comprobamos el nivel de profundidad del menú.
-
while ($level--> 0 && $tree) {
-
// Recorremos el array para comprobar item por item del menu,
-
if ($item['link']['in_active_trail']) {
-
// Si el item del menu esta activo buscamos sus submenus.
-
break;
-
}
-
}
-
}
-
return $tree;
-
}
Dentro del mismo fichero template.php vamos a modificar la función preprocess_page, o en caso de no existir, la creamos. Esta función nos permite insertar mas variables que usaremos en el fichero page.tpl antes de que este se cargue.
-
function nombre_theme_preprocess_page(&$vars, $hook) {
-
// Insertamos dentro del array vars nuestro item de submenus. Este array contiene todas las variables que se usan en el template.
-
// Para buscar el nombre del menu, hacemos uso de la función variable_get
-
// El 1 equivale al nivel 1, pero podriamos pasar x niveles de menu.
-
$vars['mitheme_submenus'] = nombre_theme_menu_navigation_tree(variable_get('menu_primary_links_source', 'primary-links'), 1);
-
}
Para finalizar y ver el resultado, insertamos la variable $mitheme_submenus dentro de page.tpl.php:
-
// Usamos la función <a title="menu_tree drupal" href="http://api.drupal.org/api/function/menu_tree_output/6" target="_self">menu_tree_output</a> para renderizar el listado de submenus
Para realizar mi theme he usado el theme zen y recomiendo que antes de empezar a realizar un theme desde 0 se tenga en cuenta estos themes de desarrollo ya que nos ahorrará mucho tiempo y problemas en el desarrollo.
Y como siempre en todo desarrollo, leer la documentación oficial




Drupal developer








Gracias por tu aportación.
No tengo mucho conocimiento en Drupal y no entiendo donde se dice que lo pinte en la parte izquierda.
En el template.php me sale el siguiente error:
Parse error: syntax error, unexpected ‘;’
en esta linea
while ($level–> 0 && $tree) {
Buenas Reggie,
El tip es para poder mostrar submenus de los menus principales. Osea mostrar los submenús de los primary links.
Si no tienes mucho conocimiento de drupal, antes de comenzar com esto, deberias mirar un poco la documentación de la estructura de drupal, por que si no te puedes liar un poco.
El error que me comentas, tiene pinta que te has dejado un ‘;’ en la linea anterior a esta.
Un saludo!
Lo que no entiendo es en que parte del page.tpl poner el print para que pinte los submenús en la parte derecha del tema.
Gracias.
Tienes que buscar si exsite alguna función que termine con ‘_preprocess_page’ Si no existe ninguna, la creas.
hola,
Cómo puedo hacer para que mi pagina muestre una lista de 10 submenus? Con Drupal solo puedo hacer el drop down menu de hasta un maximo de 9 subitems.
desde ya muchas gracias por la respuesta
Hola Nora!
Es raro lo que me comentas. Drupal no pone ningún tope para mostrar submenús, a no ser que estés usando secondary links para esto(he leido que puede darse el caso en los secondary links)
Si este no es tu caso, usas una vista? Usas un bloque? Como estas montando los menus? Dentro de un primarly link?
Un saludo.
Muchas gracias por el código, lo he probado y me funciona, pero me sale el submenú dentro de los secundary links cuando preciono el elemento padre y no cuando le paso por arriba, hay alguna forma de mostrarlo de esta forma? o sea que aparezca el submenú cuando me paro sobre el elemento de menú que lo contiene ?
Muchas gracias de antemano
Buenos dias Dania,
Podrias probar de hacer lo que comentas con jquery y la función hover: http://api.jquery.com/hover/
Si lo ves dificil, podrias probar de instalar el modulo jquery menu y asignarle a este submenú la funcionalidad que dices: http://drupal.org/project/jquerymenu
Espero haberte ayudado.