Tematización avanzada del menú en Drupal 7

Pregunta:

He navegado por la web y no es del todo obvio cómo crear un tema en los 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:

  1. Crea el menú a través de la interfaz de Drupal.
  2. Cree una función de tema en su archivo template.php para cambiar el tema de la salida.
  3. Exponga este menú a un archivo de plantilla (de alguna manera) agregándolo como una variable.
  4. Llame a la función del theme en el menú del archivo de plantilla.

1 es bastante fácil de hacer, los problemas con los que me 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 el theme('links__system_main_menu', array('links' => $main_menu... la función theme('links__system_main_menu', array('links' => $main_menu... , lo que significa que está buscando una función de tema con el nombre apropiado en algún lugar y usándola para generar el resultado.

Sé que si function theme_links__system_main_menu(&$variables) {...} en mi archivo template.php, Drupal usará esa función en contraposición a la function theme_menu_links(&$variables) {...} .

Lo que no sé es cómo vincula Drupal el menú personalizado que creé con esa función. Digamos, por ejemplo, que creé un menú llamado My Menu . ¿Puedo crear la siguiente función en mi archivo template.php y el tema de 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 variable $main_menu 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 lo que 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 elementos <li> elementos del menú. Específicamente, estoy agregando íconos de Twitter Bootstrap.

Respuesta:

La implementación de menús de Drupal es un poco especial, no siempre funciona como debería.

Puede echar un vistazo a la implementación central de template_preprocess_page () para ver cómo se agregan los enlaces del menú principal como una variable a la plantilla de página. Debe profundizar un poco en los documentos de la API, pero la función que desea llamar en su implementación de theme_preprocess_page () es menu_navigation_links () , que devolverá una matriz de enlaces en el menú.

Si observa la línea 106 del archivo page.tpl.php del núcleo de Drupal , puede ver cómo los enlaces del menú principal están temáticos en la plantilla llamando a la función theme ( ) con un gancho de 'links__system_main_menu'.

En teoría, esta implementación debería poder duplicarse con un menú personalizado siguiendo las convenciones de nomenclatura estándar. Entonces, en template.php, podrías tener:

function THEMENAME_preprocess_page(&$variables){
  $variables['custom_menu'] = menu_navigation_links('menu-custom-menu');
}

function THEMENAME_links__menu_custom_menu(&$variables){
 //custom theme function here
}

y en page.tpl.php, agregaría algo como esto:

<?php print theme('links__menu_custom_menu', array('links' => $custom_menu, 'attributes' => array('id' => 'custom-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Custom menu'))); ?>

Sin embargo, no es necesario agregar el menú personalizado como una variable en su plantilla de página. Puede colocar fácilmente el bloque del menú personalizado en la región deseada a través de la interfaz de administración de Drupal. Además, puede cambiar la configuración del sitio para la fuente del Menú principal , reemplazando efectivamente la variable predeterminada $ main_menu en page.tpl.php con su menú personalizado.

EDITAR: Acabo de ver su adición acerca de que su objetivo final es simplemente agregar algunos html personalizados a los elementos del menú para los íconos. Dependiendo de cómo agregue estos íconos, hay un par de opciones de módulo de Drupal diferentes.

Iconos de menú : le permite cargar una imagen a través de la configuración del elemento del menú y genera automáticamente CSS (personalizable mediante una plantilla) que agrega la imagen como fondo en el elemento del menú.

Atributos del menú : le permite agregar una clase personalizada a cada elemento del menú a través de su configuración en el administrador. Una vez que se agrega una clase única a cada elemento del menú, puede usar CSS para agregar un icono al elemento del menú o usar javascript para inyectar el HTML adicional en el elemento del menú.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım