web-dev-qa-db-fra.com

Terminologie Joomla: affichage, mise en page, développement de tâches et de composants

Je suis un développeur et je suis très confiant avec modèles MVC et j'ai déjà développé de nombreuses applications Web à partir de rien en utilisant des frameworks PHP comme symfony et yii. Cependant, je suis un peu confus au sujet de Joomla MVC et de la terminologie. Même après avoir beaucoup cherché sur Google, lu les guides d'extensions de livres Joomla et lu les sites Web de Joomla, je suis toujours confus. Ce qui est déroutant pour moi, c'est la structure du composant MVC et la manière dont je dois configurer "ma façon de penser" sur Joomla MVC, pour faire les choses à la manière de Joomla.

En particulier, je suis habitué à raisonner en termes de contrôleur/action (comme dans symfony et yii framework)

Donc, la liste finale de toutes mes URLs webapp sera

 controller1/action1
 controller1/action2
 controller1/action3

 controller2/action1
 controller2/action2

L'action de chaque contrôleur décidera quelle vue afficher et quelle disposition utiliser pour la montrer. En particulier dans ces cadres, la définition d'une mise en page est exactement la signification d'une mise en page. Et la vue est la "partie essentielle" de la page.

Ainsi, je peux avoir une vue avec une liste d'utilisateurs et je peux placer cette vue dans une mise en page mobile ou une mise en page de bureau, ou créer une vue pour mobile et la mettre uniquement dans la mise en page mobile, etc.

Le résultat final de la structure de répertoire dans mon application Web est similaire à celui-ci:

 controllers/
    controller1
    controller2
    controller3
models/
    modelForTableA
    modelForTableB
views/
   controller1/
     viewForAction1
     viewForAction2
layouts/
    mobileLayout.php
    desktopLayout.php

et pour moi c'est très clair à comprendre.

Donc finalement mes questions sont:

  • quelle serait la structure de répertoire dans joomla?
  • quelle est la définition de la vue, de la disposition et de la tâche dans Joomla?

Je dois préciser que je n'ai pas besoin d'une explication sur les travaux de MVC en général, mais si je pouvais obtenir le même résultat qu'avant, comment dois-je organiser mon code et mon travail?

Supposons que je veuille construire un composant avec "l'url" suivant

userController/addUser
userController/editUser
userController/listUsers
userController/viewUserDetail

anotherController/addOperation
anotherController/editOperation
anotherController/myNonCrudOperation

Merci beaucoup

5
user2548436

En avance, laissez-moi vous fournir un lien vers JooYii Library . Cette bibliothèque fait un bond en avant et apporte certaines pratiques qui seraient à Joomla! 4 À la branche actuelle Joomla! 3.x Avec d'autres bonnes choses [MVC commun, méthodes variables vérifie et lie et autres]. Ce n'est pas encore le premier maître, mais quelques centimètres à peine.

En ce qui concerne l'explication de "l'approche MVC spécifique de Joomla":

Les composants ressemblent davantage à des applications indépendantes. Donc, ce que vous devez savoir sur la "Terminologie" et les moyens de réaliser ce que vous voulez:

  • controller.php - Contrôleur principal;
  • controllers/anycontroller.php - Sous-contrôleur;
  • models/anymodel.php N'est pas du genre Yii modèle, juste "sqls helper";
  • tables/anytable.php - Quelque chose comme Yii modèle, mais seulement comme. Ce n'est pas un enregistrement actif par représentation de la ligne de la table;
  • views/anyview/view.html.php - pas de vue, mais quelque chose comme 'Extension of controller', inclus dans la méthode display du contrôleur;
  • views/anyview/tmpl/default.php - la disposition de la vue, c'est ce que vous appelez 'vue' chez Yii, généralement;

Eh bien c'est ça. Tout ce que vous devez savoir sur la terminologie.

Comment implémenter des appels comme controller/action.

  • définissez votre composant sur la page d'accueil pour l'appeler comme controller/action ou utilisez /component/yourcomponent/controller/action
  • la prochaine étape consiste à créer router.php et à configurer parseRoute() pour analyser votre route comme $vars['task'] = $segments[0].$segments[1]

Ça y est, vous êtes là. En mode super natif, joomla, vous dirigez vers index.php?option=com_yourcomponent&task=controller.action À la place.

7
Alexandr