<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Como Lo Hago &#187; JQuery</title>
	<atom:link href="http://www.comolohago.cl/category/diseno-web/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.comolohago.cl</link>
	<description>Si se puede, te lo enseñamos</description>
	<lastBuildDate>Tue, 10 Jan 2012 16:56:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Cómo hacer un formulario de ingreso desplegable</title>
		<link>http://www.comolohago.cl/2010/08/05/como-hacer-un-formulario-de-ingreso-desplegable/</link>
		<comments>http://www.comolohago.cl/2010/08/05/como-hacer-un-formulario-de-ingreso-desplegable/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 04:35:52 +0000</pubDate>
		<dc:creator>Jorge Nitales</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Destacado]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[desplegable]]></category>
		<category><![CDATA[formulario]]></category>
		<category><![CDATA[login]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3760</guid>
		<description><![CDATA[
Hoy vamos a ver un pequeño truquillo para mejorar tu sitio web, veremos como crear un formuario de ingreso desplegable al momento de hacer click en algún lugar y que además se esconda si volvemos a hacer click. Con esto evitaremos la carga de una página para que los usuarios puedan acceder al sitio.
Para ver [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-3782" title="principal" src="http://www.comolohago.cl/wp-content/uploads/2010/08/principal-300x107.png" alt="" width="300" height="107" /></p>
<p style="text-align: justify;">Hoy vamos a ver un pequeño truquillo para mejorar tu sitio web, veremos como crear un formuario de ingreso desplegable al momento de hacer click en algún lugar y que además se esconda si volvemos a hacer click. Con esto evitaremos la carga de una página para que los usuarios puedan acceder al sitio.</p>
<p style="text-align: justify;">Para ver Cómo lo hago y que necesito, vamos después del salto.<br />
<span id="more-3760"></span></p>
<h1 style="text-align: center;">Cómo hacer un formulario de ingreso desplegable</h1>
<blockquote>
<h2>Información del Tutorial</h2>
<ul>
<li>Dificultad: Baja</li>
<li>Tiempo de Realizacíon: 30 min</li>
</ul>
</blockquote>
<blockquote>
<h2>¿Qué necesito?</h2>
<ul>
<li>Un editor web</li>
<li>Conocimiento básico en HTML. Recomendamos esta <a href="http://www.comolohago.cl/2010/02/11/como-convertirse-en-un-campeon-de-html-parte-1/">saga</a></li>
<li>Conocimiento básico en CSS. Recomendamos esta <a href="http://www.comolohago.cl/2009/02/01/como-dominar-css-sin-salir-del-escritorio-parte-1/">saga</a></li>
</ul>
</blockquote>
<h2 style="text-align: justify;">¿Cómo Lo Hago?</h2>
<p style="text-align: justify;">1.- Necesitamos crear una página HTML básica donde usemos hojas de estilo, que contenga nuestro menú donde una de las opciones sea &#8220;Login&#8221;, &#8220;Ingresar&#8221; o lo que ustedes prefieran.</p>
<p style="text-align: justify;">En este caso haremos lo siguiente:</p>
<p style="text-align: justify;">En HTML:</p>
<pre class="html" title="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;link rel="stylesheet" href="estilos.css" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Galer&amp;iacute;a&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Contacto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Log-in&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;

&lt;/html&gt;</pre>
<p>en CSS</p>
<pre class="css" title="code">table
{
background:green;
margin:auto;
font-family:verdana,helvetica;
font-size:14px;
}

a:link,a:active,a:visited
{
color:white;
text-decoration:none;
}

a:hover
{
text-decoration:underline;
}</pre>
<p style="text-align: justify;">No ganará ningun concurso de diseño, pero para la explicación sirve.</p>
<p style="text-align: justify;">Con lo anterior tendremos algo<a href="http://www.comolohago.cl/uploads/demos/login/galeriabasico.html" target="_blank"> así</a>.</p>
<p style="text-align: justify;">2.- Ahora necesitamos crear nuestro formulario de ingreso, para esto usaremos un &#8220;&lt;div&gt;&#8221;, ya que este estará siempre en la página, pero se vera cuando nosotros los indiquemos.</p>
<p style="text-align: justify;">Para esto, creamos un div como el siguiente:</p>
<pre class="html" title="code">&lt;div id="login-form"&gt;
&lt;form action="ingreso.html" method="post"&gt;
&lt;input type="text" name="usuario" value="Usuario" id="usuario"/&gt;
&lt;input type="password" name="password" value="Password" id="password"/&gt;
&lt;input type="submit" value="Ingresar" /&gt;
&lt;/form&gt;</pre>
<p style="text-align: justify;">Como ven, este div tiene un &#8220;id&#8221; que es un identificador, adicionalmente a esto, agregamos una etiqueta &#8220;id&#8221; al link del menu que corresponde a &#8220;login&#8221;, quedando el HTML de la siguiente forma:</p>
<pre class="html" title="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;link rel="stylesheet" href="estilos.css" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Galer&amp;iacute;a&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Contacto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#" id="login"&gt;Log-in&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;div id="login-form"&gt;
&lt;form action="ingreso.html" method="post"&gt;
&lt;input type="text" name="usuario" value="Usuario" /&gt;
&lt;input type="password" name="password" value="Password" /&gt;
&lt;input type="submit" value="Ingresar" /&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;</pre>
<p style="text-align: justify;">También debemos agregar un nuevo código a la hoja de estilos para darle forma a nuestro formulario, por lo que agregaremos a nuestro CSS lo siguiente:</p>
<pre class="css" title="code">#login-form
{
width:120px;
background:gray;
text-align:center;
}
#login-form input[type=text],#login-form [type=password]
{
background:black;
color:white;
display:block;
margin-left:10px;
width:100px;
}</pre>
<p style="text-align: justify;">Quedando nuestro sitio <a href="http://www.comolohago.cl/uploads/demos/login/galeriamedio.html">así</a>.</p>
<p style="text-align: justify;">Sigue sin ganar ningun premio, pero nuevamente es funcional para el ejemplo.</p>
<p style="text-align: justify;">En la hoja de estilos, al id del formulario, agregamos lo siguiente:</p>
<pre class="css" title="code">display:none;

margin:auto;</pre>
<p>quedando nuestro CSS de la siguiente manera:</p>
<pre class="css" title="code">table
{
background:green;
margin:auto;
font-family:verdana,helvetica;
font-size:14px;
}

a:link,a:active,a:visited
{
color:white;
text-decoration:none;
}

a:hover
{
text-decoration:underline;
}

#login-form
{
width:120px;
background:gray;
text-align:center;
margin:auto;
display:none;
}

#login-form input[type=text],#login-form [type=password]
{
background:black;
color:white;
display:block;
margin-left:10px;
width:100px;
}</pre>
<p style="text-align: justify;">Como verán, si es que estan haciendo esto a la vez que leen, nuestro formulario desapareció <span style="text-decoration: line-through;">y jamas volvera, así que fin del tutorial</span>. Lo que pasa que está inicialmente escondido, como necesitamos que este, además lo centramos, pero como no pueden ver, aun no lo sabe.</p>
<p style="text-align: justify;">De aquí en adelante empieza la magia.</p>
<p style="text-align: justify;">Primero que todo, como empezaremos a usar JQuery, necesitan bajar la librería y agregarla en el encabezado de su sitio.</p>
<p style="text-align: justify;">Para descargarla lo pueden hacer <a href="http://www.jquery.com" target="_blank">aquí</a></p>
<p style="text-align: justify;">y para agregarlo, ponen la siguiente linea en el encabezado de su sitio.</p>
<pre class="html" title="code">&lt;script src="jquery-1.4.2.min.js" type="text/javascript" &gt;&lt;/script&gt;</pre>
<p style="text-align: justify;">Y ahora, necesitamos crear un nuevo archivo, que para efectos de ejemplo, llamaremos &#8220;funciones.js&#8221;</p>
<p style="text-align: justify;">en el cual pondremos el siguiente código (se comentará el código para explicar su funcionamiento)</p>
<pre class="javascript" title="code">$(function(){
/* Con esto se esta diciendo "una vez que se cargue el sitio",
cuando eso se cumpla se sigue con lo demas */

$('#login').toggle(function(){
/* Usamos la funcion toggle, que sirve para hacer cierta acción con el primer click
y otra con el segundo. Los clicks se deben hacer sobre #login que es el
identificador de "login" en nuestro menu */

$('#login-form').slideDown();
/* Con el primer click, hacemos que el formulario se despliegue hacia abajo */

},function(){ 

//y con el segundo click...

$('#login-form').slideUp();
// hacemos que el formuario se "guarde" hacia arriba

}); //cerramos la funcion que realiza toggle

}); //cerramos las funciones</pre>
<p style="text-align: justify;">Es importante decir que la función Toggle tiene al menos 12 mil usos más. En verdad 12 mil fue un número al azar y quizás exagerado, pero si tiene muchas más.</p>
<p style="text-align: justify;">Ahora si vuelven a su sitio y hacen click en login.. ¡¡¡no pasará nada!!!</p>
<p style="text-align: justify;">Y esto es porque tenemos que agregar este archivo de funciones a la cabecera de nuestro sitio, de la siguiente manera <em>(a esta altura creo que debí hacer esto en video)</em></p>
<pre class="html" title="code">&lt;script src="jquery-1.4.2.min.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="funciones.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p style="text-align: justify;">Como ven se agregó <strong>abajo</strong> de la librería de jquery, si lo agregar sobre esta, no funcionará nada. ¡Avisados!</p>
<p style="text-align: justify;">Ahora ya esta funcionando, pero antes de mostrar como quedó, agregaremos unas funciones más. ¿Para qué?</p>
<p style="text-align: justify;">Para que cuando alguien haga click en el input de usuario o contraseña, se borre el texto que por defecto esta y lo deje en blanco, lo hacemos agregando lo siguiente, debemos agregarlo despues del cierre de la funcion de toggle pero antes del cierre de todas las funciones.</p>
<pre class="javascript" title="code">$('#usuario').focus(function(){
// Esto quiere decir, que cuando se selecciones el input con id "usuario"...
$(this).val(''); 
// el valor, idetificado como val, que es lo que esta dentro del campo sea igual a.. nada.

}); // Cerramos la funcion y abajo repetimos lo mismo con el input password

$('#password').focus(function(){
$(this).val('');

});
});    
/* Cerramos las funciones, no lo hicimos 2 veces,
recuerden que esto va abajo de la funcion anterior y antes del cierre */</pre>
<p>Para evitar confusiones mostraremos todo el archivo de funciones sin comentarios.</p>
<pre class="javascript" title="code">$(function(){

$('#login').toggle(function(){

$('#login-form').slideDown();

},function(){

$('#login-form').slideUp();

});

$('#usuario').focus(function(){
$(this).val('');

});

$('#password').focus(function(){
$(this).val('');

});
});</pre>
<p style="text-align: justify;">Y como podemos ver, funciona si problemas, <a href="http://www.comolohago.cl/uploads/demos/login/galeriacasifinal.html">aquí</a></p>
<p style="text-align: justify;">Para terminar, agregaremos un &#8220;&lt;div&gt;&#8221; que contenga todo lo anterior, para poder centrarlo y que nuestro formulario quede a la derecha con CSS. Ahora mostraremos los códigos de todo, para que vean el resultado final.</p>
<p style="text-align: justify;">HTML</p>
<pre class="html" title="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;link rel="stylesheet" href="estilos.css" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
&lt;script src="jquery-1.4.2.min.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;
&lt;script src="funciones.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id="contenedor"&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Galer&amp;iacute;a&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Contacto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#" id="login"&gt;Log-in&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;div id="login-form"&gt;
&lt;form action="ingreso.html" method="post"&gt;
&lt;input type="text" name="usuario" value="Usuario" id="usuario"/&gt;
&lt;input type="password" name="password" value="Password" id="password"/&gt;
&lt;input type="submit" value="Ingresar" /&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;

});
});</pre>
<p>CSS</p>
<pre class="css" title="code">#contenedor
{
width:215px;
margin:auto;
}

