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";
}
?>