Как сделать активной ссылку в меню в зависимости от url?
Т.е. имеется раздел news.
Нужно сделать, чтобы на всех страницах с адресом http://mysitename.ru/news/.../.. пункт меню НОВОСТИ имел class="active".
Как сделать активной ссылку в меню в зависимости от url?
Т.е. имеется раздел news.
Нужно сделать, чтобы на всех страницах с адресом http://mysitename.ru/news/.../.. пункт меню НОВОСТИ имел class="active".
Комментарии
Вот, нашел на drupal.org в теме http://drupal.org/node/352157 такое решение для шестерки:
<?php
/**
* Selects the parent item if it's in the url
*/
function yourtheme_activelink($links) {
$segments = explode('/', drupal_get_path_alias($_GET['q']));
$parent = strtolower($segments[0]);
foreach ($links as $key => $link) {
if (drupal_get_path_alias($link['href']) == $parent) {
$links[$key]['attributes']['class'] = 'active';
break;
}
}
return $links;
}
?>
Но не могу заставить ЭТО работать у себя *(
попробуйте этот код
<?php
function phptemplate_menu_item_link($link) {
static
$aliases = array();if ((strpos($_GET['q'],$link['href'].'/')===0)) {
$link['localized_options']['attributes']['class']=isset($link['localized_options']['attributes']['class']) ? $link['localized_options']['attributes']['class'].'parent' : 'parent';
}
else {
if (!isset($aliases[$link['href']])) {
$aliases[$link['href']] = url($link['href']));
}
if ((strpos($_GET['q'],$aliases[$link['href']].'/')===0) || ($_SERVER['REQUEST_URI'] != $aliases[$link['href']] && strpos($_SERVER['REQUEST_URI'],$aliases[$link['href']].'/')===0)) {
$link['localized_options']['attributes']['class'] = isset($link['localized_options']['attributes']['class']) ? $link['localized_options']['attributes']['class'].' parent':'parent';
}
}
return
theme_menu_item_link($link);} ?>
присваивает доп. класс "parent" для ссылок, имеющих урл "над" текущим
А можно его переделать, чтобы он присваивал класс не ссылке <~a href="" class="parent"~> а списку <~li class="parent"~>
было бы просто супер.
зы. код полезный.
Ура! Все работает!!!
kosilko, спасибо тебе, ты настоящий друг, спустя 5 часов мои мучения закончились только благодаря тебе!
Наконец можно идти на обед ))
да не зашт -)
Это уже не переделывать придется, а писать новый для перекрытия theme_menu_item, а в этом коде идет работа только с тэгом <a>. Ну а вообще, если мы заходим в подменю, то родительский пункт имеет класс "expanded active-trail", я не совсем понял смысл зачем присваивать еще и "parent"
Страницы с адресами типа http://mysitename.ru/news/.../.. не являются у меня подменю раздела НОВОСТИ.
Это просто ноды типа материала NEWS.
Кроме того я исползую nice menus. Для этого модуля класс "expanded active-trail" вроде бы не актуален.
А вот ваш метод - то что надо! Уже все настроил, получилось, как по задумке.
Двигаюсь дальше к поставленной цели ))
dudin.ie мне необходимо решить подобную задачу и я использую nice menus, но не получается использовать этот код. Не могли бы вы разъяснить поподробней как использовали этот код.
Заранее благодарен.
//kosilko
Спасибо огромное.
//maxroso
попробуй убрать последн. скобку:
$aliases[$link['href']] = url($link['href']));
Код от kosilko без изменений вставляется в themeplate.php вашей темы.
Чистите кэш.
После этого на всех страницах с адресом http://mysitename.ru/news/.../.. пункт меню НОВОСТИ приобретает class="parent". Да, именно parrent, а не active.
Вот с этим то классом parent вы дальше и работаете.
Успехов!
у меня таким же образом нужно сделать активным меню. Использую secondary links.
После вставки данного кода в themeplate.php и очистки кеша, не добавляется к ссылке класс parrent
лишняя скобка тут: $aliases[$link['href']] = url($link['href']));
код правильный выше
а как на счет D7? Никто не пробовал?
прекрасно работает, только не забывайте менять "yourtheme" на "ваша тема" добавляет класс active к активному пункту меню ) с ним и работаем... не получилось только "проследить" до активного пункта типа вот так
111111111
-1222222222
-1333333333
-1444444444
--2222222222
--2333333333
--2444444444
222222222
333333333
если кто поможет буду очень признателен !!
в поиске много примеров, и подсвечивает всё дерево меню
а в какой файл нужно добавлять этот код?