Skip to main content

Strumenti per costruire un componente - 7: Joomla Component Builder

20 Gennaio 2025
Autore: Herman Peeren
Tradotto da: Pietro Strada
Link originale: https://magazine.joomla.org/all-issues/january-2025/tools-to-build-a-component-7-joomla-component-builder
Strumenti per costruire un componente - 7: Joomla Component Builder

In questo episodio useremo Joomla Component Builder per costruire il nostro componente di pianificazione degli eventi di esempio.

Il nostro viaggio fino ad ora

In questa serie vogliamo mostrare alcuni strumenti che possono aiutare a costruire componenti per Joomla.

Nell'episodio uno e due Abbiamo introdotto il nostro esempio, un programma di eventi, e lo abbiamo implementato senza costruire un componente. L'abbiamo implementato con il core Joomla, con Seblod e Fabrik.

Nell'episodio tre e quattro Abbiamo costruito un componente, senza usare molti strumenti. Abbiamo esplorato il modo in cui le relazioni tra le entità sono implementate in Joomla stesso e abbiamo elencato funzionalità aggiuntive, integrate in Joomla.

Nell'episodio cinque e sei Abbiamo usato Component Creator e Component Generator per costruire il nostro componente di pianificazione degli eventi di esempio.

Joomla Component Builder

In questo episodio vedremo Joomla Component Builder (JCB). È uno strumento per costruire componenti Joomla, creato da Llewellyn van der Merwe, fondatore di Vast Development Method (VDM) in Namibia, e un noto Joomler. Joomla Component Builder è un sistema completamente gratuito e open source per costruire qualsiasi componente Joomla, senza limiti. Funziona sulla tua installazione Joomla. È possibile scaricarlo dal JED oppure direttamente presso https://git.vdm.dev/joomla/pkg-component-builder/releases.

JCB è rivolto agli sviluppatori. Non è una soluzione senza codice: Devi avere alcune abilità di codifica e una comprensione di base di come funzionano i componenti Joomla. Il codice personalizzato può essere inserito nel componente in molti punti di JCB, dandogli flessibilità che non abbiamo mai visto prima in altri strumenti.

La documentazione consiste principalmente in più di 70 video, più di 100 ore in totale, che spiegano e dimostrano le possibilità. Per facilitare la ricerca in tali video, essi sono indicizzati nel wiki.

Llewellyn ha una visione di una comunità che si scambia blocchi da costruzione riutilizzabili (denominato: Poteri) per i componenti. I poteri disponibili al pubblico sono chiamati Superpoteri. Possono essere utilizzati per integrare facilmente il tuo software personalizzato o altro, come ad esempio le API di Gitea oppure OpenAI nei propri componenti.

Il nostro esempio: calendario degli eventi

Il componente di esempio che usiamo in questa serie è basato sul JCB-demo di Tom van der Laan e Bram de Hoop sull'olandese JoomlaDagen 2024. Era un programma di eventi, un calendario di eventi che può ad esempio essere utilizzato per una conferenza. Quindi con questo episodio l'esempio è tornato alla sua origine, mostrandolo di nuovo con Joomla Component Builder.

Vedi il nostro Episodio 5 per una panoramica del nostro esempio di calendario degli eventi. Il componente è destinato a visualizzare orari su schede (contenitori), con eventi verticalmente in un momento specifico di una giornata. Gli eventi simultanei vengono visualizzati in tracce parallele (sezioni). Gli eventi possono essere di un tipo di evento e sono fatti da attori.

Per Programma Evento abbiamo questo Diagramma Entità-Relazione (ERD):

EventSchedule3

Quindi, sappiamo di quali entità e campi abbiamo bisogno. Questo è spesso un buon inizio di un'analisi di ciò che vogliamo costruire.

Passi per configurare un componente in JCB

In Joomla Component Builder ho impostato il componente di base utilizzando i seguenti passaggi. Si tratta di un approccio dal basso verso l'alto: prima definisci i blocchi di costruzione (come i campi) e poi li raccogli in strutture più grandi (come le viste dell'amministratore).

JCB2 basis

1. Campi

Definisci i campi di cui hai bisogno. Un campo può essere utilizzato in più entità e in più componenti. Ad esempio un campo "nome"; ce n'è già uno nel componente demo, quindi puoi riutilizzarlo. I tipi di campo Joomla possono essere usati come base, ma puoi anche definire i tuoi tipi di campo, davvero senza limiti! Per il nostro esempio abbiamo definito un tipo di campo “Time”, che abbiamo utilizzato nei campi “Start Time” e “End Time”.

