Ao aterrar em uma página que possui um item de menu pai de outros itens de menu, gostaria de poder mostrar uma lista desses itens de menu filho. Estou usando o seguinte código.
$trail = menu_get_active_trail();
menu_build_tree('main-menu', array(
'expanded' => array($trail[1]['mlid'])
));
No entanto, a matriz retornada se parece com isso (com muitas desnecessárias removidas).
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)
Observe como 314, 315 e 316 estão 'abaixo' 312? Eles são irmãos na minha estrutura de menus, e isso parece ser verificado por cada um com o mesmo valor para plid
(311). Obviamente, eu posso consertar isso passando a matriz por outra função, mas não posso deixar de pensar que estou perdendo alguma coisa.
$tree = menu_build_tree('main-menu', array( 'expanded' => array($trail[1]['mlid']) ));
drupal_render(menu_tree_output($tree))
Depois, usando CSS, posso estilizar os links para remover oul
preenchimento, fazendo com que pareçam que estão todos no mesmo nível. Não é o ideal, mas é eficaz. EDIT: desculpe, não consigo descobrir como fazer com quebras de linha funcionem.get_sub_menu_based_on_active_page()
e estou pronto. Eu tive que deixar de tentar descobrir o problema de aninhamento, pois o css torna o usuário nem o mais sábio.Respostas:
Só queria acompanhar. Voltei a esta pergunta e encontrou o seguinte: /programming/2716787/how-to-get-all-the-menu-items-below-a-certain-parent-in-drupal que é exatamente o que eu precisava.
O código, copiado do link acima mencionado e modificado para atender às minhas necessidades (principalmente para usar o caminho atual para construir a árvore de menus, em vez de usar um valor codificado:
fonte
current_path()
vez de$_GET['q']
.$_GET['q']
retornará o alias do caminho, ondecurrent_path()
obterá o nó / id.Isso pode ser feito facilmente com o uso do módulo de bloco de menus (leva cerca de 5 minutos para configurá-lo).
Tudo o que tem a fazer é
admin/structure/block
Defina "Nível inicial" como "2º nível (secundário)" e defina a região onde deve ser exibida em "Especifique em quais temas e regiões esse bloco será exibido".
Imagens:
É assim que a página de configuração se parece
página admin / estrutura / bloco com o módulo de bloco de menu ativado
Eu gerei alguns conteúdos da "Página básica" com o módulo Devel, forneci alguns links de menu para eles e criei uma hierarquia de menus aninhada
Este é o segundo menu, com alguns elementos filho, você já pode ver o "Menu principal - 2º nível" na barra lateral esquerda, mas apenas os elementos filho de 2º nível podem ser vistos
Agora, indo mais fundo:
Penso que a utilização do módulo de bloco de menus para esta tarefa é uma das soluções mais fáceis e rápidas.
fonte
Conforme observado nos comentários, acabei usando a função API e depois estilizando com CSS:
fonte
Isso funciona corretamente para obter o submenu da página atual:
Espero que esta ajuda!
fonte
@Chris Rockwell e @ Mario Awad
Eu sou novato no Drupal, então é difícil entender para mim onde adicionar essa função .. Peço desculpas por isso. Mas, vocês podem mencionar que em qual arquivo devemos adicionar esta função?
Estou tentando criar uma barra de navegação lateral que exibirá apenas elementos filho em cada página. Como criar um menu de navegação na barra lateral com diferentes links de navegação exibidos em páginas diferentes?
Eu aprecio!
Obrigado!
fonte
Acabei de publicar uma função que obtém itens de menu filho, conforme o caminho de um nó. Você pode vê-lo aqui: http://softkube.com/blog/getting-child-menu-items-drupal-menu-tree
Estou incluindo o link para a prova futura da resposta, caso a postagem seja atualizada e também copie / cole o código completo no final.
No seu caso, você pode simplesmente executar algo assim no seu tema para listar todos os itens do menu filho. Modifique a
echo
declaração e o tema ao seu gosto.E aqui está o código completo da função. Verifique o link para possíveis atualizações futuras.
Boa sorte.
fonte
$parameters
inmenu_build_tree
?$parameters
eu usasse, e acredite em mim. Tudo o que eu queria era, dado um caminho, obter todos os itens do menu filho em todos os níveis, e simplesmente não conseguia encontrar um caminho. Se houver um, informe-me. Ficarei feliz em aprender e atualizar minha resposta e postagem no blog. Felicidades.