ВопросНеактивный пункт меню для текущей страницы

Хочется в главном меню сделать так, чтобы пункт, ведущий на текущую (открытую) страницу, был не ссылкой, а просто текстом. На drupal.ru нашел такой код:

<?php
function replace_active_link($text) {
  $pattern = "/<a[^>]* class=\"[^\"]*active[^\"]*\"[^>]*>([^<]*)<\/a>/";
  $replace = "<span class=\"active\">\${1}</span>";
  return preg_replace($pattern, $replace, $text);
}
 
?>
 
<?php print replace_active_link($menu) ?>

Буду благодарен, если поможете разжевать :)

Ну или по традиции, Евгений нужную ссылку даст на мануал, за что также буду благодарен! :)

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

Ну смотри. HTML код у пункта меню приблизительно такой (взял с этого сайта):

<ul class="links">
  <li class="menu-847 first active"><a href="/" title="Главная страница" class="active">Главная</a></li>
  <li class="menu-942"><a href="/uroki" title="Уроки">Уроки</a></li>
  <li class="menu-1811"><a href="/design" title="Drupal и дизайн">Drupal и дизайн</a></li>
  <li class="menu-208"><a href="/video" title="Видеоуроки">Видеоуроки</a></li>
  <li class="menu-747"><a href="/node/add/question" title="Задать вопрос">Задать вопрос</a></li>
  <li class="menu-228 last"><a href="/contact" title="Контакты">Контакты</a></li>
</ul>

Когда я нахожусь на главной странице у пункта меню Главная, точнее, у его ссылки появляется класс active. Функция replace_active_link() находит ссылку с классом active и заменяет её на span с классом active. В итоге ссылка исчезает.

В функцию replace_active_link() надо передавать отрендеренный HTML с меню. Т.е. для page.tpl.php использование приблизительно такое (пример для D7):

<?php
  $menu = theme('links__system_main_menu', array('links' => $main_menu));
  print replace_active_link($menu);
?>
10.12.2011 22:14
Аватар пользователя vegas
vegas написал:

Совсем другое дело! Спасибо!

Еще просьба объяснить, пожалуйста, как в переменную $menu запихнуть menu_tree, чтобы подменю выводилось? Что-то никак не могу накопать правильный код (

11.12.2011 19:05
Аватар пользователя vegas
vegas написал:

Сделал так:

<?php 
   $tree = menu_tree('main-menu');
   $menu = render($tree);
   print replace_active_link($menu);
?>

Дерево выводится, только вот функция подхватывает также класс active-trail, в итоге родительский пункт подменю тоже становится spanом.

Получается, что в строке:

$pattern = "/<a[^>]* class=\"[^\"]*active[^\"]*\"[^>]*>([^<]*)<\/a>/";

надо как-то исправить, но я еще не разобрался в этой абракадабре :)

Либо лезть в функцию вывода меню и убирать там active-trail...
Бррррр! Даже страшно об этом думать.

11.03.2012 08:18
Аватар пользователя Spleshka
Spleshka написал:

Так а может через js проще? Или всё же переписать вывод меню.. Потому что регулярными выражениями там жесть получается)

12.12.2011 20:55
Аватар пользователя vegas
vegas написал:

Иногда здесь чувствую себя как школьник на симпозиуме :) Но я очень старательно вникаю.
Что значит "регулярные выражения"?

13.12.2011 18:29
Аватар пользователя Spleshka
Spleshka написал:

Регулярные выражения - это регулярные выражения :)

13.12.2011 21:37
Аватар пользователя vegas
vegas написал:

Спасибочки за ссылку! Немного разобрался. Может это частный случай, но в моём шаблоне всё good! Исправил строчку:

$pattern = "/<a[^>]* class=\"[^\"]*active[^\-trail,\"]*\"[^>]*>([^<]*)<\/a>/";

и теперь выглядит так, как мне нужно. В span преобразуется только ссылка класса active.
:-)))))

15.12.2011 23:18
Аватар пользователя Spleshka
Spleshka написал:

Вот видишь, теперь и ты в этом АДе разбираешься =)

16.12.2011 14:03

Комментировать