Уникальный ID для меню

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

Аватар пользователя Rick Rick 12 апреля 2010 в 18:13

Товарищи, нужен совет.
Требуется для меню в тэгах "li" добавить уникальный класс. Использую вот этот механизм: http://drupal.org/node/310356. Он помогает только когда меню не подлежит изменению (новые пункты не добавляются) и когда меню не разворачивается, а у меня все наоборот: новые пункты регулярно добавляются, меню в некоторых пунктах разворачивается до третьего уровня.

Вопрос: может есть способ добавить реальный ID пункта меню в тэг "li"? Я ничего не нашел. Единственный выход - делать свою выдачу меню через модуль, но это как-то не комильфо.

P.S. Можно попробовать делать ID из href. Но если владельцы сайта включат pathauto, то тогда ссылки изменятся и ID тоже Sad

Комментарии

Аватар пользователя direqtor direqtor 12 апреля 2010 в 18:56

В общем-то, у каждого пункта меню есть свой уникальный идентификатор. Тот, который назначен ему в таблице menu_router. Попробуйте темизировать [ru-api=theme_menu_item_link], там этот параметр должен содержаться.

Аватар пользователя Rick Rick 12 апреля 2010 в 19:08

<a href="mailto:Oleksa@drupal.org">Oleksa@drupal.org</a> wrote:
Если модулями то есть по крайней мере два
menu class
menu attribute
на d.org

Эти модули добавляют класс и ID для ССЫЛКИ, а необходимо добавить то же самое для ТЭГа "li" Smile

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 12 апреля 2010 в 19:54

"Rick" wrote:
Эти модули добавляют класс и ID для ССЫЛКИ, а необходимо добавить то же самое для ТЭГа "li" :)

Ну а как ты хотел. Человек не знает что такое dom элементы и их атрибутов. привыкнешь.

Аватар пользователя Rick Rick 13 апреля 2010 в 14:05

direqtor wrote:
Чего такого есть в LI, что нельзя получить в A?

<ul>
<li><a href="">Пункт 1</a></li>
<li><a href="">Пункт 2</a>
<ul>
<li><a href="">Пункт 2.1</a></li>
<li><a href="">Пункт 2.2</a></li>
<li><a href="">Пункт 2.3</a></li>
</ul>
</li>
<li><a href="">Пункт 3</a></li>
<li><a href="">Пункт 4</a></li>
</ul>

Каждый пункт имеет свою ширину, поэтому нужно иметь класс или ID именно у тэга LI, а не у A.

Пока решил вопрос при помощи конвертации атрибута "href" (/node/1 || /taxonomy/term/10) в формат node_1, taxonomy_term_10.

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 12 апреля 2010 в 21:28

"<a href="mailto:shamaner@drupal.org">shamaner@drupal.org</a>" wrote:
Ну а как ты хотел. Человек не знает что такое dom элементы и их атрибутов. привыкнешь.

Умник, может сам хоть что нибудь предложишь по существу?

Аватар пользователя 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";
}
?>
Аватар пользователя KonstS KonstS 16 февраля 2012 в 9:05

"karel" wrote:

Может и поздно но проблему решил так :)

Я правильно понимаю - у вас теперь li имеет свой ID? Сделал все как вы советуете - id Только у ссылок появился.
Дайте ссылку как у вас получилось.