При посадке на страницу, у которой есть пункт меню, который является родительским для других пунктов меню страниц, я хотел бы иметь возможность показать список этих дочерних пунктов меню. Я использую следующий код.
$trail = menu_get_active_trail();
menu_build_tree('main-menu', array(
'expanded' => array($trail[1]['mlid'])
));
Тем не менее, возвращенный массив выглядит следующим образом (с большим количеством ненужных удаленных).
array
'49950 PKY Truck Beauty 312' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '312' (length=3)
'plid' => string '311' (length=3)
'below' =>
array
'49952 Seminars 314' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '314' (length=3)
'plid' => string '311' (length=3)
'50000 HDMA Breakfast 316' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '316' (length=3)
'plid' => string '311' (length=3)
'50000 MATS Concert 315' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '315' (length=3)
'plid' => string '311' (length=3)
Заметьте, как 314, 315 и 316 «ниже» 312? Они - братья и сестры в моей структуре меню, и это, кажется, подтверждается каждым, имеющим одинаковое значение для plid
(311). Очевидно, я могу это исправить, передав массив через другую функцию, но я не могу не думать, что просто что-то упустил.
$tree = menu_build_tree('main-menu', array( 'expanded' => array($trail[1]['mlid']) ));
drupal_render(menu_tree_output($tree))
Затем с помощью CSS я могу стилизовать ссылки, чтобы убратьul
отступы, чтобы они выглядели на одном уровне. Не идеально, но эффективно. РЕДАКТИРОВАТЬ: извините, я не могу понять, как заставить работать разрывы строк.get_sub_menu_based_on_active_page()
и у меня все готово. Мне пришлось отказаться от попыток выяснить проблему с вложенностью, так как css делает пользователя не мудрее.Ответы:
Просто хотел продолжить. Я вернулся к этому вопросу и обнаружил следующее: /programming/2716787/how-to-get-all-the-menu-items-below-a-sure-parent-in-drupal, который именно то, что мне было нужно.
Код, скопированный из вышеупомянутой ссылки и измененный в соответствии с моими потребностями (в основном для использования текущего пути для построения дерева меню, а не с использованием жестко заданного значения:
источник
current_path()
вместо$_GET['q']
.$_GET['q']
вернет псевдоним пути, гдеcurrent_path()
получит узел / идентификатор.Это легко сделать с помощью модуля «Блок меню» (его настройка занимает около 5 минут).
Все, что вам нужно сделать, это
admin/structure/block
Установите «Начальный уровень» на «2-й уровень (Вторичный)» и укажите регион, в котором он должен отображаться, в разделе «Укажите, в каких темах и регионах отображается этот блок».
Скриншоты:
Так выглядит страница конфигурации
Страница администратора / структуры / блока с включенными блоками модуля меню блока
Я сгенерировал некоторое содержимое «Базовой страницы» с помощью модуля Devel, предоставил несколько ссылок на меню и создал иерархию вложенных меню.
Это второе меню, с некоторыми дочерними элементами, вы уже можете видеть «Главное меню - 2-й уровень» на левой боковой панели, но видны только дочерние элементы 2-го уровня
Теперь углубляясь:
Я думаю, что использование модуля « Меню » для этой задачи - одно из самых простых и быстрых решений.
источник
Как отмечалось в комментариях, я в конечном итоге использовал функцию API, а затем стилизацию с помощью CSS:
источник
Эта функция работает правильно, чтобы получить подменю текущей страницы:
Надеюсь, это поможет!
источник
@ Крис Роквелл и @ Марио Авад
Я новичок в Drupal, поэтому мне сложно понять, где добавить эту функцию ... Я прошу прощения за это. Но не могли бы вы, ребята, упомянуть, что в каком файле мы должны добавить эту функцию?
Я пытаюсь создать боковую панель навигации, которая будет отображать только дочерние элементы на каждой странице. Как создать навигационное меню на боковой панели с разными навигационными ссылками, отображаемыми на разных страницах?
Я ценю!
Спасибо!
источник
Я только что закончил публиковать функцию, которая получает дочерние элементы меню по заданному пути узла. Вы можете проверить это здесь: http://softkube.com/blog/getting-child-menu-items-drupal-menu-tree
Я включил ссылку на ответ на будущее, если сообщение будет обновлено, и я также скопирую / вставлю полный код в конце.
В вашем случае вы можете просто запустить что-то подобное в своей теме, чтобы вывести список всех дочерних пунктов меню. Измените
echo
высказывание и тему по своему вкусу.А вот полный код функции. Проверьте ссылку на возможные будущие обновления.
Удачи.
источник
$parameters
вmenu_build_tree
?$parameters
я использовал, и поверьте мне, я выглядел много. Все, что я хотел, это дать путь, получить все дочерние элементы меню на всех уровнях, и я просто не мог найти путь. Если есть, сообщите мне, я буду рад узнать и обновить мой ответ и сообщение в блоге. Приветствия.