Как программно установить активный пункт меню
Код, который при просмотре ноды с идентификатором 10, устанавливает активный пункт меню с адресом taxonomy/term/1:
/**
* Implements hook_init()
*/
function mymodule_init() {
$item = menu_get_item();
if ($item['path'] == 'node/%' && $item['page_arguments'][0]->nid == 10) {
$item['href'] = 'taxonomy/term/1';
menu_set_item(NULL, $item);
}
}
Важно: в $item['href'] нужно передавать внутренний путь друпала, а не синоним.
Временное решение:
/**
* Implements hook_init()
*/
function mymodule_init() {
$item = menu_get_item();
if ($item['path'] == 'node/%' && $item['page_arguments'][0]->nid == 10) {
menu_tree_set_path('main-menu', 'taxonomy/term/1');
}
}
или
/**
* Preprocess function for page.tpl.php
*/
function mymodule_preprocess_page(&$variables) {
if ($variables['page'] && $variables['node']->nid == 10)
menu_set_active_item('taxonomy/term/1');
}
}
насчёт последнего способа не уверен, так как он изменяет служебную переменную $_GET['q'], что может привести к непредсказуемым последствиям.
Написанное актуально для
Drupal 6, Drupal 7
Комментарии:
Нету комментариев для вывода...