Skip to main content

Usiamo ChatGPT per creare un semplice modulo per Joomla4

| Gianluca Gabella | Joomla!
share on facebook share on twitter share on linkedin

Indice:


ChatGPT è sulla bocca di tutti: può fare conversazione, creare testi, riassumere contenuti e scrivere sceneggiature. Ma può anche inventare e implementare codice: vediamo come se la cava con il PHP e il framework di Joomla4!

Che cos'è ChatGPT?

Per chi fosse rimasto sconnesso dal pianeta terra nell'ultimo mese (o per chi arriva su questo post tra 10 anni...) faccio un piccolo riassunto della situazione attuale: da qualche settimana impazza nel web il tool ChatGPT sviluppato da OpenAI che permette, sotto forma di conversazione, di creare testi e chiedere di tutto e di più ad un'Intelligenza Artificiale, che risponde come può. I testi che genera vanno dal soprendente all'abbozzato, a volte anche con errori logici e di contenuti non indifferenti, ma non si può negare che sia uno strumento interessantissimo e che getta le basi per il nostro futuro rapporto con l'Intelligenza Artificiale.

Per chattare con ChatGPT basta cliccare qui: https://chat.openai.com/ e registrarsi

Come possiamo farci aiutare da un'AI nel nostro lavoro?

Nonostante in molti si dicano preoccupati ("ci ruberà il lavoro!", "sarà impossibile continuare a lavorare con una concorrenza così!", ...) trovo che questo strumento sia in realtà un'opportunità gigantesca, da capire bene e da usare nei modi giusti. Ovviamente non possiamo dirgli semplicemente "crea questo testo" o "genera un claim accattivante": la creatività umana è ancora molte spanne sopra i risultati che si ottengono con ChatGPT, ma di sicuro possiamo farci dare una mano.

Per esempio nel generare del codice.

Quante volte abbiamo spulciato internet per cercare un modo di generare una stringa Regex? Bene, ChatGPT può crearcela in meno di 10 secondi.
Quante volte siamo finiti su StackOverflow a cercare risposte su un determinato errore di compilazione? Bene, con ChatGPT si può avere un debug approfondito del codice in poco tempo.

A questo punto, come possiamo farci aiutare a scrivere, per esempio, un semplice modulo per Joomla?

Cosa sono le estensioni di Joomla e come si suddividono?

Per prima cosa cerchiamo di capire cosa vuol dire "modulo di Joomla".

Il famoso CMS si basa su delle estensioni che possono essere suddivise in:

  • Componenti
  • Plugin
  • Moduli

I componenti sono dei pacchetti (che possono anche contenere moduli e plugin collegati) che servono ad aggiungere nuove funzionalità ad un CMS. Per esempio Virtuemart è un componente che serve ad aggiungere la funzionalità e-commerce ad un sito Joomla.

I plugin sono delle funzioni che possono essere chiamate in un qualsiasi momento di generazione di una pagina di Joomla, sia frontend che backend. Sono "agganciati" a dei trigger events: ossia possono essere richiamati quando succede una determinata cosa. Esempio: ci sono dei plugin che "partono" solo quando un utente si registra. Al loro interno ci saranno quindi funzioni che sono chiamate solo quando si verifica l'evento "registrazione utente".

I moduli invece sono le estensioni più semplici di Joomla. Sono dei "blocchi di codice" che possono anche essere stand-alone e possono essere caricati dal template frontend in un qualsiasi punto della pagina. Per esempio il modulo più comune è quello che in italiano è chiamato "personalizzato" e mette a disposizione semplicemente un editor di testo: possiamo creare questo modulo e caricarlo nella colonna laterale (per esempio) del nostro sito, in qualsiasi pagina desideriamo.

Creiamo un semplice modulo con ChatGPT

Per questo test ho voluto creare semplicemente un modulo per vari motivi:

  • Prima di tutto perchè richiede meno codice rispetto ad un componente o ad un plugin;
  • Perchè è più facile testarlo "in diretta";
  • Perchè in generale è molto più facile aver bisogno di un modulo "cotto e mangiato" e non di un plugin o (peggio) un componente che richiedono tempo e buone skill di programmazione.

Bene, cominciamo.

Per prima cosa ho chiesto a ChatGPT: "mi puoi creare un modulo di Joomla4 che stampa una lista di tutti gli utenti iscritti?"

La risposta è stata generica:

risposta chat gpt

La risposta è corretta (nel senso che "funziona"), ma non è ottimale: Joomla utilizza il paradigma MVC che richiede una struttura ben definita. Questo vuol dire che c'è bisogno anche di un template (di cui può essere in futuro creato l'override) ed eventualmente di un file helper.php per la gestione delle funzioni.

Di queste cose non c'è traccia. 

Ma andiamo avanti, vogliamo proprio vedere del codice. Vediamo cos'è in grado di produrre ChatGPT, quindi gli ho chiesto: "mi puoi scrivere tu il codice php?"

A questo punto siamo andati più nello specifico, ecco la risposta: 

risposta chatgpt codicephp

Nel caso in cui vogliate testare voi stessi il risultato ecco il codice scritto qui sopra da copiare/incollare:

defined('_JEXEC') or die;

class ModUserListHelper
{
    public static function getUsers()
    {
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query->select('id, name, username, email');
        $query->from($db->quoteName('#__users'));
        $db->setQuery($query);
        $results = $db->loadObjectList();
        return $results;
    }
}

