Как программно открыть подменю Drupal 6? - PullRequest
2 голосов
/ 27 марта 2010

У меня есть меню с двумя уровнями, второй уровень отображается во вторичном меню.

Как я могу программно открыть второй уровень меню со страниц, не связанных с меню?

Я смотрел на theme_preprocess_page и другие, но не могу понять, как изменение состояния элемента меню с свернуло на активно .

Ответы [ 4 ]

1 голос
/ 28 марта 2010

Некоторое время я возился с подобной проблемой.

Здесь есть некоторая документация: http://api.drupal.org/api/group/menu/6 но это немного отрывочно в некоторых моментах.

Похоже, эта функция сработает: http://api.drupal.org/api/function/menu_navigation_links/6. Посмотрите, как вы можете установить уровень (в качестве аргумента), чтобы меню отображало то, что вы хотите.

Это может быть не совсем то, что вы хотите, но, надеюсь, укажет вам правильное направление!

1 голос
/ 27 марта 2010

Можно ли решить вашу проблему, просто поместив элементы в меню и не включив их?

Если нет, вы можете проверить модуль меню Trails , так как он предоставляет гораздо большую гибкость для настройки активных пунктов меню.

0 голосов
/ 11 ноября 2010

Вне контекста узла будет работать что-то подобное:

function HOOK_init() {

  if (arg(0) == 'exhibits' && arg(2) == 'publications') {
    $normal_path = drupal_get_normal_path( arg(0) .'/'. arg(1));
    $item = menu_get_item();
    $item['href'] = $normal_path;
    menu_set_item(NULL, $item);
  }

}

этот конкретный пример стремится сделать меню экспонатов / XXXXX активным, когда путь экспонатов / XXXXX / публикаций. экспонаты / XXXXX / публикаций нет в данном меню, но экспонаты / XXXXX есть.

drupal_get_normal_path() просто преобразует экспонаты / XXXXX в узел / NNNN

0 голосов
/ 01 апреля 2010

Отвечая на мой собственный вопрос, этот хук api узла делает это.
Вдохновленный модулем Меню Trails , упомянул Майк.

function phptemplate_nodeapi(&$node, $op) {
  if($open_menu_for_this_node && $op == 'view') {
    $item = menu_get_item();
    $item['href'] = $menu_item_to_open;
    menu_set_item(NULL, $item);
  }
}
...