table
{
background:green;
font-family:verdana,helvetica;
font-size:14px;
}

a:link,a:active,a:visited
{
color:white;
text-decoration:none;
}

a:hover
{
text-decoration:underline;
}

#login-form
{
width:120px;
background:gray;
text-align:center;
display:none;
float:right;
}

#login-form input[type=text],#login-form [type=password]
{
background:black;
color:white;
display:block;
margin-left:10px;
width:100px;
}</pre>
<p>JQuery</p>
<pre class="javascript" title="code">$(function(){

$('#login').toggle(function(){

$('#login-form').slideDown();

},function(){

$('#login-form').slideUp();

});

$('#usuario').focus(function(){
$(this).val('');

});

$('#password').focus(function(){
$(this).val('');
});
});</pre>
<p>El resultado final <a href="http://www.comolohago.cl/uploads/demos/login/galeria.html" target="_blank">aquí</a></p>
<p>Con esto, tienen listo su formulario desplegable. Solo queda hacer un diseño bonito para acompañar.</p>
<p>Cualquier duda que puedan tener, los invitamos a dejarnos un comentario a continuación.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: left;">Por ahora,</p>
<p style="text-align: left;">Me despido</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/08/05/como-hacer-un-formulario-de-ingreso-desplegable/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cómo crear un contador de caracteres para tus formularios</title>
		<link>http://www.comolohago.cl/2010/07/04/como-crear-un-contador-de-caracteres-para-tus-formularios/</link>
		<comments>http://www.comolohago.cl/2010/07/04/como-crear-un-contador-de-caracteres-para-tus-formularios/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 05:37:56 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[contador]]></category>
		<category><![CDATA[contador de caracteres]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3665</guid>
		<description><![CDATA[
Entre las tantas peticiones que nos han llegado ultimamente, una de las más recurrentes es sobre como crear un contador de caracteres para áreas de texto, similar a la funcionalidad que despliega Twitter en su sitio Web cada vez que enviamos una actualización (o tweet para nuestros amigos más 2.0). Pues bien, luego de analizarlo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4143/4759597594_0b97c066f3_o.png" alt="" width="450" height="341" /></p>
<p style="text-align: justify;">Entre las tantas <a href="http://www.comolohago.cl/peticiones/" target="_blank">peticiones</a> que nos han llegado ultimamente, una de las más recurrentes es sobre como crear un contador de caracteres para áreas de texto, similar a la funcionalidad que despliega <a href="http://twitter.com/" target="_blank">Twitter</a> en su sitio Web cada vez que enviamos una actualización <em>(o tweet para nuestros amigos más 2.0)</em>. Pues bien, luego de analizarlo y darle un par de vueltas, pudimos notar que es una utilidad bastante sencilla de lograr mediante HTML y nuestro siempre querido jQuery.</p>
<p style="text-align: justify;">Así que sin más, hoy mediante un sencillo y rápido tutorial, veremos el paso a paso para poder implementarlo en nuestros formularios.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3665"></span></p>
<h1 style="text-align: center;">Cómo crear un contador de caracteres para tus formularios</h1>
<blockquote style="text-align: justify;">
<h2><img src="http://www.comolohago.cl/wp-content/uploads/2010/03/search_page.png" alt="" width="27" height="27" />Detalles del tutorial</h2>
<ul>
<li><strong>Tiempo   aproximado de implementación: </strong>15 min.</li>
<li><strong>Dificultad:</strong> Básico.</li>
</ul>
<h2><img title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" width="27" height="27" />Implementos necesarios:</h2>
<ul>
<li>jQuery.</li>
<li>Un editor Web <em>(recomendamos <a href="http://www.aptana.com/" target="_blank">Aptana Studio</a> o <a href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a>).</em></li>
</ul>
<h2>¿Qué haremos?</h2>
<p style="text-align: justify;">Para llevar a cabo este contador de caracteres, partiremos por definir un pequeño formulario que contendrá un área de texto y un botón de envío para el mensaje.</p>
<p style="text-align: justify;">Ahora, si pensamos en el proceso propiamente tal, la lógica nos dice que debemos estar atentos a cada caracter que escriba el usuario, y en base a eso, ir generando el contador para advertirle cuanto más puede escribir. Esto último es posible hacerlo de manera muy sencilla mediante un método de jQuery llamado <strong>keydown</strong>, el cual detecta cada vez que se presiona una tecla dentro de un elemento en particular <em>(en este caso, el textarea)</em>.</p>
</blockquote>
<p style="text-align: justify;">Con eso claro, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">HTML</h2>
<p style="text-align: justify;">Partiremos por definir un formulario sencillo, con un área de texto y un botón de envío. Esto lo envolveremos en un div, el cual contendrá este formulario y adicionalmente otro pequeño div, que es donde incluiremos el mensaje indicando los caracteres que restan.</p>
<pre class="html" title="code">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
 &lt;title&gt;Ejemplo contador de caracteres - CLH&lt;/title&gt;
 &lt;link href="css/estilos.css" rel="stylesheet" type="text/css"&gt;
 &lt;script type="text/javascript" src="js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
 &lt;script type="text/javascript" src="js/funciones.js"&gt;&lt;/script&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div id="container"&gt;
 &lt;h1&gt;Escribe tu mensaje&lt;/h1&gt;

&lt;form name="formulario" id="formulario" action="" method="post"&gt;
 &lt;label for="mensaje"&gt;Mensaje:&lt;/label&gt;
 &lt;textarea name="mensaje" id="mensaje" rows="10" cols="50"&gt;&lt;/textarea&gt;
&lt;p&gt;&lt;input type="submit" name="publicar" id="publicar" value="Publicar" /&gt;
&lt;/p&gt;
 &lt;/form&gt;
 &lt;div id="contador"&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/body&gt;
&lt;/html&gt;</pre>
<h2 style="text-align: justify;">jQuery</h2>
<p style="text-align: justify;">Ahora que tenemos nuestro formulario armado, crearemos el código en jQuery que será responsable de detectar la inclusión de cada nuevo caracter y procederá a descontar de una cantidad que definimos a modo de ejemplo <em>(en este caso 150)</em>:</p>
<pre class="javascript" title="code">$(function(){

/* Definimos variables que utilizaremos

   valor: En ella almacenaremos cuantos caracteres hay en el
          área de texto.

   contador: Almacenará el número de caracteres restantes,
             descontando el valor actual desde el máximo (150).

   parrafo: Almacenará en que tipo de clase (estilo) se mostrará el
            mensaje (verde si no se ha pasado el límite, rojo si se
            sobrepasado).

*/

var valor, contador, parrafo;

// Mostramos un mensaje inicial y lo añadimos al div de id contador.
$('&lt;p class="indicador"&gt;Tienes 150 caracteres restantes&lt;/p&gt;').appendTo('#contador');

// Definimos el evento para que detecte cada vez que se presione una tecla.
$('#mensaje').keydown(function(){

// Redefinimos el valor de contador al máximo permitido (150).
contador = 150;

/* Quitamos el párrafo con clase advertencia o indicador, en caso de que ya se
   haya mostrado un mensaje */
$('.advertencia').remove();
$('.indicador').remove();

// Tomamos el valor actual del contenido del área de texto
valor = $('#mensaje').val().length;

// Descontamos ese valor al máximo.
contador = contador - valor;

/* Dependiendo de cuantos caracteres quedan, mostraremos el mensaje de una
   u otra forma (lo definiremos a continuación mediante CSS */
if(contador &lt; 0) {
   parrafo = '&lt;p class="advertencia"&gt;';
}
else {
   parrafo = '&lt;p class="indicador"&gt;';
}

// Mostramos el mensaje con el número de caracteres restantes.
$('#contador').append(parrafo + 'Tienes ' + contador + ' caracteres restantes&lt;/p&gt;');

});

});</pre>
<h2 style="text-align: justify;">CSS</h2>
<p style="text-align: justify;">Y finalmente estilizamos un poco nuestro formulario y mensajes <em>(esto último es opcional)</em>:</p>
<pre class="css" title="code">body {
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
}

h1 {
font-size: 20px;
}

label {
display: block;
}

#mensaje {
padding: 5px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;

}

#publicar {
border: none;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
background: #999999;
padding: 10px;
font-weight: bold;
color: white;
}

#publicar:hover {
background: #666666;
cursor: pointer;
}

