изменить место активного пункта в горизонтальном меню

Аватар пользователя Stils
+1
0
-1

Сообщение:­

Здравствуй­те!
Хочется сделать такую вещь - вверху
горизонтал­ьное меню, а сбоку меню
выводящее подразделы­ верхнего. Как это
сделать я знаю - с помощью модуля menu block. Но
поставили задачу при выборе пункта меню в
верхнем горизонтал­ьном меню сделать так.
чтобы этот пункт менял цвет и становился­
первым в верхнем меню, а во втором уже
раскрывали­сь его подразделы­. Буду
благодарен­ за ответы. Через гугл искал,
пусто.

Версия: 

Аватар пользователя Niremizov
+1
+2
-1

Если горизонтальное меню выводится через модуль Menu Block, тогда в настройках блока есть соответствующая настройка.

  • Заходим в настройки блока.
  • Кликаем таб "Advanced Options" (Дополнительные настройки)
  • Ищем чекбокс "Sort menu tree by the active menu item’s trail." -- "Сортировка меню по активному элементу".

Если нету возможности выводить меню через Menu Block. Тогда можно вывести меню в програмно созданный блок:

  • Создаем блок.
  • Добавляем:
    hook_block_view_alter()(&$data, $block) {
    .....
      $menu = menu_tree('название_меню');
      // активный элемент меню
      $menu_ac_path = menu_link_get_preferred(NULL, 'название_меню');
      // Копируем активный элемент из дерева меню
      $menu_ac_copy = $menu[$menu_ac_path['mlid']]; dpm($menu_ac_path['mlid']);
      // Убираем элемент со старого места
      unset($menu[$menu_ac_path['mlid']]);
      // Записываем в начало активный элемент.
      $out_tree = array ($menu_ac_path['mlid'] => $menu_ac_copy) + $menu;
      $block['content'] = drupal_render($out_tree);
    .....

      return $block;
    }

    Здесь - название_меню - это машинное имя меню.

Вопрос: