Salve a tutti,
giorni fa mi ero scontrato con la necessità di realizzare un form per il login diverso da quello principale di Joomla customizzandolo per un dispositivo mobile: una possibile soluzione poteva essere quella di creare nuovo foglio di stile css da aggiungere solo nel caso in cui la navigazione sul sito avvenisse tramite smartphone.
Optai invece per creare un nuovo form adibito solo a ciò, sia perchè non mi piace molto lavorare con i fogli di stile, sia perchè era l’occasione perfetta per iniziare a scavare un pò nella logica del noto Joomla ;).

Obiettivo: realizzare un semplice form compatibile con logica Joomla che analizzi le credenziali immesse dall’utente e che permetta il salvataggio dei dati utente nella sessione.

La versione di Joomla che attualmente utilizzeremo è la 1.7 ma tale script è compatibile anche con le versioni successive.

Il Primo passo è quello di realizzare il form: poichè è un operazione assai standard che ho più volte esplicato su questo blog, mi limiterò a copia e incollare il codice.

 

<form method=”post” action=””>
<table>
<tr><td><b>Username:</b></td><tr><tr><td><input type=”text” name=”username” id=”username” /> </td></tr>
<tr><td><b>Password:</b></td><tr><tr><td><input type=”password” name=”password” id=”password” /> </td></tr>
<tr><td><input type=”submit” value=”Login” /></td></tr>
</table>

</form>

L’unici di considerazioni che voglio fare è che abbiam deciso di utilizzare il metodo POST per il passaggio delle informazioni, inoltre l’attributo action del form è stato volutamente lasciato vuoto in modo tale che venga richiamata la pagina corrente ( metteremo infatti la logica php nella stessa pagine del form ).

 

Sempre nella medesima pagina, andiamo all’inizio ed inseriamo questo codice php :

<?php
define( ‘_JEXEC’, 1 );
define(‘JPATH_BASE’, dirname(__FILE__) );
define( ‘DS’, DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.’includes’.DS.’defines.php’ );
require_once ( JPATH_BASE .DS.’includes’.DS.’framework.php’ );
require_once (JPATH_BASE .DS. ‘libraries’ .DS. ‘joomla’. DS. ‘user’ .DS. ‘authentication.php’);

$mainframe =& JFactory::getApplication(‘site’);
$mainframe->initialise();

Questo è il pezzo di codice fondamentale per inizializzare una pagina php in Joomla, inoltre notiamo le tre chiamate require_once necessarie per sfruttare le librerie base e le funzioni da utilizzare per l’autenticazione.
Infine possiamo inserire lo script per il controllo delle credenziali e l’inizializzazione delle variabili di sessione:


if(isset($_POST[‘username’]) && isset($_POST[‘password’]))
{

$credentials = array(
‘username’ => $_POST[‘username’],
‘password’ => $_POST[‘password’]);

$options = array();
$authenticate = JAuthentication::getInstance();
$response = $authenticate->authenticate($credentials, $options);
if ($response->status === JAUTHENTICATE_STATUS_SUCCESS)
{
$user = JUser::getInstance($_POST[‘username’]);
$_SESSION[‘__default’][‘user’]=$user;
}
else
echo “Username e/o Password sbagliati”;
?>

}

Il codice è molto semplice e si commenta quasi da solo: nel primo IF controlliamo che l’utente abbia inserito qualche valore nelle due textbox.Superato questo, viene creato l’array con le credenziali e viene dato in pasto ad un metodo della classe Joomla $authenticate: controllando lo stato della classe che ci ritornerà, potremmo sapere se le credenziali sono state riconosciute oppure no.
In caso di riconoscimento positivo, sarà sufficiente recuperare la classe JUser grazie allo username e salvarla dentro una particolare variabile dell’Array $_SESSION: d’ora in poi il nostro utente sarà correttamente loggato e potrà navigare sul nostro sito Joomla senza alcun problema.

Il codice è liberamente scaricabile nel solito repositoy Lab oppure cliccando direttamente sul link sottostante. Se avete dubbi o perplessità, non esitate a chiedere.
Grazie per il tempo concessomi, alla prossima!

Form Login per Joomla

Apl