.advertencia {
color: red;
}

.indicador {
color: green;
}
</pre>
<p style="text-align: justify;">Con esto obtendríamos nuestro contador de caracteres, el cual según se puede apreciar, es posible construirlo de manera sencilla, con solo algunas líneas de codificación y entregando una funcionalidad más que interesante para nuestros usuarios.</p>
<p style="text-align: justify;">Antes de cerrar:</p>
<p style="text-align: center;"><a href="http://www.comolohago.cl/uploads/demos/contador/" target="_blank"><img class="aligncenter" style="border: 0pt none;" src="http://farm5.static.flickr.com/4043/4651670584_24037a9779_o.png" alt="" width="279" height="105" /></a></p>
<p style="text-align: center;"><a href="http://www.comolohago.cl/uploads/contador.rar" target="_blank"><img class="aligncenter" style="border: 0pt none;" src="http://farm5.static.flickr.com/4067/4651052375_0ca30dda48_o.png" alt="" width="279" height="105" /></a></p>
<p style="text-align: justify;">Y como siempre, les recordamos que este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" />Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/07/04/como-crear-un-contador-de-caracteres-para-tus-formularios/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cómo crear un formulario de contacto &#8211; Versión 2.0</title>
		<link>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/</link>
		<comments>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/#comments</comments>
		<pubDate>Sun, 30 May 2010 02:16:33 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[formulario de contacto]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3557</guid>
		<description><![CDATA[
Hace algún largo tiempo ya, les trajimos un tutorial sobre como armar un formulario de contacto para nuestros sitios Web, en el cual vimos todo el proceso de creación, desde el armado  hasta el envío de los datos vía correo electrónico.
Pero como el tiempo pasa, y nos vamos poniendo viejos, y sabemos que las soluciones [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4065/4650880553_ec664544f4_o.png" alt="" width="450" height="235" /></p>
<p style="text-align: justify;">Hace algún largo tiempo ya, les trajimos un tutorial sobre <a href="http://www.comolohago.cl/2008/10/07/como-hacer-un-formulario-de-contacto/" target="_blank">como armar un formulario de contacto</a> para nuestros sitios Web, en el cual vimos todo el proceso de creación, desde el armado  hasta el envío de los datos vía correo electrónico.</p>
<p style="text-align: justify;">Pero como el tiempo pasa, <span style="text-decoration: line-through;"><em>y nos vamos poniendo viejos</em></span>, y sabemos que las soluciones no son eternas ni apropiadas para estos tiempos, hoy hemos decidido sacar a relucir nuestros talentos <span style="text-decoration: line-through;"><em>musicales y poéticos</em></span> desarrollísticos <em>(¿desarrolladores?)</em> y traerles una nueva versión de este formulario, ahora con sabor a limón y algunas características que lo convierten en una versión mucho más óptima que la anterior.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3557"></span></p>
<h1 style="text-align: center;">Cómo crear un formulario de contacto &#8211; Versión 2.0</h1>
<p style="text-align: justify;">Como siempre, lo primero:</p>
<blockquote>
<h2><img src="http://www.comolohago.cl/wp-content/uploads/2010/03/search_page.png" alt="" width="27" height="27" />Detalles del tutorial</h2>
<ul>
<li><strong>Tiempo    aproximado de implementación: </strong>30 minutos.</li>
<li><strong>Dificultad:</strong> Básico <em>(para implementar tal cual)</em> &#8211; Intermedio <em>(para personalizar)</em>.</li>
<li><strong>Conocimientos previos requeridos: </strong>Entendimiento de HTML, CSS, jQuery y PHP.</li>
</ul>
<h2><img title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" width="27" height="27" />Implementos necesarios:</h2>
<ul>
<li>Un editor Web <em>(Recomendamos Aptana Studio o Notepad++, ambos gratuitos)</em>.</li>
</ul>
</blockquote>
<p style="text-align: justify;">Ahora, la pregunta de rigor. ¿Qué trae de nuevo este formulario 2.0?:</p>
<ul>
<li>Validaciones de ingreso de datos en tiempo real mediante jQuery.</li>
<li>Validación del correo electrónico en tiempo real mediante expresiones regulares.</li>
<li>Envío de información de forma asincrónica <em>(sin recargar la página) </em>mediante el método .ajax de jQuery.</li>
<li>Mejoras de estilo y codificación.</li>
</ul>
<p>Así que con eso claro, vamos, manos a la obra:</p>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">Separaremos este desarrollo en las siguientes partes:</p>
<ol>
<li style="text-align: justify;">Código HTML &#8211; Armado del formulario.</li>
<li style="text-align: justify;">Código CSS &#8211; Estilización del formulario.</li>
<li style="text-align: justify;">Código jQuery/Javascript &#8211; Validaciones.</li>
<li style="text-align: justify;">Código PHP &#8211; Envío de información.</li>
</ol>
<h2>1.- Código HTML</h2>
<p style="text-align: justify;">El armado del formulario es bastante estándar:</p>
<pre class="html" title="code">&lt;div id="container"&gt;
  &lt;form name="formulario" id="formulario" method="post" action="envio.php"&gt;
    &lt;fieldset&gt;&lt;h2&gt;Contacto&lt;/h2&gt;&lt;/fieldset&gt;

 &lt;div&gt;
 &lt;label for="nombre"&gt;Nombre: &lt;/label&gt;
 &lt;input type="text" name="nombre" id="nombre" size="60"&gt;
 &lt;span id="validar-nombre"&gt;&lt;/span&gt;
&lt;/div&gt;

 &lt;div&gt;
  &lt;label for="correo"&gt;Correo:&lt;/label&gt;
 &lt;input type="text" name="correo" id="correo" size="60"/&gt;
 &lt;span id="validar-correo"&gt;&lt;/span&gt;
 &lt;/div&gt;

&lt;div&gt;&lt;label for="sitio"&gt;Sitio Web:&lt;/label&gt;
 &lt;input type="text" name="sitio" id="sitio" size="60"/&gt;
 &lt;span id="validar-sitio"&gt;&lt;/span&gt;
&lt;/div&gt;

 &lt;div&gt;
 &lt;label for="mensaje"&gt;Mensaje: &lt;/label&gt;
 &lt;textarea name="mensaje" id="mensaje" rows="10" cols="56"&gt;&lt;/textarea&gt;
 &lt;span id="validar-mensaje"&gt;&lt;/span&gt;
 &lt;/div&gt; 

 &lt;p id="envio"&gt;
 &lt;input type="submit" name="enviar" id="enviar" value="Enviar" /&gt;
 &lt;/p&gt;    

&lt;/form&gt;
 &lt;/div&gt;</pre>
<p style="text-align: justify;">Con este código tendremos un formulario bastante estándar armado en nuestra página de contacto. Este contará con campos de texto para que el visitante ingrese su nombre, correo electrónico y sitio Web, así como un área de texto para que ingrese su mensaje. Y obviamente al final añadimos un botón para el envío.</p>
<p style="text-align: justify;">Como podrán fijarse, a continuación de cada campo de texto y área de texto, hemos añadido un <strong>span</strong> sin contenido. Esto lo hemos hecho para insertar mensajes y resultados de las validaciones posteriormente mediante jQuery.</p>
<p style="text-align: justify;">A continuación, haremos la estilización del formulario, mediante CSS.</p>
<h2 style="text-align: justify;">2.- Código CSS</h2>
<pre class="css" title="code">body {
 height: 100%;
 background: #348075;
 font-family: Arial;
 font-size: 11px;
 color: white;
}

#container {

 width: 1000px;
 margin: 0 auto;
 background: #5b5c5c;
 border: 1px solid white;
 -moz-border-radius: 20px;
 -webkit-border-radius: 20px;

}

#formulario {

 padding: 1em;

}

#formulario fieldset {

 width: 400px;
 padding: 0 0 0 0;
 border: 0;

}

