html drupal

html - Drupal anula la plantilla de menú personalizado



(4)

Puede usar la función theme_menu_item en template.php de su tema para hacer casi lo que quiera con esos elementos del menú, incluyendo agregar clases, ID''s, etc.

Creé un menú personalizado llamado "sub-top-nav" y ahora me gustaría sobrescribir la salida html. En particular, me gustaría agregar una clase única para cada elemento como.

Así es como se ve atm:

<div class="clear-block block block-menu" id="block-menu-menu-sub-top-nav"> <div class="content"> <ul class="menu"> <li class="leaf first"><a title="Test 1" href="/test1">Test 1</a></li> <li class="leaf"><a title="Test 2" href="/test2">Test 2</a></li> <li class="leaf active-trail"><a class="active" title="Test 3" href="/test3">Test 3</a></li> <li class="leaf last"><a title="Test 4" href="/test4">Test 4</a></li> </ul> </div> </div>

Y me gustaría cambiarlo a:

<div class="clear-block block block-menu" id="block-menu-menu-sub-top-nav"> <div class="content"> <ul class="menu"> <li class="leaf test1 first"><a title="Test 1" href="/test1">Test 1</a></li> <li class="leaf test2"><a title="Test 2" href="/test2">Test 2</a></li> <li class="leaf test3 active-trail"><a class="active" title="Test 3" href="/test3">Test 3</a></li> <li class="leaf test4 last"><a title="Test 4" href="/test4">Test 4</a></li> </ul> </div> </div>

Esto me daría más poder de estilo. ¿Alguna idea de cómo funciona eso?

¡Gracias por adelantado!


Yo tengo que trabajar ahora. ¡Este fragmento de código también podría ayudar a alguien más! Entra en yourtheme / template.php

function phptemplate_menu_item($link, $has_children, $menu = '''', $in_active_trail = FALSE, $extra_class = NULL) { $class = ($menu ? ''expanded'' : ($has_children ? ''collapsed'' : ''leaf'')); if (!empty($extra_class)) $class .= '' ''. $extra_class; if ($in_active_trail) $class .= '' active-trail''; $class .= '' '' . preg_replace(''/[^a-zA-Z0-9]/'', '''', strtolower(strip_tags($link))); return ''<li class="''. $class .''">''. $link . $menu ."</li>/n"; }


Después de revisar la API, finalmente encontré una solución fácil para etiquetar el menú raíz con la misma clase (esto es útil para personalizar únicamente los menús de nivel superior, a la vez que los mantiene dinámicamente amigables). Simplemente use el plid en lugar de mlid. Noté que el plid siempre es 0 para los menús de nivel superior.

function theme_menu_link(array $variables) { $element = $variables[''element'']; $sub_menu = ''''; $element[''#attributes''][''class''][] = ''menu-'' . $element[''#original_link''][''plid'']; if ($element[''#below'']) { $sub_menu = drupal_render($element[''#below'']); } $output = l($element[''#title''], $element[''#href''], $element[''#localized_options'']); $count = 1; return ''<li'' . drupal_attributes($element[''#attributes'']) . ''>'' . $output . $sub_menu . "</li>/n"; }


Drupal 7 usa theme_menu_link en lugar de theme_menu_item

<?php function theme_menu_link(array $variables) { $element = $variables[''element'']; $sub_menu = ''''; if ($element[''#below'']) { $sub_menu = drupal_render($element[''#below'']); } $output = l($element[''#title''], $element[''#href''], $element[''#localized_options'']); return ''<li'' . drupal_attributes($element[''#attributes'']) . ''>'' . $output . $sub_menu . "</li>/n"; } ?>