The Joomla! Community Magazine™

Issue 2011 July > Italian

Verificare la disponibilità del nome utente

Written by | Friday, 01 July 2011 00:00 | Published in 2011 July
Nei form di registrazione dei siti più importanti, come Google ad esempio, quando digitate il nome utente viene immediatamente scatenata la verifica che il nome utente scelto sia disponibile, vediamo come è possibile utilizzare la stessa tecnica sul nostro form di registrazione basato su Joomla! 1.6.

Utilizzeremo la tecnologia AJAX che grazie al framework Mootools è integrato di default in Joomla. Per implementare il controllo della disponibilità del nome utente senza modificare il codice core di Joomla, abbiamo bisogno di creare un componente che risponderà alle chiamate AJAX e di fare l'override del layout del form di registrazione per innescare la richiesta. Nel nostro componente nel controller.php realizziamo la funzione chkUsername() che controllerà l'esistenza del nome utente digitato nel form effettuando una query e ritornerà l'esito.

 

function chkUsername() {
$formfrom=JRequest::getVar( 'from', '', 'get', 'cmd' );
if( $username = JRequest::getVar( 'username', '', 'get', 'cmd' ) ) {
   $db =& JFactory::getDBO();
 //Verifica l'estistenza del nome utente sul DB
   $query = 'SELECT id  FROM #__users'
  . ' WHERE username = '.$db->Quote( $username );
  $db->setQuery( $query );
  $result=$db->loadObject();
  if ($result) {
  // Se esiste ritorna un messaggio appropriato.
     $response['html'] = '

'.$username.' '. JText::_( 'USERNAME_ALREADY_IN_USE' ).'

'; $response['msg'] = 'false'; } else { // non esiste nome utente disponibile $response['html'] = '

'.JText::_( 'USERNAME_AVAIBLE' ).'

'; $response['msg'] = 'true'; } } else { // se qualcosa è andato storto ritorna comunque un messaggio di errore $response['html'] = '

'.JText::_( 'No name entered' ).'

'; $response['msg'] = 'false'; } echo (json_encode( $response )) ; // Ritorna il controlla all'applicazione return true; }

Vediamo ora come codificare lo scatenarsi della richiesta di verifica, per far ciò ci avvarremo della cosidetta tecnica del "Layout override", in cosa consiste, anche se può sembrare complicato è molto semplice si tratta di utilizzare un layout diverso da quello standard di joomla, più precisamente faremo l'override del layout del form di registrazione via template, per maggiori informazioni si può leggere la documentazione ufficiale. Supponendo che il nostro template di default sia beez_20, ma lo stesso ragionamento vale per qualsiasi template, andiamo nella cartella html del nostro template e creiamo la cartella com_users al suo interno la cartella registration, qui metteremo il nostro "layout override" il file default.php che vediamo nel dettaglio: inseriamo il javascript/mootools per la chiamata ajax alla nostra funzione chkUsername

window.addEvent("domready",function(){
var box = $('namechkregister');
var cun = document.id('jform_username');
$(cun).addEvent("blur",function(){   
    if ( $(comusername).value.length > 0 ){
        var url="?option=com_aa4j&format=raw&task=chkUsername&username="+$(cun).value;
        box.style.display="block";
        box.set('html','Check in progress...');
        var a=new Request.JSON({
            url:url,
            onComplete: function(response){         
                if (response.msg==='false'){
                 $(cun).value='';
                 $(cun).focus();                
                }else{                    
                 var el = $(box);
                 (function(){
                   el.fade('out').get('tween');
                   el.destroy();
                 }).delay(1500);                                   
                }
                box.set('html',response.html);                                   
            }
        });
        a.get();
      }
    });
});    

come visto nel codice javascript/mootools allo scatenarsi dell'evento on blur sul nostro campo username viene chiamata in modo asincrono (ajax) la nostra funzione di verifica chkUsername, infine ci serve una piccola modifica all' html per visualizzare la risposta

if($field->name=='jform[username]'){
   echo ' ';
}

sè il nome utente digitato è già presente nel DB sarete informati mediante apposito messaggio e dopo un secondo e mezzo il nome digitato sarà cancellato  in quanto non utilizzabile, lo stesso controllo ovviamente può essere utilizzato per verifcare in alternativa l'indirizzo email, per quelli che preferiscono far loggare gli utenti tramite email piuttosto ceh username.

Read 11847 times
Tagged under Italian

Language Switcher

Current Articles

JCM international articles

Join us at the Joomla! World Conference 2014, Grand Oasis Cancun, Mexico November 7-9, 2014

Grab the Joomla! Community Banners! Spread the word!

Recommend us on Google+