#formulario label {

 display: block;
 padding: 5px 0 5px 0;

}

#formulario input[type=text], textarea {

 padding: 10px 0 10px 0;
 border: 1.5px solid black;
 color: #5b5c5c;
 font-family: inherit;
 font-size: inherit;
 -moz-border-radius: 5px;
 -webkit-border-radius: 3px;

}

#formulario input[type=text]:focus, textarea:focus {

 background: #f5f2c9;

}

#formulario input[type=submit] {

 border: none;
 margin-right: 1em;
 padding: 6px;
 text-decoration: none;
 font-size: 12px;
 font-weight: bold;
 -moz-border-radius: 4px;
 background: #348075;
 color: white;
 width: 100px;

}

#formulario input[type=submit]:hover {
 background: #287368;
 cursor: pointer;
}

#validar-nombre, #validar-correo, #validar-sitio, #validar-mensaje {
 position: absolute;
 width: 100px;
}

#validar-nombre img, #validar-correo img, #validar-mensaje img {
 padding:10px 0 0 5px;
}</pre>
<p style="text-align: justify;">Como podrán ver, en algunas partes hemos utilizado la propiedad <strong>border-radius</strong> <em>(con moz y webkit para apuntar a distintos navegadores)</em>. Esta propiedad, tal como hemos indicado anteriormente, es de CSS3, por lo que no está completamente soportada por todos los navegadores, especialmente los más antiguos. El efecto que logra es el de bordes redondeados, así que ojo, si utilizan IE o algún navegador de mayor antiguedad no lo podrán apreciar.</p>
<h2 style="text-align: justify;">3.- Código jQuery / Javascript</h2>
<p style="text-align: justify;">Acá debemos fijarnos en algunas cosas. Primero, debemos asegurarnos de descargar e incluir jQuery en la cabecera de nuestro formulario, y luego, crear un documento js en el que incluiremos el código en jQuery que hará las validaciones y el correspondiente a Javascript que contendrá la expresión regular que evaluará la dirección de correo ingresada para ver si es válida. Partamos con jQuery:</p>
<pre class="javascript" title="code">$(function(){

 var valor;
 var i = 0;

 $('#nombre').focus(function(){

     $('#resultado-nombre').remove();
     $('#validar-nombre').append('&lt;p&gt;* Obligatorio&lt;/p&gt;');

 });

 $('#nombre').blur(function(){

     $('.advertencia').remove();

     valor = $('#nombre').val();

     if(valor != '') {
         $('&lt;img src="imagenes/accept.png" id="resultado-nombre" /&gt;').appendTo('#validar-nombre');
     }
     else {
         $('&lt;img src="imagenes/delete.png" id="resultado-nombre" /&gt;').appendTo('#validar-nombre');
     }

 });

 $('#correo').focus(function(){

     $('#resultado-correo').remove();
     $('#validar-correo').append('&lt;p&gt;* Obligatorio&lt;/p&gt;');

 });

 $('#correo').blur(function(){

     $('.advertencia').remove();

     valor = $('#correo').val();

     if(valor != '') {

       if(validaCorreo(valor)){

          $('&lt;img src="imagenes/accept.png" id="resultado-correo" /&gt;').appendTo('#validar-correo');
          var valido = true;

       }
      else {
          $('&lt;span id="resultado-correo"&gt;Correo no valido&lt;/span&gt;').appendTo("#validar-correo");
      }
    }
    else {
         $('&lt;img src="imagenes/delete.png" id="resultado-correo" /&gt;').appendTo('#validar-correo');
    }

 });

 $('#sitio').focus(function(){

     $('#validar-sitio').append('&lt;p&gt;* Opcional&lt;/p&gt;');

 });

 $('#sitio').blur(function(){

      $('.advertencia').remove();

 });

 $('#mensaje').focus(function(){

      $('#resultado-mensaje').remove();
      $('#validar-mensaje').append('&lt;p&gt;* Obligatorio&lt;/p&gt;');

 });

 $('#mensaje').blur(function(){

     $('.advertencia').remove();

     valor = $('#mensaje').val();

     if(valor != '') {
          $('&lt;img src="imagenes/accept.png" id="resultado-mensaje" /&gt;').appendTo('#validar-mensaje');
     }
     else {
        $('&lt;img src="imagenes/delete.png" id="resultado-mensaje" /&gt;').appendTo('#validar-mensaje');
     }

 });

 $('#enviar').click(function(){

       if($('#nombre').val()!= '' &amp;&amp; $('#correo').val()!='' &amp;&amp; $('#mensaje').val()!='' &amp;&amp; valido) {

         $('.advertencia').remove();

         $('#envio').append('&lt;img src="imagenes/ajax-loader.gif" alt="Procesando envio" id="cargando" /&gt;');

         var nombre = $('#nombre').val();
         var correo = $('#correo').val();
         var sitio = $('#sitio').val();
         var mensaje = $('#mensaje').val();

       $.ajax({
           url: 'envio.php',
           type: 'POST',
           data: 'nombre=' + nombre + '&amp;correo=' + correo + '&amp;sitio=' + sitio + '&amp;mensaje=' + mensaje,

           success: function(resultado) {
               $('#respuesta').remove();
               $('#envio').append('&lt;span id="respuesta"&gt;' + resultado + '&lt;/span&gt;');
               $('#cargando').fadeOut(500, function() {
                   $(this).remove();
               });

           }
       });

       return false;

   }
   else {
       $('#envio').append('&lt;span&gt;Debe completar los datos requeridos.&lt;/span&gt;');
       return false;
    }

 });

});</pre>
<p style="text-align: justify;">Varias cosas a las que ponerle atención en el código anterior:</p>
<ul>
<li style="text-align: justify;">Utilizamos 3 imágenes en los procesos de validación y envío <em>(accept.png, delete.png, ajax-loader.gif</em>)<em>. </em>Estas imágenes son utilizadas para validar correcta e incorrectamente así como mostrar un pequeño cargador al momento de enviar los datos. Pueden obtenerlas en el código fuente que hemos adjuntado al final.</li>
<li style="text-align: justify;">Hacemos uso del método <strong>ajax</strong> de jQuery, el cual nos permite enviar asincrónicamente los datos a una página en PHP mediante un método como POST o GET y que esta se ejecute sin la necesidad de recargar la página. Como se puede apreciar, en caso de éxito de esta llamada <em>(el código correspondiente a success)</em>, hay un parámetro que es devuelto <em>(resultado)</em>, el cual corresponde a un mensaje desplegado por el script que ejecutamos, lo que podremos ver más adelante.</li>
<li style="text-align: justify;">Hemos incluido en 2 partes un <strong>return false</strong>. Esto se ha hecho para que el formulario no ejecute el action <em>(de enviar a la página envio.php)</em> de forma normal, sino que ejecute todo de forma asincrónica. Si el usuario tiene desactivado Javascript en su navegador, se ejecutará todo de forma normal.</li>
<li style="text-align: justify;">En la validación del correo se hace un llamado a una función que lo evaluará, esa la incluiremos a continuación.</li>
</ul>
<p style="text-align: justify;">El código básicamente ejecuta acciones cada vez que se selecciona un campo de texto <em>(focus)</em> y/o se sale de el <em>(blur)</em>. Ahí evalua de acuerdo a los parámetros que hemos definido <em>(que existan datos)</em> y en base a eso muestra un resultado de la validación. Luego, al final, cuando se hace click en el botón de envío, evalúa que existan datos en todos los campos y en ese caso envía. De lo contrario, despliega un mensaje indicando la necesidad de completar el formulario.</p>
<p style="text-align: justify;">Luego, a continuación del código jQuery, incluiremos una función en Javascript que evaluará el correo mediante una expresión regular para verificar que tenga el formato correcto:</p>
<pre class="javascript" title="code">function validaCorreo(correo) {

 var expresion = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)
