Код, который при просмотре ноды с идентификатором 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']
нужно передавать внутренний путь друпала, а не синоним.
Добавлено 20/02/2012: в Drupal 7.12 этот метод работать перестал. Временное решение:
/**
* 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
Комментарии
Благодарю! очень помогло потому что было на поверхности, а я городил огород через написание своего вывода меню. оно конечно работало, но лучшее решение - простое :)
Не подскажите как сделать, чтобы пункт который ведет на адрес "news" был активным при адресах:
news
news/politic - синоним термина таксономии
news/politic/nazvanie_novosti
?
http://xandeadx.ru/blog/drupal/330
Спасибо!
Добрый вечер !
А не подскажете, как создать пункт меню в определенной ветке при добавлении новой ноды определенного типа, если пользователь вдруг забудет в диалоге добавления ноды выбрать автоматическое добавление ссылки в меню ?
Или можно ли сделать так, чтобы при создании нод определенного типа пункт "Создать ссылку в меню" включатся и в нём бы автоматически выставлялись определенные параметры, например, родительское меню ?
в настройках типа материала можно включить
Понятно.
А как решить вопрос установки родительского меню в зависимости не только от типа материала, но и от типа материала и языка ?
То есть, чтобы русскоязычная страница типа "Услуга" имела родительским пункт "Услуги", а англоязычная - пункт "Services" ?
Даже после установки i18n я не нашел, чтобы родительские меню можно было устанавливать в зависимости от языка.
А для Drupal 8 как это сделать программно?
Модуль menu_position это делает, но иногда нужно задать более сложные условия программно.
Спасибо.
Добавить комментарий