starttime

2. VISTE AMMINISTRATORE

Le entità o le tabelle sono rappresentate da Admin Views in JCB. Creare le viste amministratore e aggiungere i campi definiti nel passaggio 1.

3. Componente

Creare un nuovo componente, compilare alcune informazioni generali e aggiungere le viste amministratore ad esso.

È possibile saltare questo terzo passaggio e farlo in un secondo momento, mentre si aggiungono le viste del sito. Ma creando un Componente in questo momento e aggiungendo le viste Admin, possiamo già testare un Componente amministratore di base completamente funzionale: "compilarlo" e installarlo con un clic del pulsante nell'installazione corrente di Joomla.

4. QUERY DINAMICHE

I Dynamic Gets sono query selezionate al database tramite l'interfaccia utente grafica (GUI): è possibile ottenere campi da diverse tabelle: le viste amministratore precedentemente definite, ma anche altre tabelle nel database, unendole, filtrandole, ecc.getListQuery) e un'interrogazione di un elemento (getItem). Ma puoi creare query di elenco personalizzate e query di elementi in qualsiasi modo tu voglia. È possibile utilizzare i set di dati risultanti nelle visualizzazioni sito o nelle visualizzazioni amministratore personalizzate.

5. Vista(E) del sito

Definisci quali viste del sito vuoi avere. Le viste standard sono una vista elenco (plurale, record multipli) e una vista elemento (singolare, un record singolo). Selezionare il corrispondente "Ottieni" da un elenco a discesa. Ma puoi creare qualsiasi altra visualizzazione del sito personalizzata, come ad esempio gli orari che vogliamo avere nel nostro esempio di pianificazione degli eventi.

Gets SiteView

È possibile scrivere il modello di layout predefinito direttamente nella schermata Visualizzazione sito. Llewellyn ha scelto di non fornire un modello di frontend già pronto, perché sono così specifici e diversi per qualsiasi componente personalizzato. Ma i suggerimenti di codice per il set di dati scelto sono forniti sulla stessa pagina e puoi facilmente copiarli e incollarli. Naturalmente è necessario avere alcune capacità di codifica, JCB è non una soluzione senza codice, il gruppo target sono gli sviluppatori.

Ecco alcuni di questi frammenti di codice (per una vista articolo):

SitViewCodeSuggestions

Un primo passo sarebbe quello di creare un modello di visualizzazione molto semplice, stampando solo alcune variabili o un semplice elenco. Solo per verificare se funziona.

Aggiungere la visualizzazione del sito al componente, compilare e installare. Così si può vedere immediatamente il risultato. In questo momento abbiamo un componente di lavoro minimo con amministratore e sito!

6. VisTA TEMPLATE / Layout

In Component Creator e Component Generator non c'era la possibilità di creare il proprio modello di frontend personalizzato. Puoi aggiungerlo solo dopo aver installato il componente e dovrai riapplicare tali personalizzazioni dopo ogni aggiornamento del componente. In JCB si definiscono i modelli di visualizzazione personalizzati e vengono utilizzati negli aggiornamenti del componente.

Invece di digitare il modello di visualizzazione direttamente nella vista sito, possiamo anche creare un modello (riutilizzabile). Lo troverete nel menu:

menu templates

Per il nostro componente di esempio abbiamo utilizzato modelli di visualizzazione proprio come quando abbiamo implementato l'esempio "a mano". Abbiamo creato un modello di visualizzazione che mostra i nostri contenitori in schede. Per esempio per mostrare i diversi giorni della conferenza. E abbiamo creato modelli per il programma e per l'evento. Tutti questi modelli finiscono come sotto-modelli sotto il modello di visualizzazione predefinito e vengono chiamati con $this->loadTemplate('templatename');.

Possiamo anche creare layout e chiamarli dal view-template con LayoutHelper::render('layoutname', $thedata);. Il namespace \Joomla\CMS\Layout è già importato nel modello generato e nei file di layout.

Come puoi vedere, puoi davvero creare un frontend molto specifico. Non è necessario modificare il componente dopo averlo installato. Basta fare le modifiche in JCB, ricompilare e reinstallare, così bello!

EventSchedule

relazioni Molti-a-moltI

