Как программно установить активный пункт меню

Код, который при просмотре ноды с идентификатором 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
Теги:
работа с меню
Добавлено: 26 Июля 2018 19:20:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...