Outils pour construire un composant - 8: Générateur d'extension
Dans cet épisode, nous allons regarder Générateur d'extension comme un outil pour construire un composant.
Notre voyage jusqu'à maintenant
Dans cette série, nous voulons montrer quelques outils qui peuvent aider à construire des composants pour Joomla.
Dans l'épisode un et deux Nous avons présenté notre exemple, un calendrier d'événements, et l'avons mis en œuvre sans construire de composant. Nous l'avons implémenté avec le noyau Joomla, avec Seblod et Fabrik.
Dans l'épisode trois et quatre Nous avons construit un composant, sans utiliser beaucoup d'outils. Nous avons exploré comment les relations entre les entités sont implémentées dans Joomla lui-même et nous avons répertorié des fonctionnalités supplémentaires, intégrées dans Joomla.
Dans l'épisode cinq et six Nous avons utilisé Component Creator et Component Generator pour construire notre exemple de composant de planification d'événements.
Dans l'épisode sept Nous avons créé notre exemple de calendrier d'événements avec Joomla Component Builder. À l'heure actuelle, c'est de loin l'outil le plus puissant et le plus polyvalent pour produire un composant.
Générateur d'extension
Extension Generator est un travail en cours par moi. Il est destiné à donner des possibilités supplémentaires, au-delà de Joomla Component Builder. Malheureusement, il n'est pas encore prêt pour la production. Dans cet article, je présenterai ce générateur d’extensions, mais je m’écarterai du schéma des éditions précédentes en ne mettant pas en œuvre notre exemple récurrent de calendrier d’événements avec cet outil. Au lieu de cela, je vais montrer certains des différents principes qui le sous-tendent, en particulier au niveau méta.
Piloté par modèle
Extension Generator est un composant Joomla qui s'appuie sur des travaux antérieurs dans Model Driven Development comme JooMDD 1. Le cœur de Développement axé sur les modèles (MDD), c’est-à-dire que vous ne codez pas directement une application, mais que vous créez d’abord une modèle et faites générer votre logiciel à partir de ce modèle. Le terme Ingénierie axée sur les modèles (MDE) est également largement utilisé, ce qui signifie la même chose, mais en soulignant que la génération de logiciels est automatisée.

Le «modèle» ici n’est pas exactement le même concept que la classe Model de Joomla qui fait partie de la structure Model-View-Controller d’un composant. Un modèle dans MDE est un plan pour un composant, définissant toutes les choses que vous voulez avoir dans ce composant. Comme un dessin de construction est un modèle d'un bâtiment. C'est une abstraction, laissant de côté des détails non pertinents.
Par exemple, avec l'exemple de calendrier d'événements que nous avons utilisé dans nos éditions précédentes, notre modèle définirait les entités utilisées pour construire le calendrier d'événements: événements, acteurs, types d’événements, conteneurs et sections.

Outre ces entités, leurs champs et leurs relations, nous devons définir toutes les autres informations nécessaires pour créer un composant: quelles pages («vues») voulons-nous voir, quel type d’extension, quel espace de noms utilisons-nous, etc. Tout cela est stocké dans le modèle de manière à ce que les informations puissent être utilisées par un générateur pour produire le composant à partir de celui-ci.
Dans une approche axée sur le modèle, le modèle que vous construisez est formalisé. Ce n'est pas une esquisse de style libre de ce que vous voulez construire, mais un ensemble strictement défini d'informations à partir desquelles un composant peut être généré automatiquement.
Outils avec un modèle implicite
Dans cette série, nous avons vu plusieurs outils pour faire un composant: Component Creator, Component Generator et Joomla Component Builder. Ils utilisent tous ce principe pour collecter d’abord toutes les informations (le «modèle») nécessaires à la construction du composant, puis générer le composant à partir de ces informations. En analysant les écrans que vous devez remplir pour produire un composant, vous pouvez voir quelles informations sont stockées dans leurs modèles.
Ce que vous pouvez mettre dans le modèle d'un tel outil est une donnée, vous ne pouvez pas changer cela. Il s'agit d'une partie implicite de l'application.
Méta-niveau
La principale différence avec les outils MDE généraux, comme Xtext (où JooMDD a été fabriqué) ou JetBrains MPS, est-ce qu'avec eux vous dites explicitement quoi vous voulez mettre dans votre modèle. Cela se fait en définissant un «langage de modélisation», généralement connu sous le nom de «langage spécifique à un domaine» (DSL). C'est une méta-niveau qui vous permet de créer n'importe quel modèle que vous voulez.

