Вы здесь

Блок. Подменю

Версия системы: 
Друпал 7
Друпал 6
Друпал 5
Оглавление документа

Этот сниппет выведет список вложенных пунктов для активного верхнего пункта меню. Возможно вы захотите использовать этот код вместе с основными ссылками. Настройка видимости блока сделает его видимым только для подходящих меню.

Друпал 5

  • Перейдите на страницу «Управление → Строение сайта → Блоки → Добавить блок»
  • Вставьте в поле «Содержание»:

    <?php
    $menu_trail
    = _menu_get_active_trail();
    $menu_top_level = array_shift( $menu_trail);

    // comment next line when finished testing using: // in front
    print( 'top-level-id= ' . $menu_top_level .'<br/>');

    $menu_sub_menu array_shift( $menu_trail);
    print(
    menu_tree$menu_sub_menu));
    ?>
  • Включите формат ввода «Код PHP»
  • Вставьте в секцию «Видимость на страницах»:

    <?php
    // Fill in the appropriate top level ID's in a comma-separated list
    $valid_top_levels = array(1, 2);
    // Uncomment next line when finished testing
    //return in_array( array_shift( _menu_get_active_trail()), $valid_top_levels);
    return TRUE;
    ?>
  • Переведите переключатель в положение «Если PHP-код возвращает значение ИСТИНА»
  • Разместите блок в нужном регионе
  • После проверки кода, удалите ненужные строки из кода в пункте 2

Друпал 6

<?php
$menus
= menu_tree_page_data('primary-links');
print
menu_tree_output(menu_tree_below($menus));

function
menu_tree_below($tree) {
  foreach (
$tree as $menu) {
    if(!empty(
$menu['link']['in_active_trail']) && $menu['below']) {
     
$r = menu_tree_below($menu['below']);
      if (
$r==0) { return $menu['below']; }
      else { return
$r; }
    }
  }
  return
0;
}
?>

Друпал 7

<?php
$menus
= menu_tree('main-menu');
print
drupal_render(menu_tree_below($menus));

function
menu_tree_below($tree) {
  foreach (
$tree as $menu) {
    if(!empty(
$menu['#original_link']['in_active_trail']) && $menu['#below']) {
     
$r = menu_tree_below($menu['#below']);
      if (
$r==0) { return $menu['#below']; }
      else { return
$r; }
    }
  }
  return
0;
}
?>

Комментарии

Изображение пользователя Jamshiddin

У мне не работает этот код для Drupal6 , ошибка _menu_get_active_trail().

Изображение пользователя Анонимно

Посмотри на странице-источнике, там для 6 версии вроде есть код.

Изображение пользователя Порция мармелада

То же самое можно сделать, просто задав опции в настройках модуля Menu (Источник для Secondary Links - Primary Links). Затем показываем где надо блок Secondary Links и всё. Все меню строится в Primary Links.

Изображение пользователя digital_sword

Для 6го Друпала

<?php
$menus
= menu_tree_page_data('primary-links');
 
$output='';
  foreach(
$menus as $data) {
      if(!empty(
$data['link']['in_active_trail'])){
       
$link = theme('menu_item_link', $data['link']);
       
$extra_class = NULL;
        if (
$data['below']) {
         
$output .= theme('menu_item', $link, $data['link']['has_children'], menu_tree_output($data['below']), $data['link']['in_active_trail'], $extra_class);
        }
        else {
         
$output .= theme('menu_item', $link, $data['link']['has_children'], '', $data['link']['in_active_trail'], $extra_class);
        }
      }
  }
  return
theme('menu_tree', $output);
?>

(работает только для 'primary-links', либо вместо этого поставить свой id меню)