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?
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.
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).