Strumenti per costruire un componente - 8: Generatore di estensioni
In questo episodio esamineremo il Generatore di Estensioni come strumento per creare un componente.
Il nostro percorso fino ad ora
In questa serie vogliamo mostrare alcuni strumenti che possono aiutare a creare componenti per Joomla.
Nell'episodio uno e due abbiamo introdotto Il nostro esempio, un programma di eventi, lo abbiamo implementato senza creare un componente. Lo abbiamo implementato con il core di Joomla, con Seblod e Fabrik.
Negli episodi tre e quattro, abbiamo creato un componente senza utilizzare molti strumenti. Abbiamo esplorato come le relazioni tra entità vengono implementate in Joomla e abbiamo elencato funzionalità aggiuntive integrate in Joomla.
Negli episodi cinque e sei abbiamo utilizzato Component Creator e Component Generator per creare il nostro componente di esempio per la pianificazione degli eventi.
Negli episodi sette abbiamo creato il nostro esempio di programmazione eventi con Joomla Component Builder. Al momento, questo è di gran lunga lo strumento più potente e versatile per la creazione di componenti.
Generatore di Estensioni
Il Generatore di Estensioni è un progetto in fase di sviluppo da parte mia. Il suo scopo è offrire possibilità aggiuntive, oltre a quelle del Joomla Component Builder. Purtroppo non è ancora pronto per la produzione. In questo articolo presenterò questo Generatore di Estensioni, ma mi discosterò dallo schema delle edizioni precedenti non implementando il nostro esempio ricorrente di programmazione eventi con questo strumento. Invece, mostrerò alcuni dei diversi principi alla base, soprattutto a livello meta.
Model-Driven
Extension Generator è un componente Joomla che si basa su precedenti lavori di Model Driven Development come JooMDD 1. Il fulcro dello sviluppo basato su modelli (MDD) è che non si codifica direttamente un'applicazione, ma prima si crea un modello e da questo modello viene generato il software. Anche il termine Model-Driven Engineering (MDE) è ampiamente utilizzato, con lo stesso significato, ma sottolineando che la generazione del software è automatizzata.

Il "modello" qui non è esattamente lo stesso concetto della classe Model di Joomla, che fa parte della struttura Model-View-Controller di un componente. Un modello in MDE è un progetto per un componente, che definisce tutti gli elementi che si desidera includere in quel componente. Come un disegno costruttivo è il modello di un edificio. È un'astrazione, che tralascia dettagli irrilevanti.
Ad esempio, con l'esempio di pianificazione degli eventi utilizzato nelle edizioni precedenti, il nostro modello definirebbe le entità utilizzate per creare la pianificazione degli eventi: eventi, attori, tipi di evento, contenitori e sezioni.

Oltre a queste entità, ai loro campi e alle loro relazioni, dobbiamo definire tutte le altre informazioni necessarie per creare un componente: quali pagine ("viste") vogliamo visualizzare, che tipo di estensione, quale namespace utilizziamo, ecc. Tutto questo viene memorizzato nel modello in modo tale che le informazioni possano essere utilizzate da un generatore per generare il componente.
In un approccio model-driven, il modello che si crea viene formalizzato. Non si tratta di uno schizzo libero di ciò che si desidera costruire, ma di un insieme di informazioni rigorosamente definite da cui un componente può essere generato automaticamente.
Strumenti con un modello implicito
In questa serie abbiamo visto diversi strumenti per creare un componente: Component Creator, Component Generator e Joomla Component Builder. Tutti utilizzano questo principio per raccogliere prima tutte le informazioni (il "modello") necessarie per costruire il componente e poi generarlo a partire da tali informazioni. Analizzando le schermate da compilare per produrre un componente, è possibile vedere quali informazioni sono memorizzate nei loro modelli.
Ciò che è possibile inserire nel modello di uno strumento di questo tipo è un dato di fatto, non è possibile modificarlo. È una parte implicita dell'applicazione.
Meta-livello
La principale differenza con gli strumenti MDE generici, come Xtext (con cui è stato creato JooMDD) o JetBrains MPS, è che con questi strumenti si specifica esplicitamente cosa si desidera inserire nel modello. Questo si ottiene definendo un "linguaggio di modellazione", generalmente noto come "linguaggio specifico di dominio" (DSL). Questo è un meta-livello che ti permette di creare qualsiasi modello tu voglia.

