J4.x: Creazione di un semplice modulo
From Joomla! Documentation
Questo è un tutorial su come creare un modulo semplice per la versione di Joomla 4x.
Introduzione
Joomla! 4 offre cinque tipi di estensioniː
- Componenti
Un componente è la parte principale del sito. Un componente gestisce la manipolazione dei dati così come l'input e l'archiviazione nel database. Un componente nella maggior parte dei siti è l'obiettivo principale della pagina. - Moduli
Un modulo è un componente aggiuntivo del sito che estende la funzionalità. Un modulo di solito occupa una porzione secondaria della pagina Web e non è considerato l'obiettivo principale di una pagina. Può essere visualizzato su diverse posizioni e puoi scegliere su quali voci di menu attive dovrebbe essere visualizzato. I moduli sono estensioni leggere e flessibili. Sono usati per piccoli bit della pagina che sono generalmente meno complessi e possono essere visti attraverso diversi componenti. - Plugins
Un plugin manipola l'output che è già stato generato dal sistema. In genere non viene eseguito come parte separata del sito. Prende dati da altre fonti (ad esempio il contenuto) e manipola questi dati prima di visualizzarli. Un plugin in genere funziona dietro le quinte. - Le lingue
Probabilmente le estensioni più basilari sono le lingue. In sostanza i file del pacchetto linguistico consistono in coppie chiave / valore, che forniscono la traduzione di stringhe di testo statiche, assegnate all'interno di Joomla! codice sorgente. - Templates
Un template è fondamentalmente il design del tuo sito web Joomla!.
Joomla! 4 è costruito usando cinque diverse applicazioni:
- Installazione (utilizzata per l'installazione di Joomla e deve essere cancellata dopo l'installazione)
- Amministratore (back-end - utilizzato per la gestione del contenuto);
- Pubblico o sito (frontend - utilizzato per la visualizzazione di contenuti);
- CLI (utilizzato per accedere a Joomla sulla riga di comando e per i lavori cron);
- API (servizi Web - utilizzati per creare API per contenuti accessibili dal computer):
L'applicazione di installazione viene utilizzata una volta. La parte di amministratore e la parte pubblica sono utilizzate attraverso il concetto di componenti con moduli . Ogni modulo ha un unico punto di ingresso situato nei moduli e di conseguenza nella directory administrator/modules . Questo punto di ingresso è chiamato mod_modulename/mod_modulename.php (il prefisso mod_ è una traccia storica). Il punto di ingresso per il modulo di accesso è ad esempio /mod_login/mod_login.php
Requisiti
Hai bisogno di Joomla! Installazione 4.x disponibile per l'uso per questo tutorial (Download l'ultima versione qui)
Puoi scaricare Joomla! 4 su GitHub, sul Developer website oppure puoi creare un sito Web gratuito su https://launch.joomla.org.
Creazione di un semplice modulo / Sviluppo di un modulo base - Parte 1
Puoi vedere molti esempi di moduli nell'installazione standard di Joomla!. Per esempio:
- Menù
- Ultime notizie
- Modulo di accesso
- e molti altri.
Questo tutorial spiegherà come creare un modulo semplice. Attraverso questo tutorial imparerai la struttura di base dei file di un modulo Joomlaǃ 4. Questa struttura di base può quindi essere ampliata per produrre moduli più elaborati
Struttura del file
Ci sono alcuni file di base che vengono utilizzati nel modello standard di sviluppo del modulo:
- mod_foo.php - Questo file è il punto di ingresso principale per il modulo. Eseguirà tutte le routine di inizializzazione necessarie, chiamerà le routine di supporto per raccogliere tutti i dati necessari e includerà il modello che visualizzerà l'output del modulo.
- mod_foo.xml - Questo file contiene informazioni sul modulo. Definisce i file che devono essere installati da Joomla! installatore e specifica i parametri di configurazione per il modulo.
- tmpl/default.php - Questo è il modulo del template. Questo file prenderà i dati raccolti da mod_foo.php e genererà l'HTML da visualizzare nella pagina.
- language/en-GB/mod_foo.ini e language/en-GB/mod_foo.sys.ini - Questi sono i file che forniscono il testo in inglese del Regno Unito.
Creazione di mod_foo.php
Il file mod_foo.php eseguirà le seguenti attività:
- Importa la classe ModuleHelper nell'ambito corrente. Ne abbiamo bisogno in seguito per visualizzare l'output.
- Includere il modello per visualizzare l'output
La classe helper viene importata nel nostro scope corrente all'inizio del file
use Joomla\CMS\Helper\ModuleHelper;
Infine includiamo il modello per visualizzare l'output tramite
require ModuleHelper::getLayoutPath('mod_foo', $params->get('layout', 'default'));
File mod_foo.php completo
Il file mod_foo.php completo è il seguente:
<?php
/**
* @package [PACKAGE_NAME]
*
* @author [AUTHOR] <[AUTHOR_EMAIL]>
* @copyright [COPYRIGHT]
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @link [AUTHOR_URL]
*/
// No direct access to this file
defined('_JEXEC') or die;
use Joomla\CMS\Helper\ModuleHelper;
require ModuleHelper::getLayoutPath('mod_foo', $params->get('layout', 'default'));
Nota a margineː In Joomla 3x di solito usavi una linea tipo questa $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));. Non hai più bisogno di questo. Vedi questo PRː https://github.com/joomla/joomla-cms/pull/17447.
L'unica riga che non abbiamo spiegato finora è la prima riga defined('_JEXEC') or die;. Questa riga verifica che questo file sia incluso dall'applicazione Joomla. Ciò è necessario per prevenire l'iniezione di variabili e altri potenziali problemi di sicurezza
Creazione di tmpl/default.php
Il file default.php è il modello che mostra l'output del modulo.
File tmpl/default.php completo
Il codice per il file tmpl/default.php è il seguente:
<?php
/**
* @package [PACKAGE_NAME]
*
* @author [AUTHOR] <[AUTHOR_EMAIL]>
* @copyright [COPYRIGHT]
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @link [AUTHOR_URL]
*/
// No direct access to this file
defined('_JEXEC') or die;
echo '[PROJECT_NAME]';
Un punto importante da notare è che il file modello ha lo stesso ambito del file mod_foo.php file.Significa che una variabile può essere definita nel file mod_foo.php e quindi utilizzata nel file modello senza dichiarazioni aggiuntive o chiamate di funzione.
Creazione di mod_foo.xml
Il file mod_foo.xml è il file di installazione. La maggior parte delle voci sono autoesplicative.
File mod_foo.xml completo
Il codice per il file mod_foo.xml è il seguente:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" client="site" method="upgrade">
<name>MOD_FOO</name>
<creationDate>[DATE]</creationDate>
<author>[AUTHOR]</author>
<authorEmail>[AUTHOR_EMAIL]</authorEmail>
<authorUrl>[AUTHOR_URL]</authorUrl>
<copyright>[COPYRIGHT]</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<version>1.0</version>
<description>MOD_FOO_XML_DESCRIPTION</description>
<files>
<filename module="mod_foo">mod_foo.php</filename>
<folder>tmpl</folder>
<folder>language</folder>
<filename>mod_foo.xml</filename>
</files>
</extension>
Crea i file della lingua
I files language/en-GB/mod_foo.ini e language/en-GB/mod_foo.sys.ini sono usati per tradurre il testo nel frontend e nel backend. Nota che la struttura del file della lingua è stata aggiornata in Joomla 4 e i prefissi della lingua sui singoli file in una cartella della lingua non sono più necessari
Il codice per language/en-GB/mod_foo.sys.ini è il seguente:
MOD_FOO="[PROJECT_NAME]"
MOD_FOO_XML_DESCRIPTION="Foo Module"
Il codice per language/en-GB/mod_foo.ini è il seguente:
MOD_FOO="[PROJECT_NAME]"
MOD_FOO_XML_DESCRIPTION="Foo Module"
Il file .sys.ini viene utilizzato per tradurre la descrizione dell'estensione al momento dell'installazione, mentre il file .ini viene utilizzato per tradurre le stringhe rimanenti e la descrizione durante la visualizzazione dell'estensione.
Ulteriori informazioni sui file di lingua sono disponibili here.
Metti alla prova il tuo modulo
Ora puoi comprimere tutti i file e installarli tramite Joomla Extension Manager. Dopodiché puoi scegliere il tuo modulo nel gestore moduli, quando crei un nuovo modulo del sito.


