2011-03-04 21 views
17

Estoy tratando de modificar el resultado HTML en un tema de Drupal 7 que estoy creando.Drupal 7: ¿Modificar la salida HTML del menú?

Básicamente, en lugar de < li> s que contiene simplemente < a> s con texto, quiero incluir algo de HTML adicional dentro del < a>.

Sé que es posible modificar el HTML creado por los menús en Drupal. Puedo ver la siguiente llamada en page.tpl.php:

<?php print theme('links__system_main_menu', array(
     'links' => $main_menu, 
     'attributes' => array(
     'id' => 'main-menu', 
     'class' => array('links', 'clearfix'), 
    ), 
     'heading' => array(
     'text' => t(''), 
     'level' => 'h2', 
     'class' => array('element-invisible'), 
    ), 
    )); ?> 

que aparentemente llama a la función de tema, que crea la salida. Una forma de modificar el resultado sería modificar la función theme_links en theme.inc, ¿verdad?

http://api.drupal.org/api/drupal/includes--theme.inc/function/theme_links

también sé que usted puede poner un gancho en template.php para anular la función que crea el código HTML. No puedo entender cómo crear la función de anulación real. ¿Puede alguien señalarme en la dirección correcta, por favor?

Respuesta

18

Lo que haría sería implementar un gancho para modificar la salida, no modificar el archivo "theme.inc" directamente.

Por ejemplo, la respuesta aceptada en esta página: Drupal Override Custom Menu Template


Y como regla general, cuando se quiere modificar la salida de algo, ya sea implement a hook (en un módulo o en el template.php del tema activo) o use un template with a predefined file name cuando tal caso exista (cuando ya no existe una plantilla, también puede modify the list of template suggestions usando un módulo o el tema).

+0

Genial, exactamente lo que necesitaba. ¡Gracias! –

+3

La respuesta aceptada usa theme_menu_item que es Drupal 6. El equivalente en Drupal 7 es theme_menu_item http://api.drupal.org/api/drupal/includes--menu.inc/function/theme_menu_link/7 – Rimian

+0

@Rimian Drupal 7 usos theme_menu_link en lugar de theme_menu_item. –

Cuestiones relacionadas