Ottimo, abbiamo del codice!

Non sappiamo ancora però se funziona o meno (in realtà un'idea possiamo già farcela, ma non possiamo testarla con mano). Per farlo dobbiamo avere tutto il necessario per creare un vero e proprio modulo Joomla.

Generiamo il file XML

La prima cosa di cui abbiamo bisogna per poter installare un'estensione di Joomla è un file XML in cui all'interno mettiamo tutte le informazioni della nostra estensioni.
Gli ho chiesto di generarmi anche l'XML usando come nome del modulo "Lista tutti gli utenti":

xml modulo chat gpt

Il codice generato è il seguente (aspetta a copiarlo! C'è un errore che risolviamo poco più sotto!):

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" method="upgrade">
    <name>Lista tutti gli utenti</name>
    <author>Tu nome</author>
    <creationDate>Oggi</creationDate>
    <copyright>Copyright (C) 2023 Tu nome. Tutti i diritti riservati.</copyright>
    <license>GNU General Public License version 2 o successiva</license>
    <authorEmail>La tua email</authorEmail>
    <authorUrl>Il tuo sito web</authorUrl>
    <version>1.0.0</version>
    <description>Modulo che stampa una lista di tutti gli utenti iscritti.</description>
    <files>
        <filename module="mod_userlist">mod_userlist.php</filename>
        <filename>mod_userlist.xml</filename>
    </files>
    <config>
    </config>
</extension>

Ovviamente dobbiamo andare a modificare tutti i campi XML che sono stati generati con dei placeholder, quindi <creationDate>, <authorEmail>, ecc...

Ora ho due file:

  • Un PHP con il codice generato da chat GPT
  • Un XML con tutte le informazioni necessarie  

Non ho però indicazioni su come devono essere chiamati questi file e come fare per installare effettivamente il pacchetto su un Joomla4.
Poco male: per definizione i file devono essere almeno due:

  • mod_userlist.php
  • mod_userlist.xml

(come in realtà è suggerito all'interno dell'XML generato) e devono essere all'interno di un archivio chiamato mod_userlist.zip 

Installiamo il modulo su un sito Joomla 4

Bene, abbiamo ora il nostro ZIP con i due file all'interno. Se proviamo ad installarlo riceviamo un errore:

errore installazione modulo

Facendo un po' di debug ho scoperto che manca un attributo del tag "extension" dell'XML -> client="site":

<extension type="module" version="4.0" method="upgrade" client="site" >

Una volta inserito nell'XML originale, il modulo si installa correttamente:

modulo lista di tutti gli utenti

Testiamo il nostro modulo

Il modulo generato da ChatGPT è ovviamente e volutamente molto basico: se entrate nel modulo non troverete opzioni e configurazioni varie.
Poco male: creare un modulo complesso o "perfetto" non è lo scopo di questa guida, ci serve solo sapere se ChatGPT è "in grado di rubarci il lavoro" :-D

Pubblichiamo quindi il modulo e assegnamolo su tutte le pagine.

Se proviamo a caricare il modulo in una nostra pagina web però non verrà visualizzato nulla. Come mai?

In realtà era previsto: il pezzo di codice PHP indicato da ChatGPT non genera nessun output. Fa una query al database e salva i risultati nella variabile $results.
A questo punto l'unico modo per "vedere" se funziona è modificare il PHP in modo che generi un qualche tipo di output.

Ma facciamolo fare a ChatGPT!

modulo lista di tutti gli utenti completo

Ecco il nostro codice completo di output!

Potete decidere voi se metterlo dentro ad un nuovo zip e reinstallare il pacchetto o semplicemente cambiare il file PHP sul server con un programma tipo FileZilla.

Se tutto è andato nel verso giusto ora il vostro modulo è installato, funzionante e visibile da frontend! (ho mascherato i nomi utenti per sicurezza, ma sono stati correttamente stampati)

output modulo chatgpt

Conclusioni

  • ChatGPT è riuscito a creare da zero un modulo per Joomla4?
    Tecnicamente no: ha generato un errore nell'XML che non permetteva l'installazione del modulo. Abbiamo dovuto correggerlo a mano per evitare errori "Internal Server Error" durante l'installazione.

  • ChatGPT mi ha dato una mano nella creazione del modulo?
    Assolutamente SI! Tutta la parte di codice PHP è corretta, nel senso che fa quello che deve: stampare una lista degli utenti del sito web.

  • Il modulo creato, che funziona, è fatto a regola d'arte?
    No
    , siamo molto lontani da un modulo fatto come si deve: tutta la parte MVC e del template (per gli override) è stata ignorata e un modulo fatto in questo modo dimostra decisamente scarsa conoscenza del framework di Joomla.

  • Ma quindi ChatGPT mi ruberà il lavoro?
    Se sei un programmatore che fa le cose in fretta senza studiarle, implementarle a regola d'arte e testarle, forse si... se sei uno sviluppatore che segue le buone regole di programmazione di un'estesione Joomla allora puoi stare tranquillo, ChatGPT non ti ruberà il lavoro ma sicuramente potrà darti una mano per creare query complesse o regole Regex! :-)

Se ti è piaciuto questo articolo, condividilo!

share on facebook share on twitter share on linkedin
condividi su Facebookcondividi su Twittercondividi su LinkedIncondividi su WhatsAppcondividi su Telegram