Accéder au contenu principal

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:

  1. Données : entités et leurs relations.
  2. Interaction : quelles pages («vues») vous souhaitez inclure dans votre composant et quelles entités sont utilisées sur ces pages.
  3. 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.

  1. , un vrai «docteur Joomla»! Notes JooMDDa également fait l'objet de la thèse de
  2. Dennis Priefer .Vers un écosystème de composants interopérables pour les outils de modélisation sur le web. L'initiative LionWeb:
  3. 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

https://github.com/HermanPeeren/Extengen

Développement d'extensions

É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

1
2
3
4
5
6
7
EventSchedule
February Customize Backend
February Email Template
February Joomla Academy
February Mywoodlot
February Recover Article
February Web Development II
February Write Tutorial
February JQuery 2
Gets SiteView
JCB
JCB1 Custom Admin View
JCB2 Basis
January Components
January Connecting Third Party Libraries
January Floating Labels
January Happy 2025
January Web Development
March Blog Joomla
March Case Study
March Disaster
MySqlTab
SitViewCodeSuggestions
TutorialKing
Admin Tabs Custom Code
Article Menu Item
ClassDescriptionGitea
Diagram Selection Process
Joomla Extension Changlog View
Menu Templates
Selection Process Current
Starttime
EventSchedule3
Chrome OvkmdodwV6
Dashboard 01 Custom Css Example
Dashboard 02 Disable Core Extensions
Dashboard 03 Edit Layout
Dashboard 04 Images
Dashboard 05 User Dashboard
Dashboard 06 Custom Quick Icons
Dashboard 07 Admin Checklist
Fimage1
Fimage10
Fimage11
Fimage12
Fimage13
Fimage2
Fimage3
Fimage4
Fimage5
Fimage6
Fimage7
Fimage8
Fimage9
Image 20250114112645473
Image1
Image10
Image11
Image12
Image13
Image1a
Image2
Image3
Image4
Image4a
Image5 1
Image5
Image5a
Image6
Image6a
Image7
Image8
Image9
Junction Table