ti-enxame.com

Crie um novo tipo de menu, defina campos, metadata.xml

Quero criar um layout personalizado com_tags/tags, no entanto, preciso manter o campo parent_id para o item de menu.

O que eu fiz foi criar:

/templates/mytemplate/html/com_tags/tags/species.php
/templates/mytemplate/html/com_tags/tags/species.xml (copied from administrator/components/tags/config.xml)

Isso mostra uma entrada "Espécies" no pop-up do tipo de menu, no entanto, nenhum dos campos de personalização existe mais. Eu preciso do campo parent_id, que está na entrada "Lista de todas as tags".

Eu depurei o código e, aparentemente, eu preciso

/templates/mytemplate/html/com_tags/metadata.xml

que parece precisar conter algum tipo de entrada "menu". Não consigo encontrar nenhum exemplo de como isso deve ser formatado.

Este é um arquivo de exemplo do backup do Akeeba https://github.com/akeeba/contactus/blob/master/component/frontend/views/item/metadata.xml mas não consigo descobrir como adicionar opções aqui?

1
jdog

Se eu entendi sua pergunta, você está tentando criar um tipo de menu personalizado para o componente com_tags e precisa definir o ID do item de menu ao criá-lo no gerenciador de menus.

Se for esse o caso, você não deve copiar o arquivo config.xml

Você deve copiar

joomlaRoot/components/com_tags/views/tags/default.xml 

que possui os campos para o ID pai, bem como os parâmetros definidos nele.

Apenas certifique-se de alterar o nome para species.xml e alterar o texto do título/opção para que o Joomla saiba que esse é um layout diferente.

Eu espero que isso ajude.

1
Mathew Lenning

Se estou entendendo corretamente, há outra opção, que é "ignorar" a maneira normal que é difícil de obter sem algum tipo de substituição e usar o fato de que sua substituição é um arquivo php para obter as informações separadamente.

Como obter o Itemid por URL e passá-lo para o JRoute

Minha resposta aqui mostra o seguinte para criar um link para uma página específica, obtendo o ID do item de menu.

$app = JFactory::getApplication(); 
$menu = $app->getMenu();
$menuItem = $menu->getItems( 'link', 'index.php?option=com_example&view=something', true );
echo JRoute::_('index.php?Itemid='.$menuItem->id);

Agora, neste caso, $menuItem É na verdade um objeto que contém as informações sobre esse item de menu.

então.....

$app = JFactory::getApplication(); 
$menu = $app->getMenu();
$menuItem = $menu->getItems( 'link', 'index.php?option=com_example&view=something', true );
echo JRoute::_('index.php?Itemid='.$menuItem->parent_id);

Você deve obter um link para o item de menu pai.

Mas você pode precisar apenas do item de menu atual, ajustando esta linha:

$menuItem = $menu->getItems( 'link', 'index.php?option=com_example&view=something', true );

para:

$menuItem = $menu->getActive();

Você deve conseguir o link do pai da página atual apenas. Provavelmente, a experiência pode levar isso muito além, pois $menu->getItems() tem muitas opções que você pode usar (embora eu não tenha conseguido encontrar uma boa página de documentação).

1
Jordan Ramstad