web-dev-qa-db-fra.com

Créer un nouveau type de menu, définir des champs, metadata.xml

Je souhaite créer une mise en page personnalisée com_tags/tags. Toutefois, je dois conserver le champ parent_id pour l'élément de menu.

Ce que j'ai fait c'est créer:

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

Ceci affiche une entrée "Espèce" dans la fenêtre contextuelle du type de menu, mais aucun des champs de personnalisation n’y figure plus. J'ai besoin du champ parent_id, qui se trouve dans l'entrée "Liste de toutes les balises".

J'ai débogué le code et apparemment j'ai besoin

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

qui semble avoir besoin de contenir une sorte d’entrée "menu". Je ne trouve aucun exemple de la façon dont cela devrait être formaté.

Ceci est un exemple de fichier de la sauvegarde Akeeba https://github.com/akeeba/contactus/blob/master/component/frontend/views/item/metadata.xml mais je ne sais pas comment ajouter les options ici?

1
jdog

Si j'ai bien compris votre question, vous essayez de créer un type de menu personnalisé pour le composant com_tags et devez définir l'ID de l'élément de menu lorsque vous le créez dans le gestionnaire de menus.

Si tel est le cas, vous ne devriez pas copier le fichier config.xml

Vous devriez copier

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

qui a les champs pour parent id, ainsi que les paramètres définis dans celui-ci.

Assurez-vous simplement de changer le nom en espèce.xml et le texte du titre/de l’option afin que Joomla sache qu’il s’agit d’une présentation différente.

J'espère que ça aide.

1
Mathew Lenning

Si je comprends bien, il existe une autre option, à savoir "ignorer" la manière normale qui est difficile à réaliser sans une sorte de substitution et utiliser le fait que votre substitution est un fichier php pour obtenir les informations séparément.

Comment obtenir Itemid par URL et le transmettre à JRoute

Ma réponse ici montre ce qui suit pour créer un lien vers une page spécifique en obtenant l'ID d'élément 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);

Dans ce cas, $menuItem Est en fait un objet contenant les informations relatives à cet élément de menu.

alors.....

$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);

Devrait vous obtenir un lien vers l'élément de menu parent.

Mais vous pouvez juste avoir besoin de l’élément de menu courant, donc en ajustant cette ligne:

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

à:

$menuItem = $menu->getActive();

Vous devriez pouvoir obtenir le lien du parent de la page actuelle uniquement. Expérimenter peut probablement aller beaucoup plus loin ainsi que $menu->getItems() a beaucoup d'options que vous pouvez utiliser (bien que je n'ai pas pu trouver une bonne page de documentation dessus).

1
Jordan Ramstad