Joomla estendere la registrazione utente

Recentemente ho avuto necessità di aggiungere alcuni campi nella gestione utenti di Joomla e di poterli gestire in fase di registrazione/modifica utente.

Dopo avere fatto una veloce ricerca fra le estensioni disponibili in rete non ho trovato niente che potesse fare al mio caso, quindi ho deciso di percorrere una strada non molto ortodossa, ovvero modificare direttamente i componenti core di Joomla. Questo metodo non è molto consigliato perché in caso di aggiornamento verrebbero perse le modifiche fatte. Come vedremo però le modifiche eseguite sono veramente poche e rimangono gestibili.

L’esempio trattato è quello di aggiungere il campo telephone ai dati utente, i passi sono essenzialmente quattro:

  • Modificare del database alla tabella jos_users aggiungendo il campo telephone
  • Modificare le core libraries per fare gestire il campo appena aggiunto
  • Gestione del campo nel front-end
  • Gestione del campo nel back-end

Database

Modifichiamo con phpmyadmin la tanella jos_users aggiungendo il campo telephone

Core Libraries

Modifichiamo le core libraries modificando il file /libraries/joomla/database/table/user.php. Per fare gestire il nuov campo basta dichiararlo nella classe JTableUser. Basta questa dichiarazione per per mettere la corretta memorizzazione nel db:

class JTableUser extends JTable
{
 
	[......]
 
	/**
	 * Telephone
	 *
	 * @var string
	 */
	var $telephone		= null;

E’ possibile anche eseguire eventuali modifiche per ulteriori implementazioni prendendo spunto dai metodi già esistenti nella classe e inserire eventuali controlli inserendoli nel metodo check() della classe.

Front-end

Utilizzando il metodo dell’override personaliziamo la form per la registrazione dei dati utente:

copiamo il file  components/com_user/views/register/tmpl/default.php in  templates/nome-template-in-uso/html/com_user/register/default.php e modifichiamo quest’ultimo in modo da gestire il campo telephone.

Facciamo lo stesso anche per la form di modifica dati utente:

copiamo il file  components/com_user/views/user/tmpl/default.php in  templates/nome-template-in-uso/html/com_user/user/default.php e modifichiamo quest’ultimo in modo da gestire il campo telephone.

<!-- Campo telefono -->
<tr>
	<td height="40">
		<label id="telephonemsg" for="telephone">
			<?php echo JText::_( 'Telefono' ); ?>:
		</label>
	</td>
	<td>
		<input class="inputbox" type="text" id="telephone" name="telephone" size="40" maxlength="50" value="<?php echo $this->escape($this->user->get( 'telephone' ));?>" />
	</td>
</tr>

Back-end

Sempre con il meccanismo dell’override apportare le modifiche necessarie alla form di gestione utenti del back-end:
Copiamo il file administrator/components/com_users/views/user/tmpl/form.php in administrator/templates/nome-template-in-uso/html/com_users/user/form.php e apportiamo le necessarie modifiche a quest’ultimo.

<tr>
	<td width="150" class="key">
		<label for="name">
			<?php echo JText::_( 'Telefono' ); ?>
		</label>
	</td>
	<td>
		<input type="text" name="telephone" id="telephone" class="inputbox" size="40" value="<?php echo $this->user->get('telephone'); ?>" />
	</td>
</tr>

Conclusioni

In definitiva le modifiche alle core libraries sono state veramente poche, è bastato aggiungere la dichiarazione del campo nella classe JTableUser, il resto è stato ottenuto grazie all’override delle form. Rimane comunque un metodo sconsigliato da percorrere solo in rare occasioni.

10 pensieri su “Joomla estendere la registrazione utente

  1. ciao sto cercando anch’io di aggiungere dei campi alla form di registrazione ed ho seguito anch’io la tua strada. purtroppo ho bisogno di aggiungere anche l’accettazione dell’informativa sulla privacy e siccome vedo che nella tua form c’è, non è che mi spiegheresti come hai fatto?
    grazie mille, un saluto

