Open Source Joomla! addons
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'] = '<div><p><b> '.$username.'</b> '.JText::_( 'USERNAME_ALREADY_IN_USE' ).'</p></div>'; $response['msg'] = 'false'; } else { // non esiste nome utente disponibile $response['html'] = '<div><p>'.JText::_( 'USERNAME_AVAIBLE' ).'</p></div>'; $response['msg'] = 'true'; } } else { // se qualcosa è andato storto ritorna comunque un messaggio di errore $response['html'] = '<div><p>'.JText::_( 'No name entered' ).'</p></div>'; $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. 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 per la chiamata ajax alla nostra funzione chkUsername
window.addEvent("domready",function(){ var box = $('namechkregister'); var comusername = document.id('jform_username'); $(comusername).addEvent("blur",function(){ if ( $(comusername).value.length > 0 ){ var url="?option=com_aa4j&format=raw&task=chkUsername&from=register&username="+$(comusername).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'){ $(comusername).value=''; $(comusername).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 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 '<span id="namechkregister"></span>'; }
Comments (0)