He navegado por la web y no es del todo obvio cómo crear menús personalizados. He buscado durante horas y no he encontrado una sola publicación que ilustre el proceso, de principio a fin, de crear un menú y personalizar su salida. Parece que este es un proceso de varias etapas:
- Cree el menú a través de la interfaz de Drupal.
- Cree una función de tema en su
template.php
archivo para crear un tema de salida - Exponga este menú a un archivo de plantilla (de alguna manera) agregándolo como una variable.
- Llame a la
theme
función en el menú en el archivo de plantilla.
1 es bastante fácil de hacer, los problemas que encuentro son con 2, 3 y 4. Al mirar la plantilla de página predeterminada, veo que expone el menú principal en la variable $main_menu
. Más adelante, en la página, puede ver la función theme('links__system_main_menu', array('links' => $main_menu...
, lo que significa que está buscando una función de tema con un nombre apropiado en alguna parte y la está utilizando para generar el resultado.
Sé que si coloco function theme_links__system_main_menu(&$variables) {...}
en mi archivo template.php Drupal utilizará esa función en lugar de function theme_menu_links(&$variables) {...}
.
Lo que no sé es cómo Drupal vincula el menú personalizado que creé con esa función. Digamos, por ejemplo, que creé un menú llamado My Menu
. ¿Podría crear la siguiente función en mi template.php
archivo y tema la salida para ese menú?function theme_links__system_my_menu(&$variables) {...}
Además, ¿cómo se hace que ese menú personalizado esté disponible para un archivo de plantilla? ¿Cómo expone Drupal la $main_menu
variable a page.tpl.php?
Creo que la clave que me falta aquí es cómo incrustar la variable que representa mi menú personalizado en una página de plantilla. En su mayor parte, aunque estoy completamente perdido con qué hacer después de haber creado el menú.
Gracias por la ayuda.
EDITAR: Probablemente debería publicar lo que estoy haciendo. Según mi comentario a BetaRide a continuación, necesito inyectar HTML personalizado en los <li>
elementos de los elementos del menú. Específicamente, estoy agregando íconos de Twitter Bootstrap.
Es posible que desee consultar el módulo de Menús agradables . Aquí hay una cita al respecto (de la página del proyecto del módulo):
fuente
Dependiendo de lo que desee personalizar, su enfoque es muy difícil. Por lo general, creo el menú a través de la interfaz de Drupal como usted sugirió. Luego tomo el módulo de desarrollador de temas y Firebug para descubrir qué plantillas, ganchos y directivas CSS tengo que sobrescribir para ajustarlo a mis necesidades.
Vale la pena considerar crear un subtema del tema base que está utilizando antes de comenzar a ajustar. Esto hace que sea mucho más fácil actualizar su tema base.
fuente
Aquí hay un código inteligente que puede acceder a todos los elementos del menú para cualquier nivel 2 o 3 o más
coloque este código dentro de su archivo tpl, no olvide llamar a las últimas versiones de boostrap js y css:
este código devolverá el menú para las clases de CSS. Puede usar el suyo. Estoy usando Bootstrap con algunos CSS personalizados.
fuente