Nel frontend, vedrai il tuo modulo come mostrato nell'immagine successiva

Conclusione
Lo sviluppo del modulo per Joomla è un processo abbastanza semplice e diretto. Utilizzando le tecniche descritte in questo tutorial, è possibile sviluppare una varietà infinita di moduli con poca fatica
Puoi trovare i boilerplate quiː
I file di esempio per questo Tutorial possono essere trovati quiː
Aggiungi una classe helper usando gli spazi dei nomi - Parte 2
Requisiti
Hai bisogno di Joomla! 4.x per questo tutorial (come di scrivere attualmente Joomla! 4.0.0.0-alpha6-dev)
Namespaces
Con PHP 5.3, gli spazi dei nomi sono diventati propri. In altri linguaggi di programmazione in uso da molto tempo, queste piccole strutture ora ci aiutano anche con la chiarezza del nostro codice
I namespace sono aree separate in cui possono vivere determinate cose logiche (nel nostro caso, classi, interfacce, funzioni e costanti). Queste aree forniscono l'incapsulamento del codice e prevengono i conflitti di nome
Diamo un'occhiata a come usarli in Joomla 4. Usiamo il file helper per questo
Struttura del file
Creeremo/modificheremo i seguenti file:
Helper/FooHelper.php
- Questo è il file che utilizziamo qui come esempio. Dobbiamo crearlomod_foo.php
- In questo file caricheremo principalmente lo spazio dei nomi.tmpl/default.php
- In questo file dimostreremo come possono essere visualizzati i dati dell'Helper.mod_foo.xml
- Creiamo una nuova directory con un nuovo file. Questo deve essere installato durante l'installazione. Per questo dobbiamo specificarli in questo file.
Creazione di Helper/FooHelper.php
La nostra nuova classe helper dovrebbe appartenere a uno spazio dei nomi. Otteniamo questo con il codice seguente. È importante che questa riga sia all'inizio del file
namespace Joomla\Module\Foo\Site\Helper;
Quindi creiamo una classe semplice con un metodo semplice. Ovviamente puoi fare molto di più qui. Dai un'occhiata ai metodi principali di Joomla. Ecco molti esempi. Ti mostrano in prima persona quali opzioni hai
File completo Helper/FooHelper.php
Il file FooHelper.php completo è il seguente:
<?php
/**
* @package Joomla.Site
* @subpackage mod_foo
*
* @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Module\Foo\Site\Helper;
// No direct access to this file
defined('_JEXEC') or die;
/**
* Helper for mod_foo
*
* @since 4.0
*/
class FooHelper
{
/**
* Retrieve foo test
*
* @param Registry $params The module parameters
* @param CMSApplication $app The application
*
* @return array
*/
public static function getText()
{
return 'FooHelpertest';
}
}
Modifica mod_foo.php
La nostra nuova classe helper viene importata nel nostro scope corrente all'inizio del file.
use Joomla\Module\Foo\Site\Helper\FooHelper;
Infine, usa il file di supporto per verificare se è stato caricato correttamenteː
$test = FooHelper::getText($params, $app);
File mod_foo.php completo
Il file mod_foo.php completo è il seguente:
<?php
/**
* @package [PACKAGE_NAME]
*
* @author [AUTHOR] <[AUTHOR_EMAIL]>
* @copyright [COPYRIGHT]
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @link [AUTHOR_URL]
*/
// No direct access to this file
defined('_JEXEC') or die;
use Joomla\CMS\Helper\ModuleHelper;
use Joomla\Module\Foo\Site\Helper\FooHelper;
$test = FooHelper::getText();
require ModuleHelper::getLayoutPath('mod_foo', $params->get('layout', 'default'));
Modifica tmpl/default.php
In questo file apporti solo una piccola modifica per dimostrare nel frontend che il tuo file helper funziona correttamente. Si aggiunge solo il valore della variabile alla fine dell'output corrente
echo '[PROJECT_NAME]' . $test;
File tmpl/default.php completo
Il file tmpl/default.php completo è il seguente:
<?php
/**
* @package [PACKAGE_NAME]
*
* @author [AUTHOR] <[AUTHOR_EMAIL]>
* @copyright [COPYRIGHT]
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @link [AUTHOR_URL]
*/
// No direct access to this file
defined('_JEXEC') or die;
echo '[PROJECT_NAME]' . $test;
Modifica mod_foo.xml
Per prima cosa devi aggiungere una riga, in modo che lo spazio dei nomi sia impostato automaticamente in Joomla. Dopo questa modifica, è necessario reinstallare il modulo. Una semplice modifica in un modulo già installato non è sufficiente. Se stai facendo lo sviluppo locale puoi anche eliminare i file library/autoload_psr4.php e verrà ricreato automaticamente. Dopo l'inserimento e l'installazione, lo spazio dei nomi è noto al caricatore JPATH_LIBRARIES . '/autoload_psr4.php'.
<namespace>Joomla\Module\Foo</namespace>
Joomla! dovrebbe copiare il file di supporto durante l'installazione del modulo. Allora Joomla! ha bisogno di conoscere il tuo file di supporto. Per questo, devi aggiungere la seguente riga al tuo file XML
<folder>Helper</folder>
mod_foo.xml completo
Il file mod_foo.xml completo è il seguente:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" client="site" method="upgrade">
<name>MOD_FOO</name>
<creationDate>[DATE]</creationDate>
<author>[AUTHOR]</author>
<authorEmail>[AUTHOR_EMAIL]</authorEmail>
<authorUrl>[AUTHOR_URL]</authorUrl>
<copyright>[COPYRIGHT]</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<version>1.0</version>
<description>MOD_FOO_XML_DESCRIPTION</description>
<namespace>Joomla\Module\Foo</namespace>
<files>
<filename module="mod_foo">mod_foo.php</filename>
<folder>tmpl</folder>
<folder>Helper</folder>
<folder>language</folder>
<filename>mod_foo.xml</filename>
</files>
</extension>
Metti alla prova il tuo modulo
Ora puoi comprimere tutti i file e installarli tramite Joomla Extension Manager. Dopodiché puoi scegliere il tuo modulo nel gestore moduli, quando crei un nuovo modulo del sito
Nel frontend vedrai il tuo modulo come mostrato nell'immagine successiva. Viene visualizzato il testo del tuo file di supporto