|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})
\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.
|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.)
{2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
 return expresion.test(correo);

}</pre>
<p style="text-align: justify;">Entre estos 2 códigos se encargan de toda la validación del formulario, tal como indicamos, en tiempo real. Lo que nos queda hacer ahora es crear nuestro script en PHP para el envío final de los datos.</p>
<h2 style="text-align: justify;">4.- Código PHP</h2>
<pre class="php" title="code">&lt;?php

 /* Recepcionamos los datos enviados asincrónicamente */

 $nombre = $_POST['nombre'];
 $correo = $_POST['correo'];
 $sitio = $_POST['sitio'];
 $mensaje = $_POST['mensaje'];

 /* Definimos el correo donde enviaremos el mensaje y el asunto */

 $destino = "correo@ejemplo.com";
 $asunto = "Contacto sitio Web";

 /* Definimos el formato del mensaje a enviar */

 $cuerpo = "&lt;strong&gt;Nombre: &lt;/strong&gt;".$nombre."&lt;br /&gt;
 &lt;strong&gt;Correo: &lt;/strong&gt;".$correo."&lt;br /&gt;
 &lt;strong&gt;Sitio Web: &lt;/strong&gt;".$sitio."&lt;br /&gt;
 &lt;strong&gt;Mensaje: &lt;/strong&gt;".$mensaje;

 /* Definimos las cabeceras del mensaje */

 $cabecera = "MIME-Version: 1.0\r\n";
 $cabecera .= "Content-type:text/html; charset=iso-8859-1\r\n";
 $cabecera .= "From: $correo\r\n";
 $cabecera .= "Reply-to: $correo\r\n";
 $cabecera .= "Cc: $correo\r\n";

 /* Enviamos vía correo, devolviendo un mensaje en caso de éxito o falla */ 

 if(mail($destino, $asunto, $cuerpo, $cabecera)) {
    echo 'Su mensaje ha sido enviado.
     De ser necesario, nos pondremos en contacto con Ud.';
 }
 else {
    echo 'No se pudo enviar el mensaje. Int&amp;eacute;ntelo nuevamente';
 }

