web-dev-qa-db-fra.com

Comment fonctionne la soumission de formulaire avec des vues / tâches?

Bonjour, j'ai une question sur les formulaires Joomla. Je veux comprendre comment Joomla fonctionne en interne, en particulier le composant com_installer M'intéresse pour savoir comment il fonctionne. Et j'ai trouvé un formulaire dans le fichier default.php Dans le dossier com_installer/views/install/tmpl.

Dans ce fichier, des boutons personnalisés permettent de soumettre un formulaire. Et je m'intéresse à la façon dont les boutons déclenchent l'installation de composants, de modules ou d'autres éléments. Dans le corps du formulaire, je vois des valeurs cachées comme

<input type="hidden" name="task" value="install.install" />

Donc, cette valeur cachée déclenche probablement une installation en appelant un contrôleur d'installation et une méthode d'installation de ce contrôleur.

Mais la question est de savoir comment Joomla fait cela? Où se trouve le code redirigeant l'URL de view = install vers task = install.install? En d'autres termes, comment Joomla sait-il que la valeur sous forme de l'entrée masquée doit aller à l'URL?

5
Bogdan

@ RiccardoZorn est correct au niveau de la base. Il existe deux champs de formulaire masqués qui sont généralement définis: option et tâche.

Option: le nom du composant, tel que com_example, Force la page à charger ce composant.

Tâche: une fonction de contrôleur ou un contrôleur et une fonction à appeler. S'il y a un '.' dans cette partie, la partie avant spécifie le contrôleur à charger, puis appelle la fonction avec le nom de la partie après la période. S'il n'y a pas de période, alors la fonction sera simplement exécutée dans le contrôleur par défaut (généralement controller.php dans le dossier de base du composant).


Vous posez également des questions spécifiques sur les boutons de la barre d’outils. Cela implique un peu de javascript qui est automatiquement chargé par Joomla pour activer les boutons.

Lorsque le bouton est cliqué, il devrait déclencher Joomla.submitbutton(). Cette fonction prend une valeur que vous devez définir en fonction du bouton sur lequel vous avez cliqué. Donc, si vous cliquez sur le bouton Enregistrer, la tâche sera généralement définie sur import.save. (Je ne pense pas que ce bouton existe réellement dans cette composante, mais beaucoup d'autres l'auront.)

La fonction submitbutton par défaut ne fait que l'insérer dans une autre fonction submitform. Cette fonction déplacera alors cette tâche dans le champ caché approprié. Enfin cela soumet le formulaire.

Ainsi, même si ces boutons de la barre d’outils ne sont pas des boutons de soumission (ou même dans la balise de formulaire en général), ils mettront toujours à jour la valeur cachée de task et soumettront le formulaire à l’aide de javascript.

Vous pouvez trouver les principales fonctions javascript ici: media/system/js/core-uncompressed.js

3
David Fritsch

La tâche est soit une méthode du fichier controller.php du dossier du composant principal (s’il s’agit d’un seul mot), soit le nom du contrôleur et de sa méthode séparés par un point, c’est-à-dire que install.install Sera analysé par le méthode install() dans controllers/install.php

2
Riccardo Zorn