Как сделать так, чтобы в определенном меню к каждому тегу li добавлялся уникальный класс или идентификатор?
Сейчас список любого меню выглядит так:
<li class="leaf first">
<li class="leaf">
<li class="leaf">
<li class="leaf last">
</ul>
Надо, чтобы к каждому пункту добавлялся еще какой-нибудь уникальный класс.
Бегло прошелся поиском по форуму - в основном советуют темизировать функцию вывода списка(правда, не разобрался как),
но ведь тогда дополнительный класс будет добавляться ко всем меню, а надо сделать только в одном, чтобы не засорять код.
Комментарии
1. От того, что Вы добавите идентификаторы ко всем менюшкам, код не засорится.
2. Что мешает определить в темизационной функции какую менюшку темизируем в данный момент?
например
http://drupal.org/project/menuclass
или вот
http://drupal.org/project/menu_attributes
или модуль
http://drupal.org/project/menu_icons
добавляет к каждому пункту свой ид
а насчет ко всем то можно сделать и проверку на то какое меню мы выводим.
А вот можно так!
В файле template.php переопределяем функцию theme_links(). (не забудьте сбросить кеш)
Формально ей ничего специального относительно вида меню не передается, но для того, чтобы заполнить стили в теге ul она получает содержимое для class заданное page.tpl.php - по умолчанию "links primary-links", где primary-links тип нашего меню, всё это хранится в массиве $attrubutes.
Ну, а дальше дело техники: проверяем (например с помощью substr_count()) является ли название меню (в нашем варианте primary-links) частью строки для class массива $attrubutes ($attrubutes[class]) и если да, то темизируем пункты меню как нам надо, если нет, то оставляем по умолчанию.
function phptemplate_links($links, $attributes = array('class' => 'links')) {
global $language;
$output = '';
if(substr_count($attributes['class'], 'primary-links'))
{
// темизируем наше меню
}
else
{
// здесь код для других видов меню
}
Может и поздно но проблему решил так
Ставишь данный модуль http://drupal.org/project/menu_attributes в каждом меню ставишь id и этот код в template.php
<?php
function themename_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
if ( preg_match("/id=\".*\"/", $link, $matches) ) :
$id = " " . $matches[0];
$link = str_ireplace($id, "", $link);
endif;
$class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
if (!empty($extra_class)) {
$class .= ' '. $extra_class;
}
if ($in_active_trail) {
$class .= ' active-trail';
}
return '<li class="'. $class .'"' . $id . '>'. $link . $menu ."</li>\n";
}
?>