Conclusione
Come puoi vedere, una volta entrati nei namespace, non sono più così complicati. Nei grandi progetti possono portare molti benefici. Tuttavia, dovremmo pianificare gli spazi dei nomi, altrimenti sarà presto più dispendioso in termini di tempo.
Puoi trovare boilerplate quiː
I file di esempio per questo Tutorial possono essere trovati quiː
Personalizzazioneː Aggiungi parametri tramite i campi del modulo - Parte 3
Requisiti
Hai bisogno di Joomla! 4.x per questo tutorial (come di scrivere attualmente Joomla! 4.0.0.0-alpha6-dev)
Personalizzazione con campi modulo e parametri
I campi del modulo offrono una grande quantità di personalizzazione in Joomla e per i moduli sono l'unico modo per consentire all'utente di modificare il modulo in base alle esigenze del proprio sito
In questo caso estenderemo il nostro esempio precedente utilizzando un campo url per inserire un dominio che possiamo utilizzare come link nel front-end. Per consentire che ciò avvenga, utilizzeremo il tipo di URL Form Field type.
Successivamente, inseriamo parametri che consentono di utilizzare le funzionalità standard di Joomla
Diamo un'occhiata a come usarli in Joomla 4
Struttura del file
Creeremo/modificheremo i seguenti file:
- mod_foo.xml - Questo è il file in cui aggiungiamo i campi.
- tmpl/default.php - In questo file mostra come possono essere utilizzati i dati di un campo.
- language/en-GB/en-GB.mod_foo.ini - Qui utilizziamo una stringa di lingua in modo che il campo possa essere etichettato correttamente in diverse lingue.
Modifica mod_foo.xml
Per prima cosa impostiamo un parametro personalizzato.
<field
name="domain"
type="url"
label="MOD_FOO_FIELD_URL_LABEL"
filter="url"
/>
Quindi inseriamo i campi predefiniti di Joomla, in modo da poter utilizzare cache, moduleclass-suffix e layout
<field
name="layout"
type="modulelayout"
label="JFIELD_ALT_LAYOUT_LABEL"
class="custom-select"
/>
<field
name="moduleclass_sfx"
type="textarea"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
rows="3"
/>
<field
name="cache"
type="list"
label="COM_MODULES_FIELD_CACHING_LABEL"
default="0"
>
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field
name="cache_time"
type="number"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
default="0"
/>
<field
name="cachemode"
type="hidden"
default="itemid"
>
<option value="itemid"></option>
</field>
mod_foo.xml completo
Il file mod_foo.xml completo è il seguente:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" client="site" method="upgrade">
<name>MOD_FOO</name>
<creationDate>[DATE]</creationDate>
<author>[AUTHOR]</author>
<authorEmail>[AUTHOR_EMAIL]</authorEmail>
<authorUrl>[AUTHOR_URL]</authorUrl>
<copyright>[COPYRIGHT]</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<version>1.0</version>
<description>MOD_FOO_XML_DESCRIPTION</description>
<namespace>Joomla\Module\Foo</namespace>
<files>
<filename module="mod_foo">mod_foo.php</filename>
<folder>tmpl</folder>
<folder>Helper</folder>
<folder>language</folder>
<filename>mod_foo.xml</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field
name="domain"
type="url"
label="MOD_FOO_FIELD_URL_LABEL"
filter="url"
/>
</fieldset>
<fieldset name="advanced">
<field
name="layout"
type="modulelayout"
label="JFIELD_ALT_LAYOUT_LABEL"
class="custom-select"
/>
<field
name="moduleclass_sfx"
type="textarea"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
rows="3"
/>
<field
name="cache"
type="list"
label="COM_MODULES_FIELD_CACHING_LABEL"
default="0"
>
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field
name="cache_time"
type="number"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
default="0"
/>
<field
name="cachemode"
type="hidden"
default="itemid"
>
<option value="itemid"></option>
</field>
</fieldset>
</fields>
</config>
</extension>
Modifica tmpl/default.php
Possiamo usare il valore del parametro per creare un collegamento ipertestuale nel frontend. Possiamo accedere al valore tramite la variabile $params.
$domain = $params->get('domain', 'https://www.joomla.org');
Successivamente impostiamo l'utilizzo di questo valore per la creazione del collegamento ipertestuale
<a href="<?php echo $domain; ?>">
<?php echo '[PROJECT_NAME]' . $test; ?>
</a>
File tmpl/default.php completo
Il file tmpl/default.php completo è il seguente:
<?php
/**
* @package [PACKAGE_NAME]
*
* @author [AUTHOR] <[AUTHOR_EMAIL]>
* @copyright [COPYRIGHT]
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @link [AUTHOR_URL]
*/
// No direct access to this file
defined('_JEXEC') or die;
$domain = $params->get('domain', 'https://www.joomla.org');
?>
<a href="<?php echo $domain; ?>">
<?php echo '[PROJECT_NAME]' . $test; ?>
</a>
Modifica language/en-GB/en-GB.mod_foo.ini
Qui possiamo specificare il testo per la versione inglese dell'etichetta del campo
MOD_FOO_FIELD_URL_LABEL="Url"
File completo language/en-GB/en-GB.mod_foo.ini
Il codice per language/en-GB/mod_foo.ini è il seguente:
MOD_FOO="[PROJECT_NAME]"
MOD_FOO_XML_DESCRIPTION="Foo Module"
MOD_FOO_FIELD_URL_LABEL="Url"
Metti alla prova il tuo modulo
Ora puoi comprimere tutti i file e installarli tramite Joomla Extension Manager. Dopodiché puoi scegliere il tuo modulo nel gestore moduli, quando crei un nuovo modulo del sito
Nel backend, vedrai il tuo modulo come mostrato nell'immagine successiva
Nella scheda di base, vedrai il campo personalizzato in cui puoi inserire un dominio. Il testo dell'etichetta viene recuperato dal file della lingua

