2011-08-23 40 views
6

Me gustaría agregar pipes ("|") entre los elementos del menú para uno de los menús en mi sitio Drupal 7 (el nombre del tema es "thompson"). Pensé que la mejor manera de hacerlo es crear una función en mi archivo template.php llamado thompson_menu_link. Lo hice y está modificando con éxito los menús, pero está cambiando todos los menús. ¿Hay alguna forma de que pueda hacer esto solo por un menú en mi sitio?¿Puedo modificar theme_menu_link para un menú específico?

Actualmente, utilicé las páginas de administración para agregar mi menú de pie de página (ruta url: menú-pie de página-menú) al bloque de Pie de página. ¿Debería llamarlo de otra manera?

+0

La parte que agregó sobre la solución que adoptó debe escribirse como respuesta. Si escribiste eso como respuesta, lo votaría mejor. ':-)' – kiamlaluno

+0

Lo siento, nuevo aquí. No sabía si era mala forma responder mi propia pregunta y aceptarla. –

Respuesta

2

Al parecer, el núcleo de Drupal proporciona la capacidad de theme menu links by menu name. Para el menú principal la función siguiente tema funcionará

THEMENAME_menu_link__main_menu() 

otra posibilidad es utilizar el módulo Menu Block para crear bloques de menú. Entre otras cosas, el módulo crea sugerencias de temas adicionales. Desde el archivo README del módulo:

El bloque de menú utiliza las funciones del menú del menú de Drupal. Sin embargo, también proporciona sugerencias de gancho de temas que se pueden utilizar para anular cualquiera de las funciones de tema a las que llamó . ...

  • theme_menu_link() se puede anular mediante la creación de uno de:
    • [tema] _menu_link __ [Nombre del menú]()
    • [tema] _menu_link__menu_block()
    • [tema] _menu_link__menu_block __ [nombre del menú]()
    • [tema] _menu_link__menu_block __ [bloque de número de identificación]()
+0

Esta debería ser la respuesta aceptada. Props @daniels –

0

la mejor manera se puede hacer es instalar el módulo siguiente:

http://drupal.org/project/menu_attributes

Este módulo le permite agregar clases especiales para algunas entradas de menú, por lo que sólo tiene que añadir una clase rightpipe y definir esa clase como:

.rightpipe { border-right: 1px solid black } 

o

.rightpipe { background: url(1pixel_line_separator.png) no-repeat center right } 
2

Me he equivocado un poco con la función thompson_menu_link(). No me gusta cómo lo hice, pero hizo el trabajo. Básicamente, se lee en el nombre del menú y utiliza un condicional para devolver el elemento <li> con una tubería después. Aquí está todo el bloque:

function thompson_menu_link(array $variables) { 
    $element = $variables['element']; 
    $menuName = $variables['element']["#original_link"]["menu_name"]; 
    $sub_menu = ''; 

    if ($element['#below']) { 
    $sub_menu = drupal_render($element['#below']); 
    } 

    $output = l($element['#title'], $element['#href'], $element['#localized_options']); 

    if ($menuName == "menu-footer-menu" && !in_array("last",$element['#attributes']['class']) { 
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>|\n"; 
    } 
    else { 
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n"; 
    } 

    return $finalString; 
} 
+1

Tiene un error en if ($ menuName == "menu-footer-menu" &&! In_array ("last", $ element ['# attributes'] ['class']) {.Needs another) al final. – canadiancreed

Cuestiones relacionadas