web-dev-qa-db-fra.com

Comment refaire complètement (supprimer, puis ajouter) des éléments de menu via Joomla Framework

Quelques questions précédentes ont abordé ce sujet ( comment ajouter des éléments de men , comment masquer des éléments de men ), mais j'essaie de comprendre comment supprimer ou vider un menu puis le remplir par programme. Il semble que la tâche comporte trois parties:

  1. Comment effacez-vous tout un menu? Les réponses précédentes aux éléments de menu manipulés pointent vers JNestedTable pour la manipulation de menu, t voir une fonction pour accomplir ceci - seulement pour supprimer une ligne générique d’une table en utilisant une valeur de clé primaire. Je pourrais le faire en dehors du framework Joomla en utilisant une requête SQL, mais je soupçonne que ce n'est pas la bonne approche (car cela gâcherait les valeurs lft et rgt):

    SUPPRIMER DU menu OERE menutype = 'nom'

  2. Comment ajoutez-vous des éléments de menu? Je crois que cela a été répondu ici , mais y a-t-il d'autres réflexions?

  3. Une fois le menu supprimé et de nouveaux éléments ajoutés, comment reconstruisez-vous le menu? Je sais que vous pouvez reconstruire les menus à partir du backend, mais comment vous le faites par programme?

Merci beaucoup!

2
Ryan Hughes

Vous étudiez probablement mieux com_menu Et étudiez comment Joomla le fait.

Pour supprimer et ajouter des menus entiers, vous pouvez voir les fonctions correspondantes à \administrator\components\com_menus\models\menu.php.

Ici, il existe une fonction appelée delete à laquelle vous transmettez un tableau d’ID de menus, qui les supprime un à un dans une boucle foreach. C'est bien commenté, bien qu'il y ait le commentaire sinistre // TODO: Delete the menu associations - Menu items and Modules À la fin.

Il a également une fonction pour save ici, qui crée ou édite des menus. Ici, vous transmettez les données pertinentes pour faire correspondre les champs à administrator\components\com_menus\models\forms\menu.xml. Envoyez-lui un identifiant de 0 s'il s'agit d'un nouveau menu.

La fonction de reconstruction se trouve sous \administrator\components\com_menus\models\item.php. Ce n'est pas bien annoté, mais il semble que JTable ait une fonction pour reconstruire.

Ce fichier a également la fonction save pour les éléments de menu, qui fonctionne de la même manière que le menu précédent.

1
Richard B