Nel tab Avanzate, potrai vedere tutte le ozioni di default tranne la cache mode perchè è un campo nascosto

Nella scheda Avanzate, vedrai tutte le opzioni predefinite tranne la modalità cache perché questo è un campo nascosto

Conclusione
I campi del modulo offrono all'utente un modo semplice per personalizzare il modulo in base alle impostazioni dei siti. Questo permette di aumentare l'ambito dei moduli.
Puoi trovare boilerplate quiː
I file di esempio per questo Tutorial possono essere trovati all'indirizzo hereː
Vedere questo numero per eventuali cambiamenti futuri:
Usa lo script Installa, Aggiorna e Disinstalla - Parte 4
Requisiti
Hai bisogno di Joomla! 4.x per questo tutorial (come di scrivere attualmente Joomla! 4.0.0.0-alpha6-dev)
Scripts
L'installazione, l'aggiornamento e la disinstallazione di un modulo possono richiedere operazioni aggiuntive che non possono essere eseguite dalle operazioni di base descritte nel file XML principale. Joomla offre un nuovo approccio per risolvere questo problema. Consiste nell'utilizzare un file di script PHP contenente una classe utilizzando cinque metodi
- preflight che viene eseguito prima dell'installazione e dell'aggiornamento
- install
- update
- uninstall
- postflight che viene eseguito dopo l'installazione e l'aggiornamento
Diamo un'occhiata a come usarli in Joomla 4. Usiamo il file helper per questo
Struttura del file
Creeremo/modificheremo i seguenti file:
- script.php - Questo è il file che utilizziamo qui come esempio. Dobbiamo crearlo.
- language/en-GB/en-GB.mod_foo.sys.ini - In questo file aggiungeremo del testo.
- mod_foo.xml - Creiamo un nuovo file. Questo deve essere installato durante l'installazione. Per questo dobbiamo specificarlo in questo file.
Creazione script.php
Scrivere uno script di estensione consiste nel dichiarare una classe il cui nome è mod_ModuleNameInstallerScript con questi 5 metodi. Vedere i commenti nel file per ulteriori informazioni. In questo commento spiego quando viene chiamato un metodo.
In questo esempio, utilizzo solo il testo per mostrare quando verrà eseguito quale metodo. Inoltre, ti mostro come verificare i requisiti minimi. Ovviamente puoi fare molto di più. Ad esempio, puoi eliminare i file che non sono più necessari in una nuova versione del tuo modulo. Questo può essere visto nel file. Un'altra idea per questo file è quella di creare un contenuto di esempio, per mostrare un messaggio di successo con il numero della versione attualmente installata oppure è possibile reindirizzare dopo un'installazione riuscita alla pagina con le impostazioni del modulo
script.php completo
Il file script.php completo è il seguente:
<?php
/**
* @package [PACKAGE_NAME]
*
* @author [AUTHOR] <[AUTHOR_EMAIL]>
* @copyright [COPYRIGHT]
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @link [AUTHOR_URL]
*/
// No direct access to this file
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
/**
* Script file of Foo module
*/
class mod_fooInstallerScript {
/**
* Extension script constructor.
*
* @return void
*/
public function __construct() {
$this->minimumJoomla = '4.0';
$this->minimumPhp = JOOMLA_MINIMUM_PHP;
}
/**
* Method to install the extension
*
* @param InstallerAdapter $parent The class calling this method
*
* @return boolean True on success
*/
function install($parent) {
echo Text::_('MOD_FOO_INSTALLERSCRIPT_INSTALL');
return true;
}
/**
* Method to uninstall the extension
*
* @param InstallerAdapter $parent The class calling this method
*
* @return boolean True on success
*/
function uninstall($parent) {
echo Text::_('MOD_FOO_INSTALLERSCRIPT_UNINSTALL');
return true;
}
/**
* Method to update the extension
*
* @param InstallerAdapter $parent The class calling this method
*
* @return boolean True on success
*/
function update($parent) {
echo Text::_('MOD_FOO_INSTALLERSCRIPT_UPDATE');
return true;
}
/**
* Function called before extension installation/update/removal procedure commences
*
* @param string $type The type of change (install, update or discover_install, not uninstall)
* @param InstallerAdapter $parent The class calling this method
*
* @return boolean True on success
*/
function preflight($type, $parent) {
// Check for the minimum PHP version before continuing
if (!empty($this->minimumPhp) && version_compare(PHP_VERSION, $this->minimumPhp, '<')) {
Log::add(Text::sprintf('JLIB_INSTALLER_MINIMUM_PHP', $this->minimumPhp), Log::WARNING, 'jerror');
return false;
}
// Check for the minimum Joomla version before continuing
if (!empty($this->minimumJoomla) && version_compare(JVERSION, $this->minimumJoomla, '<')) {
Log::add(Text::sprintf('JLIB_INSTALLER_MINIMUM_JOOMLA', $this->minimumJoomla), Log::WARNING, 'jerror');
return false;
}
echo Text::_('MOD_FOO_INSTALLERSCRIPT_PREFLIGHT');
echo $this->minimumJoomla . ' ' . $this->minimumPhp;
return true;
}
/**
* Function called after extension installation/update/removal procedure commences
*
* @param string $type The type of change (install, update or discover_install, not uninstall)
* @param InstallerAdapter $parent The class calling this method
*
* @return boolean True on success
*/
function postflight($type, $parent) {
echo Text::_('MOD_FOO_INSTALLERSCRIPT_POSTFLIGHT');
return true;
}
}
Modifica language/en-GB/en-GB.mod_foo.sys.ini
Non c'è molto da spiegare qui. Scrivi il testo per la traduzione in questo file
File completo language/en-GB/mod_foo.sys.ini
Il codice per language/en-GB/en-GB.mod_foo.sys.ini è il seguente:
MOD_FOO="[PROJECT_NAME]"
MOD_FOO_XML_DESCRIPTION="Foo Module"
MOD_FOO_INSTALLERSCRIPT_PREFLIGHT="<p>Anything here happens before the installation/update/uninstallation of the module</p>"
MOD_FOO_INSTALLERSCRIPT_UPDATE="<p>The module has been updated</p>"
MOD_FOO_INSTALLERSCRIPT_UNINSTALL="<p>The module has been uninstalled</p>"
MOD_FOO_INSTALLERSCRIPT_INSTALL="<p>The module has been installed</p>"
MOD_FOO_INSTALLERSCRIPT_POSTFLIGHT="<p>Anything here happens after the installation/update/uninstallation of the module</p>"
Modifica mod_foo.xml
Devi aggiungere una riga, in modo che lo script venga chiamato automaticamente in Joomla
<scriptfile>script.php</scriptfile>
mod_foo.xml completo
Il file mod_foo.xml completo è il seguente:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" client="site" method="upgrade">
<name>MOD_FOO</name>
<creationDate>[DATE]</creationDate>
<author>[AUTHOR]</author>
<authorEmail>[AUTHOR_EMAIL]</authorEmail>
<authorUrl>[AUTHOR_URL]</authorUrl>
<copyright>[COPYRIGHT]</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<version>1.0</version>
<description>MOD_FOO_XML_DESCRIPTION</description>
<namespace>Joomla\Module\Foo</namespace>
<scriptfile>script.php</scriptfile>
<files>
<filename module="mod_foo">mod_foo.php</filename>
<folder>tmpl</folder>
<folder>Helper</folder>
<folder>language</folder>
<filename>mod_foo.xml</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field
name="domain"
type="url"
label="MOD_FOO_FIELD_URL_LABEL"
filter="url"
/>
</fieldset>
<fieldset name="advanced">
<field
name="layout"
type="modulelayout"
label="JFIELD_ALT_LAYOUT_LABEL"
class="custom-select"
/>
<field
name="moduleclass_sfx"
type="textarea"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
rows="3"
/>
<field
name="cache"
type="list"
label="COM_MODULES_FIELD_CACHING_LABEL"
default="0"
>
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field
name="cache_time"
type="number"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
default="0"
/>
<field
name="cachemode"
type="hidden"
default="itemid"
>
<option value="itemid"></option>
</field>
</fieldset>
</fields>
</config>
</extension>
Metti alla prova il tuo modulo
Ora puoi comprimere tutti i file e installarli tramite Joomla Extension Manager. Immediatamente dopo l'installazione, vedrai le seguenti informazioni. Questo lo avevi inserito nello script così