Nel nostro esempio di calendario degli eventi ci sono due relazioni molti-a-molti: tra attori ed eventi, tra contenitori e sezioni. Un attore può fare più eventi e un evento può essere fatto da più attori. Quando aggiungi o elimini un evento da un attore, anche quell'attore dovrebbe essere aggiunto o eliminato da quell'evento. Se un evento viene eliminato, anche quell'evento non dovrebbe più essere elencato come fatto da alcun attore. Ciò è attuato con una cosiddetta "tabella di giunzione", una tabella supplementare con tutte le combinazioni di attori ed eventi.

junction table

In Episodio 3 Abbiamo mostrato il modo principale di Joomla per farlo, come viene ad esempio utilizzato con la relazione tra utenti e gruppi di utenti. Joomla aggiorna nativamente la tabella di giunzione nell'oggetto Tabella. Ho usato lo stesso principio per un'implementazione del nostro esempio di calendario degli eventi. Questo è ovviamente possibile anche con JCB, ma questa volta lo abbiamo fatto in un altro modo: abbiamo aggiornato la tabella di giunzione nel modello dopo il salvataggio e dopo l'eliminazione.

Per prima cosa abbiamo dovuto definire la tabella di giunzione. L'ho aggiunto nella scheda MySql del componente.

MySqlTab

CREATE TABLE IF NOT EXISTS `#__eventschedule_actor_event` (
    `actor_id` bigint(20) UNSIGNED,
    `event_id` bigint(20) UNSIGNED,
    PRIMARY KEY (`actor_id`, `event_id`)
)  ENGINE=InnoDB DEFAULT COLLATE utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `#__eventschedule_container_section` (
    `container_id` bigint(20) UNSIGNED,
    `section_id` bigint(20) UNSIGNED,
    PRIMARY KEY (`container_id`, `section_id`)
)  ENGINE=InnoDB DEFAULT COLLATE utf8mb4_unicode_ci;

Quindi, una relazione molti-a-molti tra entità può essere implementata in JCB, ma al momento è necessario implementare manualmente la tabella di giunzione e il codice per aggiornarlo.

Vista Collegata in una Vista di Amministrazione Personalizzata

Nell'episodio 4, nella sezione "Programmazione di più eventi", abbiamo introdotto un'entità "Programmazione Eventi" per poter fornire diversi programmi, ad esempio per l'edizione di un altro anno di una conferenza. Abbiamo aggiunto un eventschedule_id come chiave esterna in tutte le altre tabelle (contenitori, sezioni, attori, eventi e tipi di evento). Negli ultimi episodi abbiamo avuto una semplice implementazione in cui dovevamo selezionare il programma dell'evento in ogni record aggiunto. Vorremmo scegliere il programma dell'evento nel menu di amministrazione e poi visualizzare solo i contenitori, le sezioni, gli attori, gli eventi e i tipi di evento di quel programma. Una sorta di vista nidificata, per così dire.

In JCB è possibile farlo utilizzando una Vista di Amministrazione Personalizzata. Le Viste di Amministrazione nidificate vengono inserite in una scheda diversa nella Vista di Amministrazione Personalizzata. Questa funzionalità si chiama "Viste Collegate". Guarda il video sulle Viste di Amministrazione, con un esempio di sermoni appartenenti a un predicatore in un componente di distribuzione di sermoni.

Vista collegata in una vista di amministrazione personalizzata

AGGIUNTA DI CODICE PERSONALIZZATO

In Joomla Component Builder puoi inserire codice personalizzato in molti modi diversi e in diverse posizioni, ad esempio:

  • Modelli e layout di visualizzazione personalizzati, come abbiamo visto sopra.
  • Librerie frontend in "Librerie".
  • Nelle schede PHP, CSS, JavaScript, Pulsanti personalizzati e intestazioni di classe di una visualizzazione.

In JCB è possibile farlo utilizzando una visualizzazione amministratore personalizzata. Si mettono le viste admin nidificate in una scheda diversa nella vista admin personalizzata. Questa caratteristica si chiama

  • La scheda Script personalizzato in Dynamic Gets.
  • La scheda Script in Campi.
  • Frammenti.
  • Segnaposti.

Parte del codice personalizzato ora finisce nei metodi helper statici; potrebbe essere un miglioramento se fosse possibile aggiungere metodi direttamente alla parte modello del MVC.

Gli snippet possono essere condivisi e molti di essi sono disponibili. Esiste tuttavia una politica che prevede un approccio più strutturato alla condivisione del codice, aggiungendo classi con namespace al posto degli snippet, utilizzando un identificatore univoco universale (UUID = identificatore univoco globale o GUID nel linguaggio Microsoft). Questo viene fatto con i "POTERI".