  2. @matteo
    Non ho fatto nessun controllo lato server (anche se sarebbe consigliatissimo) ma ho utilizzato la classe html required che joomla utilizza per validare via javascript la form. Ecco il codice html

    <tr>
    	<td height="40" colspan="2">
    		<label id="condizionimsg" for="condizioni">
    			<?php echo JText::_( 'Ho letto e accetto il' ); ?> <a class="condizioni" target=_blank href="regolamento.html"><?php echo JText::_( 'regolamento' ); ?></a>
    		</label>
    		<input class="inputbox required " type="checkbox" id="condizioni" name="condizioni" /> *
    	</td>
    </tr>
    
    <tr>
    	<td height="40" colspan="2">
    		<label id="privacymsg" for="privacy">
    			<?php echo JText::_( 'Ho letto e accetto le' ); ?> <a class="condizioni" target=_blank href="privacy.html"><?php echo JText::_( 'condizioni sulla privacy' ); ?></a>
    		</label>
    		<input class="inputbox required " type="checkbox" id="privacy" name="privacy" /> *
    	</td>
    </tr>
    

    Nel database non ho memorizzato niente.

  3. grazie lejubila!
    sono abbastanza nuovo di joomla e molte cose mi sono ancora un pò oscure…avevo intuito che mi serviva qualche classe particolare ma non capivo dove andare a beccare delle reference.
    potrei approfittare ancora un pò della tua disponibilità chiedendoti come far funzionare le traduzioni di JText? immagino ci sia da creare/modificare qualche xml ma ho visitato talmente tanti siti e forum che ora sono un pò nel pallone. di fatto devo fare in modo che la form di registrazione sia in italiano e in inglese.
    ti ringrazio ancora tantissimo per la tua disponibilità.

  4. @matteo
    Anche io non sono così esperto di joomla e non ho mai avuto bisogno gestire la lingua quindi prendi con le molle quello che ti dico.

    I file delle traduzioni stanno nella directory language della root di joomla.
    Utilizza JText specificando invece del testo da stampare una costante che poi verrà cercata nei file delle traduzioni e sostituita con il testo in essi specificato.
    I file dovrebbero essere

    /it-IT/it-IT.com_user.ini

    e

    /en-GB/en-GB.com_user.ini

    in questi due file inserisci la costante che usi in JText e le relative traduzioni.

    Ciao.

  5. guarda sei un grande!
    dopo questi aiuti cercherò di farti pubblicità al blog in tutti i modi!
    però purtroppo ho un errore quando provo ad inserire altri campi 🙁
    il primo che ho inserito, come ti ho già scritto prima, è andato liscissimo. preso dall’entusiasmo sono corso ad aggiungere anche gli altri campi che mi servono, ma quando salvo nel db non compaiono. ho controllato e ricontrollato più volte, ma joomla non ne vuole sapere di scrivere anche gli altri campi.
    il tipo di dato nel db è lo stesso….non so più cosa controllare.
    hai qualche suggerimento?
    scusa, giuro che questa è l’ultima domanda! 🙂

    grazie mille!

  6. Qual’è l’errore ?
    Se posso accedere alla tua installazione vedo di dare un’occhiata.
    Fammi sapere così ti contatto in privato.

    Ciao.

  7. guarda stavo provando su un sito di test. ho fatto una prova rapida su un hosting più serio e come speravo il problema non c’è stato…vai a capire.
    grazie al tuo aiuto sono riuscito a completare la form con tutti i campi e le relative traduzioni.
    per il momento posso solo ringraziarti. se in futuro dovessi avere bisogno di qualcosa contattami pure. normalmente faccio il programmatore, ma per diversi motivi mi sono dovuto improvvisare “joomlista”.
    ancora mille grazie.

  8. Anche io sono programmatore e per varie vicissitudini tra cui la crisi in cui si trova l’azienda in cui lavoravo (attualmente sono in cassa integrazione) ho deciso di spaziare un po di conoscenza e iniziare ad utilizzare joomla che tra l’altro mi è servito per un lavoro.

    Ciao.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.