Supporto volontario e collaborativo per Joomla!® in italiano

Articoli della Community

Novità su Joomla, estensioni e tendenze del web

Codice

Nascondere i campi conferma email e conferma password nel form di registrazione

Spesso può capitare di dover semplificare il form di registrazione di Joomla, eliminando la necessità di inserire due volte l'indirizzo email e due volte la password. Questo perchè per alcune tipologie di siti web, può essere deleterio forzare gli utenti a dover inderire così tante stringhe di testo durante il processo di registrazione.



Su Joomla.it è già disponibile un articolo che spiega come ovviare a questo "problema" tramite un override del componente "com_users". L'articolo è visibile al seguente link: leggi l'articolo.

La soluzione proposta in questo articolo, invece, prevede la creazione (guidata) di un piccolo e semplice plugin personalizzato che avrà due compiti ben precisi: la prima è l'eliminazione dei due campi indesiderati nel form di registrazione di Joomla (email2 e password2, questi sono i loro nomi di sistema), la seconda è la gestione ed il rimedio dell'errore causato dalla mancanza di tali campi. Per questo secondo compito, il plugin andrà a copiare letteralmente i valori inseriti nei campi email e password (email1 e password1) nei campi eliminati (email2 e password2) per i quali comunque Joomla richiede un valore uguale al campo gemello.

Di seguito è mostrato un esempio di form di registrazione nativo, senza alcuna modifica: un form funzionante ma poco efficace a livello di velocità e semplicità, in quanto un utente è obbligato ad inserire informazioni (a volte) superflue per creare il proprio account.



Andando avanti, vediamo come funziona il plugin che andremo a creare. Il metodo "onContentPrepareForm" viene eseguito immediatamente prima della creazione del contenuto del form (di registrazione in questo caso), ed è qui che dobbiamo inserire il codice che si occuperà di eliminare i due campi indesiderati dal form di registrazione.

Il codice da inserire è il seguente:

if (!JFactory::getApplication()->isAdmin()) {
   $form->removeField('password2');
  $form->removeField('email2');
}

Nel codice è compreso anche un controllo per eseguire le istruzioni solamente nel front end del sito, lasciando invariato tutto quello che succede nel backend.

Nel metodo "onUserBeforeSave", eseguito immediatamente prima del salvataggio dei dati immessi dall'utente nel database di Joomla, dovremo inserire il codice che si occuperà di sostituire i valori nulli dei due campi precedentemente eliminati con gli stesi valori inseriti nei relativi campi gemelli.

Il codice da inserire è il seguente:

$user['password2'] = $user['password1'];
$user['email2'] = $user['email1'];

Molto intuitivo e semplice, esso copia letteralmente i dati nei campi email e password, nei due valori rimasti vuoti (email2 e password2).

Il codice finale del nostro plugin quindi sarà così composto:

<?php
defined('_JEXEC') or die('Restricted access');
jimport('joomla.plugin.plugin');
class plgUserNomePlugin extends JPlugin {
    function onUserBeforeSave($user, $isnew, $new)
    {
        JFactory::getLanguage()->load('plg_user_nomeplugin', JPATH_ADMINISTRATOR);
        $app = JFactory::getApplication();
        if (!$isnew || $app->isAdmin())
        {
            return;
        }
        $user['password2'] = $user['password1'];
        $user['email2'] = $user['email1'];
    return true;
    }
function onContentPrepareForm($form, $data)
    {
        if (!($form instanceof JForm))
        {
            $this->_subject->setError('JERROR_NOT_A_FORM');
            return false;
        }
        $name = $form->getName();
        $names = array('com_admin.profile', 'com_users.user', 'com_users.profile', 'com_users.registration');
        if (!in_array($name, $names))
        {
            return true;
        }
        if (!JFactory::getApplication()->isAdmin()) {
            $form->removeField('password2');
            $form->removeField('email2');
        }
        return true;
    }
}
?>

Ovviamente il nostro plugin avrà bisogno anche del file manifest (file .xml) da inserire nell'archivio finale. Per comodità riporto il codice da scrivere nel file manifest, nel quale andranno sostituiti i dati segnaposto.

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.6" type="plugin" group="user" method="upgrade">
    <name>NOME PLUGIN</name>
    <author>NOME AUTORE</author>
    <creationDate>DATA CREAZIONE</creationDate>
    <copyright>COPYRIGHT</copyright>
    <authorEmail>EMAIL AUTORE</authorEmail>
    <authorUrl>SITO WEB AUTORE</authorUrl>
    <version>1.0.0</version>
    <license>LICENZA</license>
    <description>
        DESCRIZIONE PLUGIN
    </description>
    <files>
        <filename plugin="NOME PLUGIN">NOME PLUGIN.php</filename>
        <filename>index.html</filename>
        <filename>NOME PLUGIN.xml</filename>
    </files>
    <config>
        <fields name="params">
        </fields>
    </config>
</extension>

Quindi ricapitolando dovremo creare due file per dar vita al plugin: il file manifest (.xml) ed il file che contiene le istruzioni del plugin (.php). Ambi due dovranno essere nominati con il nome del plugin e le rispettive estensioni. Il tutto è da inserire in un archivio compresso, dov'è buona norma inserire anche un file nominato index.html vuoto (elencato anche nel file manifest).

Di seguito è mostrato un esempio di form di registrazione modificato: i campi "ripeti email" e "ripeti password" sono stati eliminati in modo da permettere agli utenti di creare l'account in modo più semplice (a discapito della sicurezza di aver inserito correttamente la propria email e la propria password). Per semplificare ulteriormente il form, con un metodo simile, è stato nascosco anche il campo "Nome" il quale prende il valore inserito nel campo "Nome utente".


Una volta installato il plugin che abbiamo appena creato (ed inserito in un archivio compresso) dovremo andare ad attivarlo nel pannello di gestione dei plugin poiché Joomla di default non pubblica automaticamente i nuovi plugin installati.
Inoltre è importante ricordare che se la registrazione utenti non è attiva, non sarà possibile usufruire del plugin appena creato, in quanto esso agisce solamente nel form di registrazione utenti.

Sperando che l'articolo sia piaciuto, voglio ricordare che la creazione di un plugin personalizzato è una pratica (o un work around) migliore della modifica dei file del core di Joomla. Sicuramente la creazione di un plugin richiede più tempo, ma darà modo al sito di essere stabile e di poter essere aggiornato senza perdere le modifiche effettuate.

 

CommentaCommenta questo articolo sul forum