?&gt;</pre>
<p style="text-align: justify;">Los mensajes desplegados en el <strong>if</strong> y <strong>else</strong> cuando enviamos el correo son aquellos que son devueltos al método <strong>.ajax</strong> de jQuery <em>(el parámetro resultado del que hablamos anteriormente)</em>, los cuales son desplegados en el formulario.</p>
<h2 style="text-align: justify;">Conclusión</h2>
<p style="text-align: justify;">Y con eso tenemos nuestro formulario de contacto terminado, el cual valida en tiempo real y envía los datos de forma asincrónica. En caso de que el visitante tenga Javascript desactivado en su navegador, esto se ejecutará de forma normal, es decir, el script PHP se cargará al momento de presionar el botón Enviar y no habrá validación en tiempo real.</p>
<p style="text-align: justify;">Antes de terminar:</p>
<p style="text-align: center;"><a href="http://www.comolohago.cl/uploads/demos/formulario/contacto.html" target="_blank"><img class="aligncenter" style="border: 0pt none;" src="http://farm5.static.flickr.com/4043/4651670584_24037a9779_o.png" alt="" width="279" height="105" /></a></p>
<p style="text-align: center;"><a href="http://www.comolohago.cl/uploads/formulario.rar" target="_blank"><img class="aligncenter" style="border: 0pt none;" src="http://farm5.static.flickr.com/4067/4651052375_0ca30dda48_o.png" alt="" width="279" height="105" /></a></p>
<p style="text-align: justify;">Y como siempre, les recordamos que este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" />Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Cómo crear una galería de imágenes para tu Web</title>
		<link>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/</link>
		<comments>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 18:41:56 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3194</guid>
		<description><![CDATA[
Continuando con nuestra larga saga de tutoriales sobre diseño Web, en esta ocasión les traemos un pequeño desarrollo que sin duda puede ser de gran utilidad para nuestros sitios, en especial si queremos montar una especie de portafolio o una simple galería para desplegar imágenes.
En un esfuerzo conjunto e integración de tecnologías como PHP, jQuery, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm3.static.flickr.com/2761/4471619828_0bc2fd38de_o.png" alt="" width="450" height="174" /></p>
<p style="text-align: justify;">Continuando con nuestra larga saga de tutoriales sobre diseño Web, en esta ocasión les traemos un pequeño desarrollo que sin duda puede ser de gran utilidad para nuestros sitios, en especial si queremos montar una especie de portafolio o una simple galería para desplegar imágenes.</p>
<p style="text-align: justify;">En un esfuerzo conjunto e integración de tecnologías como PHP, jQuery, CSS, XHTML y un poco de MySQL, hoy veremos un paso a paso de como construir una simple galería de imágenes desde cero.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3194"></span></p>
<h1 style="text-align: center;">Cómo crear una galería de imágenes para tu Web</h1>
<p style="text-align: justify;">Como siempre, lo primero:</p>
<blockquote>
<h2 style="text-align: justify;"><img class="alignnone" src="http://www.comolohago.cl/wp-content/uploads/2010/03/search_page.png" alt="" width="27" height="27" />Detalles del tutorial</h2>
<ul style="text-align: justify;">
<li><strong>Tiempo aproximado de implementación: </strong>60 minutos.</li>
<li><strong>Dificultad:</strong> Intermedio.</li>
<li><strong>Conocimientos requeridos:</strong> Idealmente nociones de PHP, XHTML, CSS, jQuery y bases de datos, especialmente si quieren personalizar el diseño final. De cualquier forma, todo será explicado paso a paso en caso de que deseen implementar tal como está acá.</li>
</ul>
<h2 style="text-align: justify;"><img class="alignnone size-full wp-image-3161" title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" width="27" height="27" />Implementos necesarios:</h2>
<ul style="text-align: justify;">
<li>Un servidor que pueda ejecutar archivos PHP. <em>(Recomendamos XAMPP</em> <em>para Windows, Linux y Mac)</em>.</li>
<li>Un sistema gestor de bases de datos MySQL <em>(En XAMPP viene uno incluido)</em>.</li>
<li>Opcionalmente un editor Web <em>(Recomendamos Adobe Dreamweaver o Aptana Studio).</em></li>
<li>Un editor de imágenes <em>(Recomendamos Adobe Photoshop)</em>.</li>
<li>La librería jQuery, que pueden obtener desde su <a href="http://jquery.com/" target="_blank">sitio oficial</a>.</li>
<li>Imágenes para montar en la galería. Para este caso utilizamos algunas de la <a href="http://www.flickr.com/photos/27805557@N08/" target="_blank">galería de JoesSistah</a>, las cuales están bajo una licencia Creative Commons.</li>
</ul>
</blockquote>
<p style="text-align: justify;">Con eso claro, vamos, manos a la obra:</p>
<p style="text-align: justify;">1.- Lo primero que haremos será crear una base de datos en nuestro MySQL y en el una tabla llamada imagen, la cual contendrá 4 campos de información:</p>
<pre class="sql" title="code">CREATE TABLE 'clh'.'imagen' (
'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'titulo' VARCHAR( 50 ) NOT NULL ,
'descripcion' TEXT NOT NULL ,
'archivo' VARCHAR( 20 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_unicode_ci</pre>
<p style="text-align: justify;">Repasando nuestro código anterior, lo que hemos hecho ha sido crear una tabla llamada imagen, la cual contiene 4 campos:</p>
<ul style="text-align: justify;">
<li><strong>id:</strong> Contendrá un número identificatorio para cada imagen, lo hemos dejado con auto increment para que cada vez que se inserte un nuevo registro aumente automáticamente.</li>
<li><strong>titulo:</strong> Contendrá el título de la imagen.</li>
<li><strong>descripcion: </strong>Contendrá la descripción de la imagen.</li>
<li><strong>archivo:</strong> Contendrá el nombre del archivo y su extensión para luego llamarlo desde nuestra galería.</li>
</ul>
<p style="text-align: justify;">2.- Luego que hemos creado la tabla, insertaremos información de 4 imágenes:</p>
<pre class="sql" title="code">INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Paisaje Numero 1', 'Imagen representativa de un paisaje con costa',
'1.jpg')

INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Paisaje Numero 2', 'Imagen representativa de un paisaje con nieve',
'2.jpg')

INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Paisaje Numero 3', 'Imagen representativa de un paisaje con una
luna en el fondo', '3.jpg')

INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Imagen abstracta', 'Representacion de una mariposa',
'4.jpg')</pre>
<p style="text-align: justify;">3.- Con eso debiésemos tener una tabla de la siguiente forma:</p>
<p style="text-align: justify;">
<table id="wp-table-reloaded-id-2-no-1" class="wp-table-reloaded wp-table-reloaded-id-2">
<thead>
	<tr class="row-1">
		<th class="column-1">id</th><th class="column-2">titulo</th><th class="column-3">descripcion</th><th class="column-4">archivo</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2">
		<td class="column-1">1</td><td class="column-2">Paisaje Numero 1</td><td class="column-3">Imagen representativa de un paisaje con costa</td><td class="column-4">1.jpg</td>
	</tr>
	<tr class="row-3">
		<td class="column-1">2</td><td class="column-2">Paisaje Numero 2</td><td class="column-3">Imagen representativa de un paisaje con nieve</td><td class="column-4">2.jpg</td>
	</tr>
	<tr class="row-4">
		<td class="column-1">3</td><td class="column-2">Paisaje Numero 3</td><td class="column-3">Imagen representativa de un paisaje con una luna en el fondo</td><td class="column-4">3.jpg</td>
	</tr>
	<tr class="row-5">
		<td class="column-1">4</td><td class="column-2">Imagen abstracta</td><td class="column-3">Representacion de una mariposa</td><td class="column-4">4.jpg</td>
	</tr>
</tbody>
</table>
</p>
<p style="text-align: justify;">4.- Con nuestra tabla creada, y antes de empezar a codificar, haremos la preparación de nuestras imágenes. Para la galería, necesitaremos 3 tamaños de las mismas imágenes, 2 los fijaremos en imágenes distintas y 1 lo redimensionaremos vía CSS. Así que necesitaremos:</p>
<ul style="text-align: justify;">
<li>Tamaño normal de las imágenes para la vista completa. En este caso utilizamos 400px.</li>
<li>Tamaño reducido para los previews o thumbnails. En este caso utilizamos 150px.</li>
<li>Tamaño aún más reducido para los previews bajo la vista completa. En este caso utilizamos 75px. Este es el que ajustaremos vía CSS.</li>
</ul>
<p>Los 2 primeros pueden hacerlo mediante su editor de imágenes favorito.</p>
<p style="text-align: justify;">5.- Con todo aquello listo, procedemos a codificar. Nuestra galería contará de 2 archivos en formato PHP, uno donde desplegaremos un preview de las imágenes y añadiremos un pequeño efecto en jQuery para que estas aparezcan oscuras al cargar la página y que solo sean completamente visibles cuando el usuario pase el mouse por encima, y el otro funcionará como un visor de la imagen en tamaño completo, con su respectiva información y enlaces para imágenes siguientes y anteriores, así como otro preview de la misma galería en un tamaño más pequeño. Adicionalmente codificaremos un archivo en formato CSS para el estilo de la galería y un archivo en formato JS para nuestras funciones en jQuery. Así que resumiendo, los archivos que crearemos son:</p>
<ul>
<li>index.php</li>
<li>visor.php</li>
<li>estilos.css</li>
<li>funciones.js</li>
</ul>
<p style="text-align: justify;">Vamos con el primero. Los comentarios como siempre, dentro del código:</p>
<h2 style="text-align: justify;">index.php</h2>
<pre class="php" title="code">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
		/* Incluimos la hoja de estilos, la libreria jquery y
                nuestra libreria de funciones */
                &lt;link rel="stylesheet" href="css/estilos.css" /&gt;
		&lt;script type="text/javascript" src="js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="js/funciones.js"&gt;&lt;/script&gt;
		&lt;title&gt;Galer&amp;iacute;a de Im&amp;aacute;genes&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;

		&lt;div id="galeria"&gt;
			&lt;h1&gt;Mi galer&amp;iacute;a de im&amp;aacute;genes&lt;/h1&gt;
		&lt;?php
                /* Conectamos a la BD para obtener la informacion de
                las imagenes que tenemos guardadas */
  		$conexion = new mysqli('localhost', 'usuario', 'clave', 'clh');
		$consulta = "SELECT id, titulo, descripcion, archivo
                FROM imagen";

		// Obtenemos el resultado de la consulta
                $resultado = $conexion-&gt;query($consulta);

		// Desplegamos las imagenes con un enlace a su id
                while($filas = $resultado-&gt;fetch_array(MYSQLI_ASSOC)) {

		?&gt;
		&lt;a href="visor.php?id=&lt;?php echo $filas['id']; ?&gt;"&gt;
   &lt;img src="img/t-&lt;?php echo $filas['archivo']; ?&gt;" alt="imagen" /&gt;
         &lt;/a&gt;
		&lt;?php }
		?&gt;

		&lt;/div&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">En resumen, lo que hemos hecho en nuestro index.php, yendo paso a paso:</p>
<ol style="text-align: justify;">
<li>Incluimos la hoja de estilo, la librería jQuery y nuestra librería de funciones.</li>
<li>Conectamos a la base de datos y obtenemos toda la información de las imágenes que tenemos almacenadas.</li>
<li>Desplegamos las imágenes con un enlace hacia el visor y pasamos como parámetro el id de la imagen para luego obtener más información.</li>
</ol>
<p style="text-align: justify;">Y ahora continuamos con el visor, en donde podremos mostrar las imágenes en tamaño completo y con más información:</p>
<h2 style="text-align: justify;">visor.php</h2>
<pre class="php" title="code">&lt;?php
/* Obtenemos el id que fue pasado
como parametro por URL, y luego
creamos 2 variables: prev y sig
que corresponden a la id anterior y
siguiente de la imagen actual */
$id = $_GET['id'];
$prev = $id-1;
$sig = $id+1;

/* Conectamos a la BD y obtenemos la
informacion de la imagen actual*/
$conexion = new mysqli('localhost', 'usuario', 'clave', 'clh');
$consulta = "SELECT titulo, descripcion, archivo
FROM imagen WHERE id = $id";

$resultado = $conexion-&gt;query($consulta);

$fila = $resultado-&gt;fetch_array(MYSQLI_ASSOC);

/* Luego conectamos a la BD y obtenemos la
primera y ultima id de imagen, para saber cuando
se trata de la ultima y/o primera imagen de la
galeria */
$consulta = "SELECT min(id) as minimo, max(id) as maximo FROM imagen";
$resultado = $conexion-&gt;query($consulta);

$datos = $resultado-&gt;fetch_array(MYSQLI_ASSOC);
?&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
// Creamos el titulo de la pagina de acuerdo a la imagen
&lt;title&gt;Galer&amp;iacute;a de Im&amp;aacute;genes - &lt;?php echo $fila['titulo'];?&gt;
&lt;/title&gt;
// Incluimos la hoja de estilo y librerias
&lt;link rel="stylesheet" href="css/estilos.css" /&gt;
&lt;script type="text/javascript" src="js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/funciones.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div id="contenedor"&gt;
  &lt;?php
/* Comparamos la id actual con la menor id de la tabla
para saber si es la primera imagen de la galeria.
Si no es igual, mostramos un enlace para la imagen
anterior */
	if($id != $datos['minimo']) {
  ?&gt;
  &lt;a  href="visor.php?id=&lt;?php echo $prev; ?&gt;"&gt;
  &lt;img src="img/back.png" /&gt;
   &lt;/a&gt;
/* De lo contrario, mostramos una imagen
indicando que no hay nada antes */
  &lt;?php }
	else {
  ?&gt;
  &lt;img src="img/block.png" alt="Primera imagen" /&gt;

  &lt;?php }
  ?&gt;

/* Desplegamos la imagen actual en tamaño completo
con su respectiva descripcion */
  &lt;img id="imgcompleta" src="img/&lt;?php echo $fila['archivo']; ?&gt;"
  alt="&lt;?php echo $fila['descripcion'];?&gt;" /&gt;

/* Comparamos la id actual a la mayor id de la tabla
para saber si es la ultima imagen. Si no es igual
mostramos un enlace para la imagen siguiente */
  &lt;?php if($id != $datos['maximo']){
  ?&gt;

  &lt;a  href="visor.php?id=&lt;?php echo $sig; ?&gt;"&gt;
  &lt;img src="img/next.png" /&gt;
  &lt;/a&gt;

/* De lo contrario, mostramos una imagen
indicando que no hay nada despues */
  &lt;?php }
  else {
  ?&gt;
  &lt;img src="img/block.png"  alt="&amp;Uacute;ltima imagen" /&gt;

  &lt;?php }?&gt;
/* Establecemos un pequeño div para la
informacion de la imagen. Cuando el usuario
pase el mouse por encima, apareceran los datos
(titulo y descripcion) */
  &lt;div id="masinfo"&gt;&lt;h4&gt;Informaci&amp;oacute;n de la imagen &lt;a href="#"&gt;&lt;img src="img/add.png" alt="M&amp;aacute;s informaci&amp;oacute;n" /&gt;&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;

/* Este div mostrara la informacion de la imagen.
Por defecto lo dejaremos oculto mediante CSS y
solo se mostrara al pasar el mouse sobre el */
     &lt;div id="info"&gt;
     &lt;p&gt;T&amp;iacute;tulo: &lt;?php echo $fila['titulo'];?&gt;&lt;/p&gt;
     &lt;p&gt;Descripci&amp;oacute;n: &lt;?php echo $fila['descripcion'];?&gt;&lt;/p&gt;
     &lt;/div&gt;
  &lt;/div&gt;

/* Al igual que en index, mostraremos la
galeria completa, solo que esta vez las
imagenes seran mas pequeñas */
 &lt;div id="galeria-small"&gt;
	&lt;h3&gt;Mis otras im&amp;aacute;genes&lt;/h3&gt;
	&lt;?php 

	$cons = "SELECT id, titulo, descripcion, archivo FROM imagen";

	$res = $conexion-&gt;query($cons);

	while($filas = $res-&gt;fetch_array(MYSQLI_ASSOC)) {

	?&gt;

	&lt;a href="visor.php?id=&lt;?php echo $filas['id']; ?&gt;"&gt;
        &lt;img src="img/t-&lt;?php echo $filas['archivo']; ?&gt;" alt="imagen" /&gt;
        &lt;/a&gt;

	&lt;?php }

	?&gt;

  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">Resumiendo el archivo anterior, lo que hicimos fue:</p>
<ol style="text-align: justify;">
<li>Obtuvimos la id enviada por parámetro para obtener la información de la imagen actual.</li>
<li>Obtuvimos la primera y última id de imágenes almacenadas para saber cuando tratamos con la primera y/o última imagen de la galería.</li>
<li>Cargamos la hoja de estilos y librerías.</li>
<li>Comparamos la id actual con la menor existente en la base de datos para saber si es la primera imagen de la galería. De ser así, mostramos una imagen que indica que no hay nada antes. De lo contrario, mostramos una imagen con un enlace a la imagen anterior.</li>
<li>Mostramos la imagen actual en tamaño completo.</li>
<li>Lo mismo que el punto 4, pero ahora con la última id y la imagen siguiente.</li>
<li>Creamos un div para la información de la imagen el cual permanecerá oculto hasta que el usuario pase el mouse por encima.</li>
</ol>
<p style="text-align: justify;">Ya con eso listo, nos falta declarar nuestras funciones en jQuery y nuestra hoja de estilos. Partiremos por las funciones:</p>
<h2 style="text-align: justify;">funciones.js</h2>
<pre class="javascript" title="code">$(function(){

/* Este es un efecto inicial sobre la galeria,
en el cual decimos basicamente que cuando
la pagina cargue, las imagenes se muestren mas
oscuras y que al pasar el mouse por encima
tomen su opacidad natural. Para esto utilizamos
las funciones animate, hover y stop de jQuery. */
  $('#galeria img').animate({
	"opacity" : .5
  });

  $('#galeria img').hover(function(){

	$(this).stop().animate({ "opacity" : 1 });

   }, function(){

	$(this).stop().animate({ "opacity" : .5});

  });

/* Repetimos el mismo efecto para la galeria
pequeña que mostramos en el visor */

  $('#galeria-small img').animate({
	"opacity" : .5
  });

  $('#galeria-small img').hover(function(){

	$(this).stop().animate({ "opacity" : 1 });

  }, function(){

	$(this).stop().animate({ "opacity" : .5});

  });

/* Ahora aplicamos la funcion para que cuando
un usuario pase el mouse por encima del div con id
masinfo, se despliegue la informacion del div info
del visor. Esto lo haremos mediante las funciones
hover, fadeIn y fadeOut de jQuery */

  $('#masinfo').hover(function(){
 	$('#info').fadeIn();
  }, function(){
        $('#info').fadeOut();
  });

});</pre>
<p style="text-align: justify;">En resumen, lo que hicimos aquí fue:</p>
<ol style="text-align: justify;">
<li>Creamos 3 funciones para que estén disponibles cuando la página cargue.</li>
<li>La primera agregará un efecto de opacidad sobre la galería que se desactivará cuando el usuario pose el mouse encima.</li>
<li>La segunda agregará el mismo efecto pero a la galería pequeña que añadimos al visor.</li>
<li>La tercera hará aparecer la información de la imagen cuando el usuario pose el mouse sobre el div &#8216;masinfo&#8217; del visor y a su vez la hará desaparecer cuando mueva el mouse de ahí.</li>
</ol>
<p style="text-align: justify;">Y ahora nos queda la parte final, que es declarar los estilos:</p>
<h2 style="text-align: justify;">estilos.css</h2>
<pre class="css" title="code">body {
	background: black;
	color: white;
	font-family: Arial, Helvetica, sans-serif;
	width: 100%;
	margin: 0 auto;

}

#galeria{
	width: 800px;
	margin: 0 auto;
}