Conclusione
Come puoi vedere, Joomla ti offre molto per rendere la tua estensione facile da usare, fin dall'inizio
Puoi trovare boilerplate quiː
I file di esempio per questo Tutorial possono essere trovati quiː
Usa Joomla Updaterː Aggiunta dell'aggiornamento automatico - Parte 5
Requisiti
Hai bisogno di Joomla! 4.x per questo tutorial (come di scrivere attualmente Joomla! 4.0.0.0-alpha6-dev)
Joomla Updater
La prima cosa da fare è leggere il tutorial Managing Component Upgrades with Joomla 2.5 - Part 1 per dare un'idea di come funziona il processo di aggiornamento in Joomlaǃ. Sebbene scritto per 2.5, il processo non è cambiato. Leggi anche Deploying an update server - questo è ciò che implementeremo in questo tutorial.
Struttura del file
Creeremo/modificheremo i seguenti file:
- mod_foo.xml - L'unico modo per aggiornare il nostro modulo esistente è aggiungere un server di aggiornamento, ad esempio http://www.example.com/foo_update.xml - nel file xml
- foo_update.xml - Quindi dobbiamo creare il file XML per il server di aggiornamento all'indirizzo http://www.example.com/foo_update.xml per far sapere a Joomla che è disponibile un aggiornamento.
Modifica mod_foo.xml
Per aggiungere il nostro server di aggiornamento, dobbiamo inserire le seguenti righe nel tuo file XMLː
<updateservers>
<server type="extension" priority="1" name="[PROJECT_NAME]">https://www.example.com/mod_foo.xml</server>
</updateservers>
mod_foo.xml completo
Il file mod_foo.xml completo è il seguente:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" client="site" method="upgrade">
<name>MOD_FOO</name>
<creationDate>[DATE]</creationDate>
<author>[AUTHOR]</author>
<authorEmail>[AUTHOR_EMAIL]</authorEmail>
<authorUrl>[AUTHOR_URL]</authorUrl>
<copyright>[COPYRIGHT]</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<version>1.0</version>
<description>MOD_FOO_XML_DESCRIPTION</description>
<namespace>Joomla\Module\Foo</namespace>
<files>
<filename module="mod_foo">mod_foo.php</filename>
<folder>tmpl</folder>
<folder>Helper</folder>
<folder>language</folder>
<filename>mod_foo.xml</filename>
</files>
<updateservers>
<server type="extension" priority="1" name="[PROJECT_NAME]">https://www.example.com/mod_foo.xml</server>
</updateservers>
<config>
<fields name="params">
<fieldset name="basic">
<field
name="domain"
type="url"
label="MOD_FOO_FIELD_URL_LABEL"
filter="url"
/>
</fieldset>
<fieldset name="advanced">
<field
name="layout"
type="modulelayout"
label="JFIELD_ALT_LAYOUT_LABEL"
class="custom-select"
/>
<field
name="moduleclass_sfx"
type="textarea"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
rows="3"
/>
<field
name="cache"
type="list"
label="COM_MODULES_FIELD_CACHING_LABEL"
default="0"
>
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field
name="cache_time"
type="number"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
default="0"
/>
<field
name="cachemode"
type="hidden"
default="itemid"
>
<option value="itemid"></option>
</field>
</fieldset>
</fields>
</config>
</extension>
Quindi ora che Joomlaǃ sta cercando aggiornamenti per la nostra estensione, creiamone uno per testare il nostro processo. Ma prima dobbiamo creare il file foo_update.xml. Finora abbiamo descritto solo il server di aggiornamento. Non sappiamo ancora se c'è un aggiornamento. Nel file foo_update.xml indichiamo quando viene pubblicata una nuova versione e dove può essere scaricata.
Creazione foo_update.xml
Ora dobbiamo creare il file XML su http://www.example.com/foo_update.xml per far sapere a Joomla che è disponibile un aggiornamento.
foo_update.xml completo
Il file foo_update.xml completo è il seguente:
<?xml version="1.0" ?>
<updates>
<update>
<name>Foo</name>
<description>This is mod_foo 1.0.1</description>
<element>mod_foo</element>
<type>module</type>
<version>1.0.1</version>
<downloads>
<downloadurl type="full" format="zip">http://www.example.com/mod_foo_101.zip</downloadurl>
</downloads>
<maintainer>Joomla</maintainer>
<maintainerurl>http://www.example.com</maintainerurl>
<targetplatform name="joomla" version="4.0"/>
<client>site</client>
</update>
</updates>
Dopo aver caricato questo file all'indirizzo https://www.example.com/mod_foo.xml l'aggiornamento verrà visualizzato nel backend di Joomla
Testa l'aggiornamento del tuo modulo
Crea una copia del modulo così com'è. Quindi aggiorniamo il numero di versione a 1.0.1. Ora puoi comprimere tutti i file. Dopodiché dovresti caricare il tuo zip nell'URL http://www.example.com/mod_foo_101.zip. Ora puoi aggiornare il tuo modulo tramite Joomla Updater
Moduli commerciali
Nota che nei nostri file abbiamo collegato al file xml degli aggiornamenti delle estensioni. E da quel file xml abbiamo una posizione per lo zip del modulo. Ciò significa che se qualcuno dovesse rintracciarlo all'indietro potrebbe trovare l'origine fisica del file zip dei moduli. Se non lo fai, puoi trovare una soluzione in questo PRː https://github.com/joomla/joomla-cms/pull/15185 .
Conclusione
Con Joomlaǃ updater, puoi facilmente raggiungere tutti gli utenti e dire loro che c'è una nuova versione. Anche l'aggiornamento stesso è facile
Ciascun interno deve utilizzare un server di aggiornamento. Soprattutto per motivi di sicurezza
Puoi trovare boilerplate quiː
I file di esempio per questo Tutorial possono essere trovati quiː