In questo articolo andremo a vedere come creare velocemente un plugin per il nostro amato CMS. Se, nel vostro progetto, avete la necessità che Joomla! faccia una determinata operazione al verificarsi di un determinato evento allora avete bisogno di un plugin!!
I plugin ci permettono di estendere le funzionalità base di Joomla! in maniera rapida e, agganciando il nostrop plugin a un dato evento di Joomla!, senza doverci preoccupare di inserire la chiamata al nostro plugin nel codice del CMS.
I plugin si suddividono in diversi gruppi ciascuno dei quali ha i suoi eventi a cui può essere agganciato. Tali gruppi sono :
- Authentication
- Captcha
- Editors
- Extensions
- Finder
- Quick Icons
- System
- User
Se ad esempio creiamo un plugin del gruppo “User” avremo a disposizione i seguenti eventi a cui potremo agganciare l’esecuzione del nostro plugin :
- onUserAuthorisation
- onUserAuthorisationFailure
- onUserBeforeSave
- onUserAfterSave
- onUserBeforeDelete
- onUserAfterDelete
- onUserLogin
- onUserLoginFailure
- onUserAfterLogin
- onUserLogout
- onUserBeforeSaveGroup
- onUserAfterSaveGroup
- onUserBeforeDeleteGroup
- onUserAfterDeleteGroup
Qui trovate la lista completa dei gruppi e dei rispettivi eventi supportati da Joomla!.
In questo esempio andremo a creare un semplice plugin che eseguirà una determinata operazione nel momento in cui un nuovo utente eseguirà l’iscrizione al nostro sito.
Sul nostro PC creiamo una cartella dal nome “plg_nomeplugin” e andiamo a creare all’interno di questa cartella i seguenti 3 files:
- index.html
- nomeplugin.xml
- nomeplugin.php
Come di consueto in Joomla! il file index.html ha il solo scopo di non rendere navigabile la cartella e quindi al suo interno andremo a inserire un codice HTML di questo tipo:
Passiamo ora a vedere come è strutturato il nostro nomeplugin.xml :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <xml version="1.0" encoding="utf-8"> <extension version="1.0" type="plugin" group="user"> <name>NomePlugin - Plugin di esempio </name> <author>Marco Ciambricco</author> <creationDate>June 2017</creationDate> <copyright>(C) 2017 Marco Ciambricco.</copyright> <license>GNU General Public License version 2 or later; </license> <authorEmail>ciambricco.m@gmail.com</authorEmail> <authorUrl>www.fuertedev.com</authorUrl> <version>1.0.0</version> <description>Plugin per l'esecuzione di un operazione al momento di una nuova registrazione al nostro sito.</description> <files> <filename plugin="nomeplugin">nomeplugin.php</filename> <filename>index.html</filename> </files> <config> </config> </extension> |
Facciamo attenzione a selezionare il gruppo giusto per il nostro plugin (“group” nella seconda riga) e a definire correttamente i nomi dei file che fanno parte del nostro plugin nel tag “<files>”.
Passiamo ora a vedere il codice PHP che andremo a inserire nel nostro file nomeplugin.php :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?php /** * @copyright Copyright (C) 2017 Marco Ciambricco. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_BASE') or die; jimport('joomla.plugin.plugin'); /** * This is our custom plugin class. */ class plgUserNomePlugin extends JPlugin { public function onUserAfterSave($user, $isnew, $success, $msg) { $app = JFactory::getApplication(); // convert the user parameters passed to the event // to a format the external application $args = array(); $args['id'] = $user['id']; $args['username'] = $user['username']; $args['email'] = $user['email']; $args['fullname'] = $user['name']; $args['password'] = $user['password']; //Test if is a new user if ($isnew) { $db = JFactory::getDbo(); try { $db->transactionStart(); $query = 'INSERT INTO #_ .....' ; $db->setQuery($query); $db->query(); $db->transactionCommit(); }catch (Exception $e) { // catch any database errors. $db->transactionRollback(); JErrorPage::render($e); } } else { // do nothing } } } ?> |
Il nome dell’unica funzione definita nella nostra classe (“onUserAfterSave”) è il nome dell’evento Joomla! a cui verrà agganciata l’esecuzione del nostro codice. Nello specifico tale funzione viene chiamata ogni qualvolta viene salvato un utente (nel codice testiamo la variabile $isnew per sapere se è un nuovo utente o una modifica di un profilo già esistente). Come dice il nome stesso della funzione il nostro codice verrà chiamato dopo il save (“aftersave”) del JUser e quindi al momento dell’esecuzione del plugin avremo già a disposizione l’id dell’utente nel caso ci servisse.
Una volta scritto il codice PHP della nostra funzione saremo pronti per installare il plugin e metterlo in esecuzione. Per installare il plugin sarà sufficiente creare un archivio .zip della cartella “plg_nomeplugin” che avevamo creato all’inizio dell’articolo e dargli il nome “plg_nomeplugin.zip” e installarlo attraverso l’exstensions manager del backend di Joomla!.
Appena installato il nostro plugin sarà disattivato e sarà quindi necessario attivarlo dal backend amministrativo di Joomla!.
Dopo aver installato e attivato il nostro plugin potremo testare la sua efficenza semplicemente simulando un’iscrizione al nostro sito che scatenerà l’event listener “onUserAfterSave” a cui è agganciato il nostro plugin.
Il nostro nuovo custom plugin è ora installato e attivo quindi..come al solito..buon lavoro. 😉