Plus simple: en utilisant des formulaires
Dans le générateur d'extension, tout est mis dans le modèle avec des formulaires. C'est la même chose qu'avec d'autres outils (Component Creator, Component Generator et Joomla Component Builder). Initialement, les formulaires qui sont maintenant utilisés dans Extension Generator étaient basés sur le langage de modélisation de JooMDD, de sorte que l'Extension Generator a recueilli exactement les mêmes informations dans son modèle que JooMDD.
Créer un langage de modélisation pour définir explicitement ce que vous voulez stocker dans votre modèle n'est pas facile. Dans le générateur d'extension qui est fait plus simple en utilisant des formulaires, également sur le méta-niveau: il utilise des formulaires pour définir les formulaires vous utilisez pour mettre des informations dans le modèle. Ces méta-formes sont appelées formulaires de projet dans le générateur d'extension.

Générer un générateur
Une fois que vous avez tout mis dans votre modèle, le composant est généré à partir de celui-ci. Dans Component Creator, Component Generator et Joomla Component Builder, ce générateur est à nouveau une boîte noire, implicitement donnée par l'outil. Vous ne pouvez pas modifier cela.
Dans le générateur d'extension, la partie génératrice peut être modifiée. Un générateur est principalement un mappage des informations dans le modèle aux variables dans un fichier modèle. Le code Boilerplate, comme la manière par défaut de coder les classes Model, View et Controller, est conservé dans Twig-templates dans le générateur d'extensions. Le mot «template» est utilisé ici dans un sens plus large qu’un modèle dans Joomla: c'est n'importe quel morceau de code dans lequel des variables sont insérées.

Jusqu’à présent, la mise en correspondance des informations du modèle avec ces modèles est effectuée en code, mais je m’efforce de le faire avec les formulaires.
Donc, dans le générateur d'extension, les deux ce que vous mettez dans le modèle (les formulaires de projet) et ce qui est généré à partir du modèle peut être édité.

Création d'un composant avec Extension Generator
Actuellement, le générateur d'extensions utilise toujours le modèle utilisé dans JooMDD pour définir le composant que vous souhaitez avoir. Une bonne propriété de ce modèle est qu'il n'est pas spécifique à Joomla, mais plus général. De cette façon, ce même modèle peut également être utilisé avec d'autres générateurs, comme WordPress, Laravel ou autre.
Ce modèle actuel se compose de 3 parties:
- Données : entités et leurs relations.
- Interaction : quelles pages («vues») vous souhaitez inclure dans votre composant et quelles entités sont utilisées sur ces pages.
- Informations générales:Quel type d'extension voulez-vous, quelles pages voulez-vous utiliser dans le frontend et le backend, paramètres généraux, espace de noms, etc.
Dans le épisode 4 de cette série I énumère des caractéristiques (« Bells & Whistles ») qui sont intégré dans Joomla et peut être utilisé dans un composant personnalisé, comme le verrouillage, la manipulation d'alias, la commande d'articles, les balises, la pagination, etc. Dans Component Creator, Component Generator et Joomla Component Builder, beaucoup de ces fonctionnalités sont générées par défaut. Les champs standard tels que state, ordering, check_out, checked_out_time, created_by ou modified_by sont automatiquement créés par ces outils, tout comme le code pour faire fonctionner ces options. Mais peut-être n’avez-vous pas besoin de tous ces champs et morceaux de code standard pour toutes les entités. Par exemple, un panier d'achat n'est utilisé que par un seul utilisateur, de sorte que les informations de verrouillage et les informations sur qui a créé ou modifié le panier sont inutiles. En ce moment, je nettoie le modèle et le générateur pour créer toutes ces fonctionnalités supplémentaires. facultatif et de ne les ajouter que si nécessaire. Pour que seul le code nécessaire soit généré, rien de plus, rien de moins.
Dans Joomla Component Builder, vous pouvez insérer du code personnalisé, comme des modèles de mise en page d'affichage, en plusieurs points de votre modèle. J'ajouterai la même possibilité dans le générateur d'extension.
Outils de collaboration et de partage
Dans le monde axé sur les modèles, différents outils sont utilisés. En 2022, une initiative 2 a été prise pour créer un méta-modèle avec lequel les modèles de ces divers outils peuvent être échangés. En conséquence, vous pouvez maintenant utiliser un outil pour créer un modèle, un autre pour le modifier et un autre pour générer à partir de ce modèle. Ainsi, au lieu de rivaliser les uns avec les autres et d'inventer la même roue, vous pouvez maintenant utiliser les points forts de différents outils.
J'ai le même idéal en tête pour les outils de création d'un composant. C’est pourquoi je suis en train de définir le modèle utilisé par Joomla Component Builder dans ce générateur d’extensions. Afin de pouvoir échanger des modèles, créez-les dans un outil et générez-les dans un autre ou utilisez des fonctionnalités comme JCB Super Powers ailleurs.
Un méta-modèle est un outil puissant. Cette technique a également été utilisée pour intégrer des informations provenant de plusieurs CMS. 3.

