Всем доброго воскресенья!
Возникла, задача и, как бы, решение к ней. Может есть решение лучше?
Задача:
У друпала, подсвечивается активный пункт меню (в теги li и а ставится класс active).
Я делаю следующее: создаю тип ноды "super_type_node", создаю вьюху-страницу, которой вывожу перечень нод типа "super_type_node". Для этой вьюхи-страницы делаю пункт в главное меню. Когда мы находимся на странице-вьюхи, всё хорошо, пункт меню подсвечивается как активный. НО! Когда мы с этой вьюхи переходим на ноду, то пункт меню уже не подсвечивается как активный.
Например, тут: http://www.drupal.ru/blog, подсвечивается пункт меню "Блог", а если перейти на к.-либо ноду, то пункт меню уже не подсвечивается :(.
Я придумал задачу решать так: в файл template.php своей темы пишу
<?php
function МОЯ_ТЕМА_preprocess_page(&$variables) {
if (isset($variables['node']) ) {
if ( тут проверяем мой тип ноды или нет ) {
$variables['main_menu']['menu-НОМЕР_МОЕГО_ПУНКТА active-trail active'] = $variables['main_menu']['menu-НОМЕР_МОЕГО_ПУНКТА'] ;
$variables['main_menu']['menu-НОМЕР_МОЕГО_ПУНКТА active-trail active']['attributes']['class'][0] = 'active-trail' ;
unset ($variables['main_menu']['menu-НОМЕР_МОЕГО_ПУНКТА']) ;
}
}
}
?>
соответсвенно можно проверять не только нужный тип ноды, но и термин таксономии, урл и т.д.
Недостаток данного метода в том, что "новый" пункт меню, будет выводиться не в нужно порядке, а самым последним. Т.о. чтобы был нужный порядок надо делать сортировку и т.д. и т.п.