Power, Joomla Power e Super Power

Le classi esterne possono essere aggiunte al componente tramite i cosiddetti Power. Vengono inseriti in una cartella di libreria e il caricamento automatico è gestito da JCB. Anche le classi Joomla possono essere inserite in questo modo: Joomla Power. L'idea era di distribuirli con il componente e, in seguito, di poterli utilizzare anche senza Joomla. Questi Power possono essere inseriti nei repository Git sui server come blocchi costitutivi distribuiti: Super Power. Possono essere scaricati automaticamente da questi repository Git per integrare facilmente il codice personalizzato o altri software, come ad esempio le API Gitea o OpenAI, nei componenti. Consulta questa wiki sui Super Power per le specifiche.

Questi Super Power dispongono di un'utile documentazione dei loro metodi generata automaticamente.

Poteri, Poteri Joomla e Super Poteri

Miglioramenti futuri

JCB sta passando dagli ID ad incremento automatico agli UUID. Questo offre ottime possibilità per lo scambio di codice e dati, poiché non è più necessario sincronizzare gli ID su installazioni diverse. L'obiettivo è rendere JCB uno strumento più potente, scalabile e orientato alla community per gli sviluppatori Joomla.

"Funzionalità" utilizzate in JCB

Nel quarto episodio di questa serie ho elencato le funzionalità integrate in Joomla e utilizzabili nel nostro componente. Quali di queste vengono utilizzate da Joomla Component Builder?

1. Language strings
2. General parameters
3. Item ordering
4. Alias handling
5. Locking, check-out
6. Filters & search in list view
7. Custom Form Fields = Developer defined field types
8. Column sorting in list view
9. Trash
10. Batch processing
11. Categories
12. Tags
13. Pagination
14. Form validation
15. Access Control Lists (ACL)
16. Additional Fields = User defined “Custom fields”
17. Multilingual association
18. Hide table columns in admin list view
19. Versioning
20. Adding extra toolbar buttons *
21. Hits, rating
22. Router / SEF URLs
23. Workflow *
24. Metadata
25. Email cloak *
26. Finder plugins *
27. Help pages
28. Action logs *
29. Module as extra view
30. Add plugins
31. Web services / API *
32. CLI *

*) Non sono stati esaminati a fondo per questo articolo

Un sacco di spunte verdi! JCB può farlo!

admin tabs custom code 

Joomla Component Builder

  • Potente strumento per sviluppatori Joomla con molte possibilità, completamente gratuito e open source. Hai bisogno di competenze di codifica di base e una comprensione di Joomla Components.
  • Può essere utilizzato per realizzare qualsiasi componente Joomla. Ha anche possibilità complete per creare un frontend personalizzato, come il nostro programma di eventi di esempio.
  • Al momento è possibile produrre un componente per Joomla 3, 4 e 5. La modularizzazione degli elementi costitutivi contribuirà a un rapido adeguamento alle future versioni di Joomla.
  • Il codice prodotto è standard Joomla, ma non il più piccolo che sarebbe possibile implementare il componente. Questo è anche perché si ottengono utilità extra (in parte con metodi di aiuto statico). Alcune caratteristiche speciali, non integrate nel core Joomla (come l'auto-checkin) sono possibili.
  • Può utilizzare Git, sia per i componenti prodotti che per i blocchi da costruzione riutilizzabili. Più di 100 ore di video come documentazione; nuovi prodotti regolarmente. La maggior parte dei video sono indicizzati per trovare facilmente un argomento.
  • È in fase di sviluppo attivo e ha una visione forte e autentica della cooperazione e della distribuzione di elementi costitutivi per i componenti nei pronti contro termine pubblici di Git.

IL PROSSIMO MESE

Nel prossimo episodio (edizione febbraio 2025) vedremo un altro strumento gratuito, più piccolo ma promettente. A marzo chiuderemo questa serie e valuteremo gli episodi precedenti.

RISORSE

Joomla Component Builder:

Building a component:

Articles in this series about Tools to build a Component:

Extra material like the code for our example event schedule component can be found in the repository for this series.

Alcuni articoli pubblicati sul Joomla Community Magazine rappresentano l'opinione personale o l'esperienza dell'Autore sull'argomento specifico e potrebbero non essere allineati alla posizione ufficiale del Progetto Joomla