Este artículo está inspirado en una duda presentada en el foro.
¿Te gustaría crear un sistema de logueo sexy, usando Ajax y SexyLightbox? En esta mini-guia explicaremos paso a paso como crearlo e implementarlo en tu web!
Bueno… como no podía ser de otra manera, nombré a este proyecto Sexy LoginBox porque me parece sexy! no es que tenga pocas ideas para nombres (la verdad es que si). En fin, el resultado será algo como esto:
Pueden ver una demostración funcionando. Para comprobar que la demo funciona, ingresen estos datos:
Usuario: admin
Contraseña: admin
En primer lugar necesitaremos 3 divs, que serán los encargados cada uno de ser un “estado” diferente. Tendremos un div para el formulario, un div para el “cargando”, y otro div mostrará un error de “usuario y/o contraseña incorrectos”.

Por supuesto, solo se mostrará uno a la vez, según corresponda el estado.
Nada más que eso, creamos el formulario y los divs de estado.
Primero, el formulario [sexy-login]:
<div id="Sexy-login" class="login">
<form action="login.php" method="post" id="loginform">
<label><em>Username : </em><input type="text" name="usuario" /></label>
<label><em>Password : </em><input type="password" name="password" /></label>
<input type="submit" class="submit" id="submit" value="Login" onclick="return SexyLoginInit();" />
</form>
</div>
Atentos con el evento onclick del botón submit. Lo siguiente es el CSS del formulario:
.login {
width: 238px;
margin: 0 auto;
padding:20px 0 0 43px;
background: url(images/user.png) no-repeat left center;
}
.login label {
display:block;
font-size:12px;
padding-bottom:5px;
text-align:right;
}
.login label em{
width:80px;
display:block;
float:left;
font-style: normal;
}
.login input {
width:146px;
height:22px;
border:1px solid #ccc;
}
.login input.submit {
width:auto;
height:auto;
border:1px solid #ccc;
float:right;
}
El div que se muestra cuando la petición está siendo enviada [sexy-loading]:
<div id="Sexy-loading" class="login loading" style="display:none;"> Cargando... </div>
.loading {
text-align: center;
width: 238px;
margin: 0 auto;
padding:40px 0;
background: url(images/ajax-loader.gif) no-repeat center 60px;
}
El div que se muestra cuando hubo un error en el login [sexy-error]:
<div id="Sexy-error" class="login error" style="display:none;"> Nombre de usuario o contraseña incorrectos. <br /><a href="#" id="again">¿Deseas volver a intentarlo?</a> </div>
.error{
margin: 0 auto;
padding:20px 0 20px 55px;
width:212px;
background: url(images/dialog-error.png) no-repeat left center;
}
Guardaremos estas cosas en un archivo llamado login_template.html, y aunque todavía no hemos acabado aquí, vamos al paso siguiente.
Para el ejemplo lo llamaremos login.php (el formulario anterior apuntaba aquí). Como no nos interesa ahondar en los detalles de la seguridad y demás yerbas del logueo, el php será muy cortito y al pie.
<?PHP
//Comprobar que nos envien las variables
if(!empty($_POST["usuario"]))
{
//sleep(2); //only for debug
//Super rutina de seguridad para la comprobación de usuarios
if($_POST["usuario"] == "admin" && $_POST["password"] == "admin")
{
echo "OK!"; //Dato clave, de esto depende el Formulario AJAX
}
else
{
echo "NO!"; //Dato clave, de esto depende el Formulario AJAX
}
}
elseif ((bool) $_GET['exito'])
{
echo "Logueado correctamente.";
}
else
{
include("login_template.html");
}
?>
Vamos por partes. En primer lugar, si llamamos a login.php directamente nos enviará a login_template.html (el formulario). Solo para nuestro ejemplo, hemos puesto que usuario y contraseña sean “admin” mediante un condicional muy simple. En caso de que el logueo sea correcto, enviaremos una palabra clave: OK!
El script siguiente verificará si el usuario y contraseña existen o no mediante esa palabra clave.
Esta es la parte más divertida
y también la mas complicada ![]()
Los que sabemos un poco de javascript estamos al tanto de que hay dos maneras de invocar un evento: la intrusiva y la no intrusiva. En nuestro formulario, el boton posee un javascript intrusivo puesto que se invoca directamente desde la “propiedad” onclick.
¿Cómo hacerlo no intrusivo? Lamentablemente no se puede, debido a lo siguiente:
Cuando el Sexy Lightbox carga la página, también ejecuta todo el código javascript dentro de ella, pero lo hace ANTES de mostrar el HTML. Osea, que no hay manera de agregar eventos a los objetos, si los objetos no han sido creados aún.
La solución: Ejecutar el código cuando se presiona el botón Enviar. Usaremos una variable (Sexy_FirstTime) para asignar los eventos sólo la primera vez.
<script type="text/javascript">
var Sexy_FirstTime = 0;
function SexyLoginInit() {
if (Sexy_FirstTime) {
$('loginform').send(); //enviamos el form por ajax
return false;
} else {
Sexy_FirstTime = 1;
}
Lo siguiente se ejecutará sólo la primera vez:
$('loginform').set('send', {
onRequest: function() {
$('Sexy-loading').setStyle('display', 'block');
$('Sexy-login').setStyle('display', 'none');
},
onComplete: function(response) {
$('Sexy-loading').setStyle('display', 'none');
if (response == "OK!")
{
document.location.href = "login.php?exito=1"; //ir a esta URL si el logueo es exitoso
}
else if (response == "NO!")
{
$('Sexy-error').setStyle('display', 'block');
}
else
{
$('Sexy-login').setStyle('display', 'block');
}
}});
En el div sexy-error hay un enlace que dice “¿Deseas volver a intentarlo?”, con lo siguiente lo hacemos funcionar:
$('again').addEvent('click', function(event) {
event.stop();
$('Sexy-error').setStyle('display', 'none');
$('Sexy-loading').setStyle('display', 'none');
$('Sexy-login').setStyle('display', 'block');
});
// ...
$('loginform').send();
return false;
};
</script>
Este artículo contiene los siguientes archivos:
Eso es todo! Échale un vistazo a la demo.
Excelente artículo, y excelente el sitio. Mis Felicitaciones!
Esta muy bien el blog. Sigue Así xD.
_Espectacular release, tu dominio de mootools es admirable, mis sinceras felicitaciones.
muy bueno, pero una consulta en le login la utilizacion de mysql para validar el usuario es posible ?
si es asi como seria
Lucas: Tienes el foro para preguntar..
Por otro lado, puedes envíar los datos del formulario por ajax y procesarlos con PHP, hacer la tipica consulta “$query = mysql_query(“..”);”
y devolver los datos al javascript con 1 o 0 o cualquier otra respuesta positiva o negativa sobre la validz del user y pass (osea si estan en la base de datos y el login fue exitoso)
espero haberme dado a entender.. ya es tarde y tengo 1 litro de coca light encima… y mañana mucho trabajo| xD..
DEFINITIVAMENTE EXELENTE “”" GENIAL , VIEJO SOS UN GRANDE!!!!!
hoy llego a mi casa y lo hago con mysql y sacare ejemplos con php y si algun error mostrarlo con esta clase de alerta ….
MIL GRACIAS Y FELICITACION MEN
SALUDOS : desde colombia
Gracias galax
que bueno que te haya gustado ^_^
algo que me interesa saber eduardo es que el login no es modal cierto? ya que yo al hacer click por fuera de form este se cierra inmeditamente que otra linea de codigo tengo que agregarle nose si pertenezca a la misma clase de los msgbox que son modales aclarame esa duda y si es asi como hacerlo modal ….
Gracias de Antemano.
Un Coordial saludo!!!
@galax:
http://www.coders.me/foro/topic39.html
Para dudas y consultas técnicas, existe el Foro.
Saludos!
Muy bueno el Login!!! Ya que estamos pregunto: Como hago para que en vez de usar login.php cortito y al pie, conecte a una BD, verifique el usuario y muestre el sexi login box ya sea OK o ERROR?
Gracias
El ejemplo esta facil para ser llevado a manejo de Bases de datos
mu weno….
en el codigo php tienes que hacer la rutina de busqueda de usuario y pass conectandote a la db que estimes
Lei esta respuesta:
Por otro lado, puedes envíar los datos del formulario por ajax y procesarlos con PHP, hacer la tipica consulta “$query = mysql_query(”..”);”
y devolver los datos al javascript con 1 o 0 o cualquier otra respuesta positiva o negativa sobre la validz del user y pass (osea si estan en la base de datos y el login fue exitoso)
Tendrian algun ejemplo please???
porque me ocurre este error de no poder ocupar dos efectos ajax,
he agregado Sexy LoginBox y me ha funcionado de lujo, pero me ha dejado de funcionar mi otro efecto ajax que es un slideshow
alguién sabe como solucionar el problema y hacer funcionar los dos?
Excelente!!!! muy practico y claro Gracias
Excelente el Login
Como hago para para utilizarlo validando usuario en una base de datos Mysql.
Soy novato en esto. Si alguin me ayuad se lo agradesco.
_Maestro un apoyo donde descargo la version no comprimida del .js.
Saludos Cordiales.
Excelente, mi pregunta es si servirá para un logueo desde un portal Hoomla hacia un foro Vbulletin. Porque no he encontrado como hacer que se logueen desde el portal.
Hola, tengo una pequeño problemilla, necesitaria el .js sin comprimir, ya que no consigo cambiar el root de imagenes en el packed, ni puedo hacer que cuando el login sea correcto la ventana de login desaparezca. He intentado utilizar el mootools2.1 però no he conseguido que funcione correctamente. Espero tu respuesta eduardo. Si me pudieras enviar el .js de sexylightbox packed de login box sexy te lo agradecería.
Hola ridN.
Un poco tarde, pero yo tenia el mismo problema que vos y encontré la solución. Podes indicar el folder que contiene las imagenes de esta manera:
window.addEvent('domready', function(){ SexyLightbox = new SexyLightBox({ imagesdir: '/RutaDeLasImagenes', OverlayStyles: {'background-color': '#000000'} }); });Espero que les sirva el aporte. Saludos
cometi un error, seria de esta manera:
window.addEvent('domready', function(){ new SexyLightBox({OverlayStyles: {'background-color': '#000000' }, imagesdir: '/login/images'}); });Hola, una duda, ya me funciona perfect, pero no entiendo una cosilla. Pk me oculta los flash cuando se muestra el login ? me gustaria q no ocultarà el flash q tengo en mi web, tengo 2 flash que estan en reproduccion continua .swf i los oculta hasta q no se cierra otra vez el login. Espero tu respuesta.
Hola, como agrego mas usuarios y password ?
Bueno, antes de nada gracias por este script. Es lo que necesitaba, pero tengo un problema, me he bajado el zip ya que he visto que la demo funciona estupendamente, pero el zip no funciona.
Ejecuto el index.html tal cual viene en el zip y se me queda con la barrita loading y de ahí no pasa.
Espero puedan mirarlo.
Muchas gracias,
Amigo mio Revisa si al cargar este jalando un archivo .php ya que solo lo mostrara al lado del servidor… eso pasa cuando lo ejecutas asi no mas…..
Hola, muy bueno el tutorial, estoy en busca de lo mismo pero para crear un formulario de contacto, el tema es que al validarse el form y tener exito de logueo, te dirige hacia otra url.
Existe forma de mostrar otra div al hacer un submit (y que realmente el formulario ande)?
What necessary words… super, excellent idea
Hola:
Alguien podría enviarme un ejemplo de como conectar el sexylogin a una BD mysql?
Gracias
Pedro
MI correo es peter3518@gmail.com. Los pido porque los habia visto en el blog pero ya no funciona….:(
hola que tal!!! este tuto me parece excelente pero al igual que oscar tengo un problema con el login, al abrir la pantalla se queda cargando y de ahi no pasa, eh revisado el archivo php y lo tengo bien podrian ayudarme???
gracias.
Hola roger.
A mi me paso lo mismo que a vos, y era por el action del formulario que no me daba cuenta que estaba mal. Igualmente revisa bien todas las rutas de todos los archivos y tiene que funcionar.
Saludos
hola, un saludo a todos.
me encanta este tutorial y me parece increible que nos ayuden a los nuevos en esto. pero creo que tengo el mismo problema que roger y oscar, de verdad que ya revise mi action y no encuentro el error por nada, agradeceria mucho si pudieran ayudarme.
un saludo.
gracias.
No sé si será obvio, pero necesitan un servidor PHP para correr el ejemplo, no es “darle doble click al index.html” y esperar que funcione.
Una vez instalado el ejemplo en la carpeta www, vamos al navegador:
http://localhost/sexy-login-box/
y con eso ya funciona.
Ademas tengo que decir que este ejemplo usa una versión vieja de SexyLightbox por lo que carga con algunos bugs.
Saludos