#galeria img{
	border: 1px solid white;
	padding: 1px;
	margin-right: 10px;
	margin-bottom: 10px;

}

#galeria-small{
	width: 800px;
	margin: 0 auto;
}
#galeria-small img{
	width: 100px;
	height: 100px;
	border: 1px solid white;

}

#contenedor{
	width: 800px;
	margin: 0 auto;
	padding-top: 10px;
}

#imgcompleta{
	border: 1px solid white;
}

a img{
	border: none;
}

/* Este es el div con informacion de
la imagen. Inicialmente cargara con
display:none para que no sea visto a menos
que el usuario pose el mouse encima */

#info {
	display: none;
}</pre>
<p style="text-align: justify;">Y con eso tenemos nuestro resultado final:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4067/4471843750_4664307880_o.png" alt="" width="600" height="211" /></p>
<p style="text-align: center;"><em>Primera vista de la galería</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm5.static.flickr.com/4019/4471064613_000385323e_o.png" alt="" width="600" height="214" /></em></p>
<p style="text-align: center;"><em>La imagen toma su opacidad natural al pasar el mouse por encima</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm5.static.flickr.com/4070/4471064845_1d8edde285_o.png" alt="" width="600" height="526" /></em></p>
<p style="text-align: center;"><em>Vista completa de la primera imagen</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm3.static.flickr.com/2788/4471844222_b7092f614e_o.png" alt="" width="600" height="579" /></em></p>
<p style="text-align: center;"><em>Información de la primera imagen al pasar el mouse por encima del div de información</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm3.static.flickr.com/2776/4471065273_0105b08d51_o.png" alt="" width="600" height="482" /></em></p>
<p style="text-align: center;"><em>Vista completa de imagen que tiene una previa y una siguiente</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm3.static.flickr.com/2787/4471844630_0b64eee812_o.png" alt="" width="600" height="538" /></em></p>
<p style="text-align: center;"><em>Vista completa de la última imagen</em></p>
<p style="text-align: justify;">Antes de terminar, y comprendiendo que este tutorial ha sido largo, integramos una nueva característica a estos tutoriales:</p>
<p style="text-align: justify;"><a href="http://www.comolohago.cl/uploads/galeria/"><br />
</a><a href="http://www.comolohago.cl/uploads/galeria.rar"><img class="aligncenter" style="border: 0pt none;" src="http://farm3.static.flickr.com/2749/4471629680_c89163fa14_o.png" alt="" width="279" height="105" /></a>Y con eso damos por terminado este tutorial, recordándoles como siempre que ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" />Esperamos que haya sido de utilidad para Uds. Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Cómo crear un slideshow para nuestros sitios Web</title>
		<link>http://www.comolohago.cl/2009/03/25/como-crear-un-slideshow-para-nuestros-sitios-web/</link>
		<comments>http://www.comolohago.cl/2009/03/25/como-crear-un-slideshow-para-nuestros-sitios-web/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 01:42:39 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[Slideshow]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=371</guid>
		<description><![CDATA[
Quizás el término &#8220;slideshow&#8221; sea algo desconocido para muchos. Cuando hablamos de eso, nos referimos a un set de diapositivas animadas, dentro de las cuales podemos incluir imágenes, que van rotando con el paso de un tiempo determinado.
Esta sin duda es una inclusión muy atractiva que podemos hacer en nuestros sitios Web si tenemos contenido [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3465/3385746783_fdcaccc74c.jpg?v=0" alt="" width="400" height="228" /></p>
<p style="text-align: justify;">Quizás el término <em>&#8220;slideshow&#8221;</em> sea algo desconocido para muchos. Cuando hablamos de eso, nos referimos a un set de diapositivas animadas, dentro de las cuales podemos incluir imágenes, que van rotando con el paso de un tiempo determinado.</p>
<p style="text-align: justify;">Esta sin duda es una inclusión muy atractiva que podemos hacer en nuestros sitios Web si tenemos contenido que quisiéramos desplegar de esa forma. Pues bien, hoy, en CLH, les traemos una sencilla forma de aplicarlos en sus páginas Web mediante el uso de librerías de carga rápida y que les entregarán un efecto sólido para sus visitantes.</p>
<p style="text-align: justify;">Todo el detalle, como siempre, después del salto.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span id="more-371"></span></p>
<p style="text-align: justify;">
<h1 style="text-align: center;">Cómo crear un slideshow para nuestros sitios Web</h1>
<p style="text-align: justify;">Como siempre, lo primero:</p>
<p style="text-align: justify;">
<h2>Implementos necesarios:</h2>
<ol>
<li style="text-align: justify;">Un editor Web, aunque de cualquier forma si no poseemos podemos utilizar block de notas. Como siempre, recomendamos, Adobe Dreamweaver, el cual pueden descargar desde <a href="http://www.adobe.com/products/dreamweaver/" target="_blank">este enlace</a>.</li>
</ol>
<p style="text-align: justify;">Para esto nos apoyaremos en la librería JQuery y en un simple script llamado Simple Slideshow, el cual no es necesario descargar, ya que lo incluiremos en el código final de este ejemplo.</p>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">1.-Lo primero que hacemos será crear un nuevo archivo HTML y lo llamamos como queramos. Para este tutorial, lo hemos llamado <strong>ejemplo.html</strong></p>
<p style="text-align: justify;">2.- A continuación, hacemos todos los ajustes que queramos con respecto al título de la página y estilo de esta <em>(color de fondo, márgenes, etc.)</em>.</p>
<p style="text-align: justify;">3.- Luego, justo después de cerrar la etiqueta &lt;TITLE&gt; y antes de cerrar la etiqueta &lt;HEAD&gt;, insertaremos el siguiente código, correspondiente a los ajustes de CSS que se realizarán sobre el slideshow:</p>
<p style="text-align: justify;">
<blockquote>
<p style="text-align: justify;">&lt;style type=&#8221;text/css&#8221;&gt;<br />
ul.ppt {<br />
position: relative;<br />
}</p>
<p>.ppt li {<br />
list-style-type: none;<br />
position: absolute;<br />
top: 0;<br />
left: 0;<br />
}</p>
<p>.ppt img {<br />
border: 1px solid #e7e7e7;<br />
padding: 5px;<br />
background-color: #ececec;<br />
}<br />
&lt;/style&gt;</p></blockquote>
<p style="text-align: justify;">4.- A continuación, luego de abrir la etiqueta BODY, crearemos una lista no ordenada con elementos Li. Cada uno de estos elementos contendrá la ruta de una de las imágenes que queremos desplegar en nuestro Slideshow. En nuestro caso mostraremos las siguientes imágenes:</p>
<p style="text-align: justify;"><img src="http://farm4.static.flickr.com/3166/2680760127_646006b42a.jpg?v=0" alt="" width="150" height="199" /><img src="http://farm4.static.flickr.com/3205/2681577668_38f32ff9cf.jpg?v=0" alt="" width="150" height="200" /><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="176" height="138" /></p>
<p style="text-align: justify;">Entonces, nuestro código quedaría de la siguiente forma, justo después de abrir la etiqueta BODY:</p>
<blockquote>
<p style="text-align: justify;">&lt;ul class=&#8221;ppt&#8221;&gt;<br />
&lt;li&gt;&lt;img src=&#8221;nombre de la imagen 1.extensión&#8221; alt=&#8221;descripción 1&#8243;&gt;&lt;/img&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;img src=&#8221;nombre de la imagen 2.extensión&#8221; alt=&#8221;descripción 2&#8243;&gt;&lt;/img&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;img src=&#8221;nombre de la imagen 3.extensión&#8221; alt=&#8221;descripción 3&#8243;&gt;&lt;/img&gt;&lt;/li&gt;<br />
&lt;/ul&gt;</p></blockquote>
<p style="text-align: justify;">Como podemos ver, el elemento de lista no ordenada <em>(ul)</em> hace un llamado al estilo ppt definido en nuestro CSS más arriba y luego listamos las imágenes que pondremos con sus respectivas descripciones.</p>
<p style="text-align: justify;">5.- Luego, insertaremos el código que hará el llamado a la librería JQuery para hacer los efectos correspondientes. Este código lo ponemos a continuación del anterior y no es necesario modificarlo:</p>
<blockquote>
<p style="text-align: justify;">&lt;script type=&#8221;text/javascript&#8221; src=&#8221;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
$(&#8216;.ppt li:gt(0)&#8217;).hide();<br />
$(&#8216;.ppt li:last&#8217;).addClass(&#8216;last&#8217;);<br />
var cur = $(&#8216;.ppt li:first&#8217;);</p>
<p>function animate() {<br />
cur.fadeOut( 1000 );<br />
if ( cur.attr(&#8216;class&#8217;) == &#8216;last&#8217; )<br />
cur = $(&#8216;.ppt li:first&#8217;);<br />
else<br />
cur = cur.next();<br />
cur.fadeIn( 1000 );<br />
}</p>
<p>$(function() {<br />
setInterval( &#8220;animate()&#8221;, 5000 );<br />
} );<br />
&lt;/script&gt;</p></blockquote>
<p style="text-align: justify;">6.- Guardamos nuestro HTML asegurándonos que las imágenes se encuentren en la misma ruta y abrimos el archivo en nuestro navegador favorito.</p>
<p style="text-align: justify;">Para ver como queda el ejemplo, pueden ver <a href="http://www.comolohago.cl/uploads/ejemplo.html" target="_blank">este enlace</a>.</p>
<p style="text-align: justify;">Como podemos ver, hemos obtenido un muy buen resultado basándonos en librerías bastante livianas para ejecutar en nuestros sitios Web y de esta forma podemos ofrecer un contenido muy atractivo a nuestros visitantes.</p>
<p style="text-align: justify;">Los instamos a probar distintas formas de aplicar estos slideshows y acomodarlos a sus propias necesidades, como se puede ver, el código es muy simple y no requiere mayores conocimientos ni ajustes.</p>
<p style="text-align: justify;">Como siempre, recuerden que este tutorial ha sido:</p>
<p style="text-align: justify;">
<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/03/25/como-crear-un-slideshow-para-nuestros-sitios-web/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
	</channel>
</rss>

