Уникальные класс или идентификатор для каждого li определенного меню

Главные вкладки

Аватар пользователя tulvit tulvit 30 апреля 2010 в 9:15

Как сделать так, чтобы в определенном меню к каждому тегу li добавлялся уникальный класс или идентификатор?
Сейчас список любого меню выглядит так:

<ul class="menu">
<li class="leaf first">
<li class="leaf">
<li class="leaf">
<li class="leaf last">
</ul>

Надо, чтобы к каждому пункту добавлялся еще какой-нибудь уникальный класс.
Бегло прошелся поиском по форуму - в основном советуют темизировать функцию вывода списка(правда, не разобрался как),
но ведь тогда дополнительный класс будет добавляться ко всем меню, а надо сделать только в одном, чтобы не засорять код.

Комментарии

Аватар пользователя riyuzakki riyuzakki 30 апреля 2010 в 10:56

1. От того, что Вы добавите идентификаторы ко всем менюшкам, код не засорится.
2. Что мешает определить в темизационной функции какую менюшку темизируем в данный момент?

Аватар пользователя wazzup wazzup 30 апреля 2010 в 19:50

например
http://drupal.org/project/menuclass

или вот
http://drupal.org/project/menu_attributes

или модуль
http://drupal.org/project/menu_icons
добавляет к каждому пункту свой ид

а насчет ко всем то можно сделать и проверку на то какое меню мы выводим.

Аватар пользователя Proteus Proteus 6 мая 2010 в 14:44

А вот можно так!

В файле 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
{
// здесь код для других видов меню
}

Аватар пользователя karel karel 10 февраля 2011 в 23:31

Может и поздно но проблему решил так Smile
Ставишь данный модуль 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";
}
?>