Più semplice: usare i form
Nel Generatore di Estensioni tutto viene inserito nel modello tramite form. Questo è lo stesso di altri strumenti (Component Creator, Component Generator e Joomla Component Builder). Inizialmente i form utilizzati ora nel Generatore di Estensioni erano basati sul linguaggio di modellazione di JooMDD, quindi il Generatore di Estensioni raccoglieva esattamente le stesse informazioni nel suo modello di JooMDD.
Creare un linguaggio di modellazione per definire esplicitamente cosa si desidera memorizzare nel modello non è facile. Nell'Extension Generator, questo è più semplice utilizzando i moduli, anche a livello di meta-livello: utilizza i moduli per definire i moduli utilizzati per inserire informazioni nel modello. Questi meta-moduli sono chiamati Moduli di Progetto nell'Extension Generator.

Generazione di un generatore
Una volta inserito tutto nel modello, il componente viene generato da esso. In Component Creator, Component Generator e Joomla Component Builder, questo generatore è di nuovo una scatola nera, implicitamente fornita dallo strumento. Non è possibile modificarlo.
Nel Generatore di Estensione, la parte del generatore può essere modificata. Un generatore è principalmente una mappatura delle informazioni del modello alle variabili in un file modello. Il codice boilerplate, come il modo predefinito per codificare le classi Modello, Vista e Controller, è conservato nei template Twig nel Generatore di Estensione. Il termine "template" è qui utilizzato in un senso più ampio rispetto a quello di template in Joomla: si tratta di qualsiasi porzione di codice in cui vengono inserite variabili.

Finora la mappatura delle informazioni nel modello su quei template è stata effettuata tramite codice, ma sto lavorando per far sì che tutto ciò avvenga tramite i form.
Quindi, nel Generatore di Estensioni sia ciò che inserisci nel modello (i Form del Progetto) sia ciò che viene generato dal modello possono essere modificati.

Creazione di un componente con Extension Generator
Attualmente Extension Generator utilizza ancora il modello utilizzato in JooMDD per definire il componente desiderato. Una caratteristica positiva di questo modello è che non è specifico per Joomla, ma più generale. In questo modo, lo stesso modello può essere utilizzato anche con altri generatori, come WordPress, Laravel o altri.
Il modello attuale è composto da 3 parti:
- Dati: entità e relative relazioni.
- Interazione: quali pagine ("viste") desideri nel tuo componente e quali entità vengono utilizzate in tali pagine.
- Informazioni generali: che tipo di estensione desideri, quali pagine desideri utilizzare nel frontend e nel backend, parametri generali, namespace, ecc.
Nell'episodio 4 di questa serie ho elencato le funzionalità ("Funzionalità") che sonointegrate in Joomla e possono essere utilizzate in un componente personalizzato, come il blocco, la gestione degli alias, l'ordinamento degli elementi, i tag e la paginazione. eccetera. In Component Creator, Component Generator e Joomla Component Builder, molte di queste funzionalità vengono generate di default. Campi standard come stato, ordinamento, check_out, check_out_time, created_by o modified_by vengono creati automaticamente da questi strumenti, così come il codice per far funzionare queste opzioni. Ma forse non hai bisogno di tutti quei campi standard e blocchi di codice per tutte le entità. Ad esempio, un carrello della spesa viene utilizzato da un solo utente, quindi le informazioni di blocco e le informazioni su chi ha creato o modificato il carrello rappresentano un sovraccarico inutile. Al momento sto ripulendo il modello e il generatore per rendere tutte queste funzionalità extra facoltative e aggiungerle solo quando necessario. In questo modo viene generato solo il codice necessario, niente di più, niente di meno.
In Joomla Component Builder puoi inserire codice personalizzato, come i template di layout delle viste, in diversi punti del tuo modello. Aggiungerò la stessa possibilità nell'Extension Generator.
Strumenti di collaborazione e condivisione
Nel mondo model-driven vengono utilizzati diversi strumenti. Nel 2022 è stata avviata un'iniziativa 2 per creare un meta-modello con cui scambiare i modelli di questi diversi strumenti. Di conseguenza, ora è possibile utilizzare uno strumento per creare un modello, un altro per modificarlo ulteriormente e un altro ancora per generare da quel modello. Quindi, invece di competere tra loro e inventare la stessa ruota, ora è possibile utilizzare i punti di forza di strumenti diversi.
Ho in mente lo stesso ideale per gli strumenti per creare un componente. Ecco perché ora definisco il modello utilizzato da Joomla Component Builder in questo Generatore di Estensioni. Per poter scambiare modelli, crearli in uno strumento e generarli in un altro o utilizzare funzionalità come JCB Super Powers altrove.
Un meta-modello è uno strumento potente. Questa tecnica è stata utilizzata anche per integrare informazioni provenienti da diversi CMS3.