Générateur d'extension
- L'objectif est: Il est plus facile de créer des composants Joomla (modèle avec des formulaires).
- Pas seulement la modélisation spécifique de Joomla.
- Flexibilité illimitée:
- Générer des générateurs (en utilisant des formulaires).
Générer des formulaires de méta-niveau (formulaires de projet) pour mettre des informations dans le modèle
Possibilités d'utiliser comme méta-modèle pour différents outils. Mais pas encore prêt pour la production.
Le mois prochain
Dans le prochain épisode (édition de mai 2025), nous terminerons cette série avec un aperçu et quelques comparaisons des outils.
- , un vrai «docteur Joomla»! Notes JooMDDa également fait l'objet de la thèse de
- Dennis Priefer .Vers un écosystème de composants interopérables pour les outils de modélisation sur le web. L'initiative LionWeb:
- https://lionweb.io/ Un article de 2022 dans lequel un méta-modèle a été utilisé pour intégrer des informations de Drupal, WordPress et Joomla:
https://modeling-languages.com/wp-content/uploads/2022/03/Enabling-CMS-as-a-content-source.pdf
Ressources
- Générateur d'extension: Site du générateur d'extension:
- https://extengen.yepr.nl/ Repo Github :
https://github.com/HermanPeeren/Extengen
- , notre source d'information en ligne en constante expansion.Construire un composant:
- Joomla! Documentation des programmeurs» par Carlos Cámara.Livre: «
- Développer des extensions pour Joomla! 5"par Nicholas Dionysopoulos.Livre en ligne: «
- Développement de l'extension Joomla . «J4 Component example - Mywalks» de Cliff Ford: partie 1 + partie 2+
- Repo de Github.» Fait pour Joomla 3, mais il y a beaucoup de choses qui sont encore utiles.Tutoriel de Robbie Jackson: «
- Développement d'un composant MVC
- Regardez les composants de base. Ils sont censés être un exemple pour votre propre code.: Etape par étape, jusqu'à l'extension Joomla" par Astrid Günther. En rupture de vente pour le moment; Nous espérons qu'une nouvelle version sera publiée.Livre: «
Développement d'extensions
- Articles dans cette série sur Outils pour construire un composant: Épisode 1:
- Introduction et solution de base Épisode 2:
- Une application intégrée dans Joomla Épisode 3:
- Création d'un composant Épisode 4:
- Extras intégrés et quelques outils de configuration Épisode 5:
- Créateur de composants Épisode 6:
- Générateur de composants Épisode 7:
- Constructeur de composants Joomla
Épisode 8: Générateur d'extension (cet article) .Du matériel supplémentaire comme le code de notre exemple de composant de calendrier d'événements peut être trouvé dans le
dépôt pour cette série