Как добавить у активного li класс например active?

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

Аватар пользователя maga maga 14 марта 2012 в 18:53

В общем я создал в Drupal 7 два новых меню, назвал их about и news. Проблема в том что в этих меню у li при нажатии на него не добавляется класс активного элемента! Поэтому я не могу применить к нему стили которые должны работать именно в активном li!
Я знаю что нужно в template переопределить вывод, но не знаю как! Именно решение такой задачи я здесь не нашел (копался 4 часа), есть похожие, но не такие.
Он сейчас выдает такой код:

<ul class="menu"><li class="first leaf"><a title="" href="/administration_of_the_theater">Администрация театра</a></li>
<li class="leaf"><a title="" href="/jobs">Вакансии</a></li>
<li class="leaf"><a title="" href="/order_tickets">Заказать билеты</a></li>
<li class="leaf"><a title="" href="/history">История</a></li>
<li class="leaf"><a title="" href="/partners_and_sponsors">Партнеры и спонсоры</a></li>
<li class="last leaf"><a title="" href="/artistic_director">Художественное руководство</a></li>
</ul>

А нужно чтобы при нажатии например на Вакансии у его li добавлялся класс например active, вот так:

<ul class="menu"><li class="first leaf"><a title="" href="/administration_of_the_theater">Администрация театра</a></li>
<li class="leaf active"><a title="" href="/jobs">Вакансии</a></li>
<li class="leaf"><a title="" href="/order_tickets">Заказать билеты</a></li>
<li class="leaf"><a title="" href="/history">История</a></li>
<li class="leaf"><a title="" href="/partners_and_sponsors">Партнеры и спонсоры</a></li>
<li class="last leaf"><a title="" href="/artistic_director">Художественное руководство</a></li>
</ul>

Уважаемые Друпальчане помогите пожалуйста, Я новичок плохо разбираюсь еще!!!

Комментарии

Аватар пользователя scream89 scream89 14 марта 2012 в 19:38

Попробуй поставь какой нибудь модуль меню. Например, nice menu. У меня тоже проблема была такая, но я решил через CSS просто(так как 2 пункта было).
Самое интересное, что с главным меню такая штука как класс active работает, а создал новое-уже нет.

Аватар пользователя Shok211 Shok211 14 марта 2012 в 19:53

Можно сделать так

                         <ul class = 'nav'>
                                {loop name="terms"}

                                        <li {if="'taxonomy/term/' . $value.tid == $_GET['q']"}class = "active"{/if} >
                                                {function="l($value.name, 'taxonomy/term/' . $value.tid)"}
                                        </li>
                                {/loop}        
                        </ul>

Код из ядра

  // Append active class.
  if (($path == $_GET['q'] || ($path == '<front>' && drupal_is_front_page())) &&
      (empty($options['language']) || $options['language']->language == $language_url->language)) {
    $options['attributes']['class'][] = 'active';
  }
Аватар пользователя Shok211 Shok211 14 марта 2012 в 20:01

А куда вы хотите вставлять ? модуль, шаблон, php text. Я бы в вашем случае вставил пару js строк намного проще.

Аватар пользователя maga maga 14 марта 2012 в 20:04

Ну в template наверно только не знаю как! Раньше я вставлял их с помощью jquery, но пора узнать как нормально это делать)

Аватар пользователя Shok211 Shok211 14 марта 2012 в 20:07

Ну искать место куда вам надо вставлять я не буду. Ищите шаблоны меню в /modules. Экспериментируйте. Почитайте про переопределение шаблонов. Если надо могу js написать.

Аватар пользователя maga maga 14 марта 2012 в 20:20

Да нет смысла здесь что то искать и читать, больше года сижу не разу ответ на свой вопрос я здесь не нашел.
Все слишком мудрено и все отправляют друг друга погуглить!!!!

Аватар пользователя Geldora Geldora 14 марта 2012 в 21:35

Совет такой:

  • Смените тему, проверьте файрбагом, есть класс или нет. Тему причем, смените на дефолтную. Ибо по дефолту класс приклепляется.
  • Если класс есть, меняете тему снова на свою и ищите в темплейт.пхп или сеттинг.пхп. Значит, отменили прикрепление через темплейт. Ищите там решение.
  • Если класса нет, смотрите - может модулей поставили каки-то не тех?
  • В крайнем случае, поставьте модуль, не мучайтесь!
Аватар пользователя maga maga 14 марта 2012 в 21:49

Нет к большому сожалению классов нет. Модули стандартные, еще ничего не устанавливал. Переделываю тему bartik, ее template я не трогал. Хорошо была в шестой версии active был, а здесь нет!!! Модуль как я понимаю Вы говорите о Menu position, но его поставить не получится, так как у меня версия 7.10, а ему нужен 7.11. Сайт на localhost.

Аватар пользователя maga maga 14 марта 2012 в 22:44

Народ всем огромное спасибо! Все получилось, Вы меня просто спасли, даже не знаю как Вас благодарить!!!!!!

Аватар пользователя maga maga 14 марта 2012 в 23:57

Появился еще один вопрос.
После установки menu position все работает, но как теперь сделать чтобы при нажатии по ссылке на главном меню, в открывшемся меню была активная первая ссылка и соответственно показывалась его страница?

Аватар пользователя maga maga 15 марта 2012 в 4:23

Вопрос решается очень просто!
Вам нужно в подменю добавить ту же ссылку что и на главной меню.

Например, в моем случае есть ссылка в главном меню О театре. У него есть подменю со ссылками История, Администрация и т.д.

Чтобы первая ссылка подменю История (и соответственно показывала его содержимое) была активной при нажатии на О театре.

Нужно:
В подменю добавить (или изменить существующий) пункт меню, и поставить следующие настройки с Menu link title История, и в Path добавить ссылку на О театре (в моем случае был alias about), а также указать родительский элемент Parent link (имя вашего подменю).

Вот и получается что когда Вы нажимаете на О театре, в адресной строке появляется путь схожий с путем элемента подменю и он активируется и открывает свое содержимое.

Надеюсь я понятно написал и ничего сам не перепутал!

Ну если что спрашивайте чем смогу помогу!

С уважением maga!!!))))