Generatore di estensioni
- Obiettivo: semplificare la creazione di componenti Joomla (modello con moduli).
- Non solo modellazione specifica per Joomla.
- Flessibilità illimitata:
- Generazione di generatori (utilizzando moduli).
- Generazione di moduli di meta-livello (moduli di progetto) per inserire informazioni nel modello.
Possibilità di utilizzo come meta-modello per diversi strumenti. Ma non ancora pronto per la produzione.
Il mese prossimo
Nel prossimo episodio (edizione di maggio 2025) chiuderemo questa serie con una panoramica e alcuni confronti tra gli strumenti.
Note
- JooMDD è stato anche oggetto della tesi di Dennis Priefer, un vero "Dottor Joomla"!
- Verso un ecosistema di componenti interoperabili per strumenti di modellazione sul web. L'iniziativa LionWeb: https://lionweb.io/.
- Un articolo del 2022 in cui è stato utilizzato un metamodello per integrare informazioni provenienti da Drupal, WordPress e Joomla: https://modeling-languages.com/wp-content/uploads/2022/03/Enabling-CMS-as-a-content-source.pdf
Risorse
Generatore di estensioni:
- Sito del generatore di estensioni:https://extengen.yepr.nl/
- Repository Github:https://github.com/HermanPeeren/Extengen
Creazione di un componente:
- Joomla! Documentazione per programmatori, la nostra fonte di informazioni online in continua espansione.
- Libro: "Sviluppo di estensioni per Joomla! 5" di Carlos Cámara.
- Libro online: "Sviluppo di estensioni per Joomla!" di Nicholas Dionysopoulos.
- "Esempio di componente J4 - Mywalks" di Cliff Ford: parte 1 + parte 2 + repository Github.
- Tutorial di Robbie Jackson: "Sviluppo di un componente MVC". Realizzato per Joomla 3, ma contiene ancora molto materiale utile.
- Esamina i componenti principali. Dovrebbero essere un esempio per il tuo codice.
- Libro: "Sviluppare estensioni: Passo dopo passo verso un'estensione Joomla funzionante" di Astrid Günther. Al momento non disponibile; Si spera che venga pubblicata una nuova versione.
Articoli di questa serie sugli strumenti per creare un componente:
- Episodio 1: Introduzione e soluzione principale
- Episodio 2: Un'applicazione incorporata in Joomla
- Episodio 3: Creazione di un componente
- Episodio 4:Extra integrati e alcuni strumenti di configurazione
- Episodio 5:Creatore di componenti
- Episodio 6:Generatore di componenti
- Episodio 7: Generatore di componenti Joomla
- Episodio 8: Generatore di estensioni (questo articolo)
Materiale aggiuntivo, come il codice per il nostro componente di esempio per la pianificazione degli eventi, è disponibile nel repository di questa serie.
Alcuni articoli pubblicati su Joomla Community Magazine rappresentano opinione personale o esperienza dell'autore sull'argomento specifico e potrebbe non essere allineata alla posizione ufficiale del progetto Joomla