<?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; HTML</title>
	<atom:link href="http://www.comolohago.cl/category/diseno-web/html/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 gadget en Windows 7</title>
		<link>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/</link>
		<comments>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 02:22:32 +0000</pubDate>
		<dc:creator>Cri</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Gadget]]></category>
		<category><![CDATA[sidebar]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3803</guid>
		<description><![CDATA[
 
Hola   amigos de Cómo Lo Hago, tratando de sorprenderlos día a día nos empeñamos en poder crear nuevos tutoriales y ayudarlos en adquirir un mayor conocimiento como también desenvolverse dentro de un nuevo tipo de desarrollo. Esta vez será la ocasión de crear un Gadget el cual nos puede servir para una [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4076/4878538776_56444ce8d5.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;">Hola   amigos de Cómo Lo Hago, tratando de sorprenderlos día a día nos empeñamos en poder crear nuevos tutoriales y ayudarlos en adquirir un mayor conocimiento como también desenvolverse dentro de un nuevo tipo de desarrollo. Esta vez será la ocasión de crear un <strong><em>Gadget</em></strong> el cual nos puede servir para una infinidad de cosas dependiendo del uso que le queramos dar, en este caso veremos como hacer uno con alimentacion RSS de los tutoriales que se hacen en CómoLoHago. Partiendo por una cosa, es muy importante recalcar que no hay que ser programador para poder realizar este tuto, pero sí tener harta paciencia para darle al clavo. Los invito a seguir en este entretenido tuto como siempre despues del salto&#8230;</p>
<p style="text-align: justify;"><span id="more-3803"></span></p>
<p style="text-align: justify;"><img title="Más..." src="http://www.comolohago.cl/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;"><strong> </strong></p>
<h1 style="text-align: center;">Cómo hacer un gadget en Windows 7</h1>
<p style="text-align: justify;">1.  ¿Qué  necesitamos?</p>
<ul style="text-align: justify;">
<li>Sistema operativo Windows 7</li>
<li>Aprender un poco de HTML + CSS. Para esto puede recurrir a los siguientes tutoriales</li>
</ul>
<ol>
<li><a href="http://www.comolohago.cl/2010/02/11/como-convertirse-en-un-campeon-de-html-parte-1/">Aprender HTML</a><em><br />
</em></li>
<li><a href="http://www.comolohago.cl/2009/02/01/como-dominar-css-sin-salir-del-escritorio-parte-1/">Aprende CSS</a><em><br />
</em></li>
</ol>
<h2 style="text-align: justify;">2.  ¿Cómo  lo hago?</h2>
<p style="text-align: justify;"><strong>1. </strong>Manos a la obra, primero a buscar donde tenemos nuestros <strong><em>Gadgets</em></strong> los cuales se encontrarán siempre por <em>default</em> en <strong><em>Archivos de programa&gt;Windows Sidebar&gt;Gadgets</em></strong>. Una vez ubicados en esta carpeta procederemos a crear la carpta contenedora de nuestro futuro Gadget por desarrollar. Es muy importante que la extensión del nombre sea así:</p>
<p style="text-align: justify;"><strong>NOMBREDEMIGADGET.Gadget</strong></p>
<p style="text-align: justify;"><strong> </strong> <img class="alignnone" src="http://farm5.static.flickr.com/4094/4877930213_23b99c9738_z.jpg" alt="" width="640" height="493" /></p>
<p style="text-align: justify;"><strong>2. </strong>Una vez creada nuestra carpeta contenedora necesitaremos algunos archivos indispensables para poder personalisar y a la vez desarrollar:</p>
<p><img src="http://farm5.static.flickr.com/4082/4877930397_912a5736e3_z.jpg" alt="" width="640" height="493" /></p>
<ul style="text-align: justify;">
<li><em>MiGadget.html: Contiene el código principal para los ajustes de color, fondo, letras, links, feeders, etc</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address>&lt;html xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243; /&gt;<br />
&lt;title&gt;ComoLoHago mi primer gadget&lt;/title&gt;<br />
&lt;!&#8211; Para llamar a nuestros Settings.js del gadget &#8211;&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;MiGadget.js&#8221;&gt;&lt;/script&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
/*/ El cuerpo de nuestro Gadget /*/<br />
body<br />
{</address>
<address>width: 330px;<br />
height: 450px;<br />
font-family: verdana;<br />
font-weight: lighter;<br />
margin:0px;<br />
font-size: 10px;<br />
overflow-x:hidden;<br />
overflow-y:auto;<br />
background-color:#333333;<br />
scrollbar-face-color:#444444; /*/ Color del cuadro /*/<br />
scrollbar-arrow-color:#999999; /*/ Color de la flecha de nuestro scroll /*/<br />
scrollbar-track-color:#333333;  /*/ Color de la vía donde se mueve el scroll /*/<br />
scrollbar-highlight-color:#444444; /*/ Si queremos color desde un ángulo /*/<br />
scrollbar-darkshadow-color:#444444; /*/Color opuesto al lugar al Highlight-Color /*/<br />
scrollbar-shadow-color:#444444; /*/ Si queremos sombra /*/<br />
scrollbar-3dlight-color:#444444;  /*/ Si queremos color de luz 3d /*/</address>
<address>}</address>
<address>#ContenidoDeMiGadget</address>
<address>/*/Aqui se encuentra parte del contenido que se alimentará dentro de nuestro gadget/*/<br />
{</address>
<address>width: 318px;<br />
margin-left:1px;<br />
height:100px;<br />
vertical-align: middle;<br />
text-align:center;<br />
background-color:#333333;</address>
<address>}</address>
<address>/*/ Este es el codigo especial para poder editar todo dentro del contenido rss /*/<br />
/*/ ya sea colores de letras, colores de fondo, bordes, etc/*/</address>
<address>/*/1-Con esto le indicamos al contenido el ancho que ocupará/*/</address>
<address>.rssxpresschannel { width:318px; font-family: Verdana; }</address>
<address>.rssxpresstable {height:200px; width:318px;}</address>
<address>/*/2-Con esto le indicamos al subtitulo &#8220;Sí se puede, te lo enseñamos&#8221; lo que queremos/*/</address>
<address>.rssxpresschdesc {font-size:10px; background-color:#333333; color:99BBFF; font-style:italic;}</address>
<address>/*/3-Con esto le indicamos al título &#8220;Como Lo Hago&#8221; lo que queremos/*/</address>
<address>.rssxpresschtitle  {font-size:12px; font-family:Arial; color:#99BBFF;  background-color:#333333; background-position:right;  background-image:url(logo.png); background-repeat:no-repeat;  height:69px; width:88px;margin-top:10px;}</address>
<address>/*/4-Con esto le indicamos al título de cada tema lo que queremos/*/</address>
<address>.rssxpressittitle  {font-size:10px; margin-right:5px; background-color:#333333;  border-top-style:inset; border-top-color:#999999; border-width:thin; }</address>
<address>/*/5-Con esto le indicamos a la descripcion de cada contenido lo que queremos/*/</address>
<address>.rssxpressitdesc  {font-size:10px; background-color:#333333; color:#FFFFFF;  margin-top:5px; margin-bottom:5px; font-weight:lighter; }</address>
<address>A:link {text-decoration:none;color:#99BBFF;}</address>
<address>A:visited {text-decoration:none;color:#99BBFF;}</address>
<address>A:active {text-decoration:none;color:#99BBFF;}</address>
<address>A:hover {text-decoration:none;color:#00BBFF;}</address>
<address>&lt;/style&gt;<br />
&lt;/head&gt;</address>
<address>&lt;b style=&#8221;margin-left:210px&#8221; style=&#8221;color:#555555&#8243;&gt;ComoLoHago v1.0&lt;/b&gt;<br />
&lt;body&gt;<br />
&lt;!&#8211;Contenido de mi gadget&#8211;&gt;<br />
&lt;div id=&#8221;ContenidoDeMiGadget&#8221;&gt;<br />
&lt;!&#8211;Script alimentador del contenido Rss&#8211;&gt;<br />
&lt;script src=&#8221;http://rssxpress.ukoln.ac.uk/lite/viewer/?rss=http%3A%2F%2Fwww.comolohago.cl%2Ffeed&#8221;&gt;&lt;/script&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</address>
</blockquote>
<ul style="text-align: justify;">
<li><em>Settings.html: Contiene el código para los ajustes de nuestro Gadget</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address style="text-align: justify;">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243; /&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;</p>
<p>body<br />
{</p>
</address>
<address style="text-align: justify;">/*/ ancho y alto de nuestro menu de ajustes /*/<br />
width:300px;<br />
height:250px;<br />
}</p>
<p>/*/un poco de CSS /*/<br />
#L_settingsTitle<br />
{<br />
font-family:Arial;<br />
font-size:15px;<br />
color:#FF0000;<br />
}</p>
<p>#L_settingsTitleLabel<br />
{<br />
font-family:Arial;<br />
font-size:8px;<br />
font-style:italic;<br />
color:#000000;<br />
}</p>
<p>&lt;/style&gt;</p>
<p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;MiGadget.js&#8221;&gt; &lt;/script&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;p&gt;Aqui agregan su contenido&lt;/p&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</address>
</blockquote>
<ul style="text-align: justify;">
<li><em>MiGadget.js: Contiene el código especial para poder tener ajustes en nuestro Gadget.</em></li>
</ul>
<blockquote style="text-align: justify;"><address>// Importantisimo para poder tener los ajustes de nuestro Gadget<br />
</address>
<address>System.Gadget.settingsUI = &#8220;Settings.html&#8221;;</address>
<address>System.Gadget.onSettingsClosing = SettingsClosing;</address>
<p style="text-align: justify;">
</blockquote>
<ul style="text-align: justify;">
<li><em>Gadget.xml: Contiene el autor, nombre, descripción, ícono, logo. En sí es lo necesario para aparecer en el menú para seleccionar el Gadget</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt;</address>
<address>&lt;gadget&gt;</address>
<address> &lt;name&gt;CómoLoHago &#8211; Novedades&lt;/name&gt;</address>
<address> &lt;version&gt;1.0&lt;/version&gt;</address>
<address> &lt;author name=&#8221;CómoLoHago Team&#8221;&gt;</address>
<address> &lt;info url=&#8221;www.ComoLoHago.cl&#8221; /&gt;</address>
<address> &lt;/author&gt;</address>
<address> &lt;copyright&gt;&amp;#169; CómoLoHago 2010&lt;/copyright&gt;</address>
<address> &lt;description&gt;Novedades acerca de tutoriales nuevos en tu escritorio&lt;/description&gt;</address>
<address> &lt;icons&gt;</address>
<address> &lt;icon height=&#8221;48&#8243; width=&#8221;48&#8243; src=&#8221;icono.png&#8221;/&gt;</address>
<address> &lt;/icons&gt;</address>
<address> &lt;hosts&gt;</address>
<address> &lt;host name=&#8221;sidebar&#8221;&gt;</address>
<address> &lt;autoscaleDPI&gt;true&lt;/autoscaleDPI&gt;</address>
<address> &lt;base type=&#8221;HTML&#8221; apiVersion=&#8221;1.0.0&#8243; src=&#8221;MiGadget.html&#8221; /&gt;</address>
<address> &lt;permissions&gt;Full&lt;/permissions&gt;</address>
<address> &lt;platform minPlatformVersion=&#8221;1.0&#8243; /&gt;</address>
<address> &lt;defaultImage src=&#8221;imagenarrastrada.png&#8221;/&gt;</address>
<address> &lt;/host&gt;</address>
<address> &lt;/hosts&gt;</address>
<address>&lt;/gadget&gt;</address>
</blockquote>
<p style="text-align: justify;"><strong>2. </strong>La flecha blanca indica el ícono que aparecerá en el menú de <em><strong>Gadgets</strong></em>. Este ícono <em>(icono.png)</em> se direcciona desde nuestro archivo XML, en este caso Gadget.xml. También podemos agregar otra imagen para cuando arrastremos nuestro <em><strong>Gadget</strong></em> al escritorio <em>(imagenarrastrada.png)</em>.</p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4100/4878539210_3d1179ddee.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4081/4878539308_5af141246a.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><strong>3. </strong>Finalmente nos podemos dar cuenta que nuestro <strong><em>Gadget</em></strong> va adquiriendo la forma que le damos con CSS y HTML ademas de las programaciones que cada uno le dé en javascript.</p>
<p style="text-align: justify;">Para poder mostrar el contenido RSS, tuve que recurrir a la página <a href="http://rssxpress.ukoln.ac.uk/lite/include/?t=1" target="_blank">http://rssxpress.ukoln.ac.uk/lite/include/?t=1</a> para obtener el script feeder el cual va inserto en <strong><em>MiGadget.html</em></strong>:</p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4123/4877930675_981c161b84.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4094/4877930725_0e4a769418.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4102/4877930919_d251acf20b.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;">Espero    les haya gustado, les motive para hacer sus propias creaciones y así poder compartirlas con los demas. Me despido</p>
<p style="text-align: justify;">Como   siempre exclusivamente  ha sido:</p>
<p style="text-align: justify;"><img src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" /></p>
<p style="text-align: justify;"><strong>Staff  CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Cómo utilizar la API de Google Maps</title>
		<link>http://www.comolohago.cl/2010/08/08/como-utilizar-la-api-de-google-maps/</link>
		<comments>http://www.comolohago.cl/2010/08/08/como-utilizar-la-api-de-google-maps/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 19:08:10 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[api de google maps]]></category>
		<category><![CDATA[como implementar los mapas de google en mi web]]></category>
		<category><![CDATA[como usar google maps en mi web]]></category>
		<category><![CDATA[como usar la api de google maps]]></category>
		<category><![CDATA[como usar los mapas de google]]></category>
		<category><![CDATA[google maps]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3795</guid>
		<description><![CDATA[
Google Maps, el dominador absoluto a la hora de buscar locaciones alrededor del mundo, tiene disponible hace bastante tiempo una API que podemos integrar en nuestras aplicaciones y sitios Web de manera bastante sencilla. Con esto, podemos entregar funcionalidades bastante interesantes a nuestros usuarios e interactuar de una nueva forma para hacer que su experiencia [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4095/4871861019_ded7409785.jpg" alt="" width="450" height="136" /></p>
<p style="text-align: justify;">Google Maps, el dominador absoluto a la hora de buscar locaciones alrededor del mundo, tiene disponible hace bastante tiempo una API que podemos integrar en nuestras aplicaciones y sitios Web de manera bastante sencilla. Con esto, podemos entregar funcionalidades bastante interesantes a nuestros usuarios e interactuar de una nueva forma para hacer que su experiencia en nuestros sitios sea aún mejor.</p>
<p style="text-align: justify;">Hoy, en un rápido y sencillo tutorial, veremos como hacer uso de esta API en un sitio Web cualquiera y desplegar mediante un mapa una ubicación indicada mediante georeferencia.</p>
<p style="text-align: justify;">Para el detalle, como siempre, vamos después del salto.</p>
<p style="text-align: justify;"><span id="more-3795"></span></p>
<h1 style="text-align: center;">Cómo utilizar la API de Google Maps</h1>
<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>10 min.</li>
<li><strong>Dificultad:</strong> Intermedio.</li>
<li><strong>Conocimientos previos:</strong> HTML, Javascript.</li>
</ul>
<h2><img title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" />Implementos necesarios:</h2>
<ul>
<li>Una clave de la API de Google Maps <em>(pueden obtenerla <a href="http://code.google.com/apis/maps/signup.html" target="_blank">aquí</a>).</em></li>
<li>Una página Web para desplegar el mapa <em>(puede ser de forma local o en un hosting)</em>.</li>
</ul>
</blockquote>
<p style="text-align: justify;">
<h2 style="text-align: justify;">Implementación Básica:</h2>
<p style="text-align: justify;">1.- Lo primero que debemos hacer, para poder utilizar la API, es obtener una clave de uso en el sitio de Google Maps. Para eso, nos dirigimos al <a href="http://code.google.com/apis/maps/signup.html" target="_blank">sitio de inscripción</a> y completamos los datos requeridos:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4117/4872522412_53a128975e_z.jpg" alt="" width="600" height="436" />En la parte inferior, debemos tickear la opción <strong>&#8220;I have read and agree with the terms and conditions</strong>&#8220;, y luego en el campo de texto que está a continuación ingresar la URL del sitio donde utilizaremos la API.</p>
<p style="text-align: justify;">Sobre esto último es bueno tener en cuenta un par de cosas:</p>
<ul>
<li>Una clave de API es única para un dominio y funcionará solo en este. Por ello, si tenemos un servidor de desarrollo <em>(por ejemplo localhost)</em> y uno de producción <em>(por ejemplo www.ejemplo.com)</em>, deberemos obtener 2 claves y utilizar una en cada caso, de lo contrario no funcionará.</li>
<li>Al ingresar la URL de nuestro sitio, lo mejor es ingresar la raíz del dominio <em>(http://dominio.com)</em>. De esta forma, la clave funcionará con todos los subdominios y directorios del sitio.</li>
</ul>
<p>2.- Si hemos cumplido los requerimientos, al hacer click en el botón <strong>Generate API Key</strong>, nos devolverá la clave para utilizar la API en nuestro dominio:</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4139/4872609234_ec9782775b_z.jpg" alt="" width="600" height="291" /></p>
<p>Con esto, ya estamos listos para utilizar la API en nuestro sitio.</p>
<p style="text-align: justify;">3.- Para ello, generaremos en primer lugar, un archivo HTML, el cual llamaremos <strong>ejemplo.html</strong>. Aquí, incluiremos mediante etiquetas <em>&lt;script&gt;</em>, la llamada a la API, incluyendo los parámetros y la clave. Esto, dentro del encabezado del HTML.</p>
<pre class="html" title="code">&lt;script src="http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;sensor=false&amp;amp;key=ABQIAAAAHhzikxCQyRAS8ryQoB75mRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQiqBRnE1Iky5sZfKGxzYbUanZ0HA" type="text/javascript"&gt;&lt;/script&gt;
</pre>
<p style="text-align: justify;">Los parámetros incluidos en la URL son:</p>
<ul>
<li><strong>file:</strong> Mediante esto, indicamos que estamos haciendo un llamado a la API.</li>
<li><strong>v:</strong> Indica la versión de la API que estamos utilizando <em>(la más reciente es la 3)</em>.</li>
<li><strong>sensor:</strong> Indica si la aplicación está utilizando o no un dispositivo para detectar la posición del usuario <em>(como un GPS)</em>. Como es una página, lo dejamos en falso.</li>
<li><strong>key:</strong> Indica la clave de uso de la API, que obtuvimos en el paso 1.</li>
</ul>
<p>4.- Ahora, también dentro del encabezado, crearemos una función en Javascript, la cual inicializará el mapa y lo desplegará, una vez que hagamos el llamado:</p>
<pre class="html" title="code">&lt;script type="text/javascript"&gt;

function inicializar() {

    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(37.4419, -122.1419), 15);
    }
}

&lt;/script&gt;
</pre>
<p>Analizando la función escrita anteriormente, nos encontramos con varias cosas a las que debemos ponerle atención:</p>
<ul>
<li style="text-align: justify;">Lo primero que hacemos, es preguntar si el navegador es compatible con la API. Esto lo obtenemos mediante la función <strong>GBrowserIsCompatible</strong>. Solo si la respuesta es positiva, se procederá con el resto de los procesos.</li>
<li style="text-align: justify;">Luego, se crea una variable llamada <strong>map</strong>, en la cual se crea el nuevo objeto que será manipulado con los métodos de la API. Este objeto, hará referencia a un elemento del documento HTML con la id de <strong>map</strong>. Ahí es donde se mostrará el mapa.</li>
<li style="text-align: justify;">Y finalmente, definimos el punto en donde aparecerá el mapa por primera vez. Esto es mediante el método <strong>setCenter</strong>, al cual le pasamos un set de coordenadas mediante el objeto <strong>GLatLng, </strong>entregando una latitud y longitud.</li>
<li style="text-align: justify;">El último parámetro <em>(en este caso el 15)</em>, indica el nivel de zoom inicial que tendrá el mapa. Pueden ajustarlo a gusto.</li>
</ul>
<p style="text-align: justify;">5.- Una vez que tenemos nuestra función definida, solo nos falta hacer la llamada desde el cuerpo del documento HTML. Para ello, deberemos crear un div con una id de map <em>(Si recuerdan, el objeto está enlazado a esa id)</em> para poder desplegarlo. Dentro de ese div, haremos la llamada a la función.</p>
<pre class="html" title="code">&lt;div id="map" style="width:600px; height:600px"&gt;
&lt;script type="text/javascript"&gt;inicializar();&lt;/script&gt;
&lt;/div&gt;</pre>
<p style="text-align: justify;">Le hemos dado un ancho y alto de 600px al div para que pueda mostrar el mapa de manera óptima. Para efectos del ejemplo hemos ajustado estilos CSS dentro de la etiqueta, pero es ideal trabajar con archivos externos.</p>
<p style="text-align: justify;">Si abrimos el archivo en nuestro navegador, nos debería desplegar el mapa, con la ubicación centrada en Palo Alto, CA. Hasta aquí vamos muy bien, pero sería genial poder personalizarlo un poco más, ¿no?.</p>
<h2 style="text-align: justify;">Personalizando el mapa</h2>
<p style="text-align: justify;">6.- Lo primero que haremos, será cambiar la ubicación por defecto del mapa. Para esto, reemplazaremos el set de coordenadas que habíamos incluido en el método <strong>setCenter</strong>. Nos vamos a Google Maps y buscamos una dirección cualquiera:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4143/4872707348_c8162ba21e_z.jpg" alt="" width="600" height="273" /></p>
<p style="text-align: justify;">En la parte superior, la opción <strong>Enlace</strong> nos entrega una URL completa de la ubicación, la cual incluye las coordenadas correspondientes a la latitud y longitud del lugar. Las copiamos y reemplazamos en el método setCenter para obtener un nuevo mapa al actualizar la página.</p>
<p style="text-align: justify;">7.- Google Maps nos permite añadir diferentes tipos de controles al mapa, que le permitirán al usuario final interactuar sin problemas con él. Entre los controles que podemos agregar, están:<strong> </strong></p>
<ul>
<li style="text-align: justify;"><strong><strong>GMapTypeControl:</strong> </strong>Permite controlar el tipo de mapa a mostrar <em>(entre mapa, satelite e híbrido)</em>.</li>
<li style="text-align: justify;"><strong>GLargeMapControl:</strong> Añade controles de movimiento para el mapa.</li>
<li style="text-align: justify;"><strong>GScaleControl:</strong> Añade controles de zoom para el mapa.</li>
<li style="text-align: justify;"><strong>GOverviewMapControl:</strong> Añade una pequeña sobrevista en la esquina inferior derecha.</li>
</ul>
<p>Para incluirlos, solo añadimos las siguientes líneas a nuestra función <strong>inicializar</strong>:</p>
<pre class="javascript" title="code">map.addControl(new GMapTypeControl());
map.addControl(new GLargeMapControl());
map.addControl(new GScaleControl());
map.addControl(new GOverviewMapControl());</pre>
<p>Y si ahora actualizamos el mapa, veremos que se añadieron nuevos controles.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4097/4872789820_3115ccccc6_z.jpg" alt="" width="600" height="596" /></p>
<p>8.- ¿Qué nos falta?. Claramente, añadir una marca en la ubicación que estamos indicando en el mapa, de lo contrario solo veremos un gran cuadro sin nada que destacar.</p>
<p style="text-align: justify;">Para esto, haremos uso de 3 métodos: <strong>GLatLng</strong> para establecer la ubicación de la marca, <strong>GMarker</strong> para crear la marca en ese lugar y <strong>addOverlay</strong> para añadirla sobre el mapa. Por ello, debemos añadir el siguiente código a la función <strong>inicializar</strong>:</p>
<pre class="javascript" title="code">map.addOverlay(new GMarker(new GLatLng(-33.43795,-70.603627)));</pre>
<p style="text-align: justify;">Y si actualizamos el mapa, veremos un marcador de color rojo sobre la ubicación.</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4115/4872182665_d99de4bdde_z.jpg" alt="" width="600" height="590" /></p>
<p style="text-align: justify;">9.- Y ahora como detalle final, crearemos un pequeño texto de información sobre la marca, para cuando un usuario haga click en ella. Para esto, modificaremos un poco el código creado en el punto anterior. Ahora haremos una función que creará la marca y relacionará la información mediante un eventListener, el cual reaccionará cuando se haga click. En resumen, añadimos el siguiente código a nuestra función <strong>inicializar</strong>:</p>
<pre class="javascript" title="code">function informacion(ubicacion, descripcion) {

   var marca = new GMarker(ubicacion);
   GEvent.addListener(marca, "click", function() {
     marca.openInfoWindowHtml(descripcion); } );

     return marca;

   }

var ubicacion = new GLatLng(-33.43795,-70.603627);
var descripcion = '&lt;b&gt;Texto ejemplo&lt;/b&gt;&lt;br/&gt;Para tutorial de CLH&lt;br /&gt;';
var marca = informacion(ubicacion, descripcion);

map.addOverlay(marca);</pre>
<p style="text-align: justify;">Lo que hacemos aquí es crear 3 variables: <strong>ubicacion</strong>, que genera un punto mediante latitud y longitud <em>(el mismo que habíamos generado antes)</em>, <strong>descripcion</strong> que contiene el texto explicativo y <strong>marca</strong> que llama a la función <strong>informacion</strong>, la cual genera la marca, y añade el evento en caso de click sobre ella, retornando el resultado final.</p>
<p style="text-align: justify;">Nuestro código completo queda de la siguiente forma:</p>
<pre class="html" title="code">&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
&lt;title&gt;Ejemplo de uso - API Google Maps - CLH&lt;/title&gt;

&lt;script src="http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;sensor=false&amp;amp;key=ABQIAAAAHhzikxCQyRAS8ryQoB75mRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQiqBRnE1Iky5sZfKGxzYbUanZ0HA" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;

function inicializar() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(-33.43795,-70.603627), 15);
map.addControl(new GMapTypeControl());
map.addControl(new GLargeMapControl());
map.addControl(new GScaleControl());
map.addControl(new GOverviewMapControl());
//map.addOverlay(new GMarker(new GLatLng(-33.43795,-70.603627)));

function informacion(ubicacion, descripcion) {

var marca = new GMarker(ubicacion);
GEvent.addListener(marca, "click", function() {
marca.openInfoWindowHtml(descripcion); } );

return marca;

}

var ubicacion = new GLatLng(-33.43795,-70.603627);
var descripcion = '&lt;b&gt;Texto ejemplo&lt;/b&gt;&lt;br/&gt;Para tutorial de CLH&lt;br /&gt;';
var marca = informacion(ubicacion, descripcion);

map.addOverlay(marca);

}
}

&lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
&lt;div id="map" style="width:600px; height:600px"&gt;
&lt;script type="text/javascript"&gt;inicializar();&lt;/script&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p style="text-align: justify;">Si actualizamos nuestro mapa, y hacemos click en la marca, veremos el texto descriptivo:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4138/4872871728_d965eb428c_z.jpg" alt="" width="600" height="590" /></p>
<p style="text-align: justify;">Y con eso finalizamos la personalización de nuestro mapa, obtenido a través de la API de Google Maps.</p>
<p style="text-align: justify;">Como se puede apreciar, la implementación es bastante rápida y presenta varias otras opciones que pueden ser analizadas a fondo en la documentación que nos entrega Google al respecto, la cual recomendamos explorar en caso de querer obtener resultados más avanzados.</p>
<p style="text-align: justify;">Por ahora, les recordamos que este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" />Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas 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/08/08/como-utilizar-la-api-de-google-maps/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<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 un cuadro de información de autores en Wordpress</title>
		<link>http://www.comolohago.cl/2010/05/22/como-crear-un-cuadro-de-informacion-de-autores-en-wordpress/</link>
		<comments>http://www.comolohago.cl/2010/05/22/como-crear-un-cuadro-de-informacion-de-autores-en-wordpress/#comments</comments>
		<pubDate>Sun, 23 May 2010 02:33:05 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[informacion de autores]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3507</guid>
		<description><![CDATA[
Es común que cuando tenemos múltiples autores escribiendo en un sitio, querramos mostrar la información del responsable de cada artículo para que los usuarios puedan conocer quien está detrás de cada cosa que se escribe. Si bien en CLH en un principio optamos por no mostrar la información, y luego hacer una pequeña referencia al [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4065/4630128565_59468f80c9_o.png" alt="" width="451" height="184" /></p>
<p style="text-align: justify;">Es común que cuando tenemos múltiples autores escribiendo en un sitio, querramos mostrar la información del responsable de cada artículo para que los usuarios puedan conocer quien está detrás de cada cosa que se escribe. Si bien en CLH en un principio optamos por no mostrar la información, y luego hacer una pequeña referencia al comienzo de cada artículo, eventualmente hemos llegado al punto de incluirlo <em>(principalmente por Dexter, que quiere ser famoso <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  )</em></p>
<p style="text-align: justify;">En la búsqueda de alternativas, dimos con varios plugins que ayudan a automatizar la tarea, pero nada que nos satisfaciera por completo en cuanto a diseño y personalización. Luego de analizar el tema más a fondo fue posible darse cuenta que armar un cuadro de información desde cero no es una tarea compleja, y si entrega una gran flexibilidad para el armado, por lo que echamos manos a la obra y hoy, en un sencillo y rápido tutorial, les enseñaremos el proceso paso a paso.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3507"></span></p>
<h1 style="text-align: center;">Cómo crear un cuadro de información de autores en Wordpress</h1>
<p style="text-align: justify;">Antes de todo, como siempre:</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: 10</strong> 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, PHP y las funciones de Wordpress.</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 sitio con Wordpress.</li>
</ul>
</blockquote>
<p style="text-align: justify;">
<h2 style="text-align: justify;">Procedimiento:</h2>
<p style="text-align: justify;">La implementación de un cuadro de información de autores, cuenta con varias partes:</p>
<ul>
<li style="text-align: justify;">Código HTML para crear el cuadro.</li>
<li style="text-align: justify;">Código CSS para estilizarlo.</li>
<li style="text-align: justify;">Código PHP para insertar las funciones de Wordpress.</li>
</ul>
<p style="text-align: justify;">Así que vamos, a implementar:</p>
<h2 style="text-align: justify;">Código HTML</h2>
<p style="text-align: justify;">Con esto armaremos la estructura de nuestro cuadro de información de autores, el <em>esqueleto</em> por ponerlo de alguna forma. En el, incluiremos principalmente 3 cosas:</p>
<ol>
<li>Imagen del autor.</li>
<li>Información del autor <em>(nombre y sitio Web)</em>.</li>
<li>Bio del autor.</li>
</ol>
<p style="text-align: justify;">Para verlo de forma más gráfica, armaremos algo de la siguiente forma:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4028/4630191997_2f99d2eb43_o.png" alt="" width="600" height="263" /></p>
<p style="text-align: justify;">Como podemos ver, no es demasiado complejo. Desarmando esa imagen es posible apreciar que necesitamos un Div para el cuadro completo que debe contener a su vez 2 Div&#8217;s: Uno para la imagen del autor y una para la bio e información del autor. Así que viendo esto en código, sería algo de la siguiente forma:</p>
<pre class="html" title="code">&lt;div id="cuadro-info"&gt;
   &lt;div id="imagen-autor"&gt;
        Aqui iría la imagen del autor
   &lt;/div&gt;
   &lt;div id="info-bio-autor"&gt;
       Aquí iría la información y bio del autor
   &lt;/div&gt;
&lt;/div&gt;</pre>
<p style="text-align: justify;">Vamos viendo. En el código anterior está claro que irá contenido dentro de cada Div, por lo que rellenarlo es bastante sencillo. Podríamos agregar una etiqueta para imágenes y luego abajo escribir el texto que querramos que aparezca. Sin embargo, ¿qué pasa si tenemos múltiples autores?, o más bien ¿cómo le decimos a Wordpress que incluya la información del autor del artículo y no de otra persona?. Ahí es donde entran las funciones de Wordpress.</p>
<h2 style="text-align: justify;">Código PHP</h2>
<p style="text-align: justify;">Afortunadamente, Wordpress trae funciones incorporadas que nos permiten referenciar de manera muy sencilla la información de un autor en particular y relacionarla al artículo desde donde se está haciendo la llamada. Así, si Dexter escribe un artículo, aparece el cuadro con la información de Dexter, pero si el artículo lo escribe Topher, aparecerá su información, ya que WP sabe diferenciar de acuerdo a la ID de cada artículo y recupera los datos en base a eso.</p>
<p style="text-align: justify;">Así que, listando, la información que debemos rescatar es:</p>
<ul>
<li>Imagen del autor.</li>
<li>Su nombre o pseudónimo.</li>
<li>Un enlace a su sitio Web.</li>
<li>Su bio.</li>
</ul>
<p style="text-align: justify;">Si se fijan, los 3 últimos parámetros están incluidos en el perfil de cada autor en Wordpress, por lo que es sumamente sencillo recuperarlos. Ahora, el primero, correspondiente a la imagen es un poco más complejo, ya que el perfil en si no está asociado a ninguna imagen.</p>
<p style="text-align: justify;">¿La solución?, Wordpress incluye una función que nos permite referenciar el <strong>gravatar</strong> asociado a la cuenta de correo del autor. Así que si el autor tiene un gravatar, este será mostrado en el cuadro.</p>
<p style="text-align: justify;">O sea, en base al listado anterior, llamaremos a las siguientes funciones de Wordpress:</p>
<ul>
<li>get_avatar( ), entregando como parámetro la función the_author_meta y como parámetro a esta última <strong>user_email</strong>.</li>
<li>the_author_link( ), sin parámetros.</li>
<li>the_author_meta( ) , entregando como parámetro <strong>user_url</strong>.</li>
<li>the_author_meta( ), entregando como parámetro <strong>description</strong>.</li>
</ul>
<p style="text-align: justify;">Donde:</p>
<p style="text-align: justify;">La función <strong>get_avatar</strong> nos permite recuperar el gravatar asociado a una cuenta de correo. Por eso pasamos como parámetro el correo electrónico del autor del artículo.</p>
<p style="text-align: justify;">La función <strong>the_author_link</strong> nos entrega el nombre o pseudónimo del autor, enlazado a una enumeración de todos los artículos que ha escrito en el sitio.</p>
<p style="text-align: justify;">La función <strong>the_author_meta</strong> nos entrega información relacionada al autor del artículo, dependiendo del parámetro enviado, por eso al enviar <strong>user_url</strong> nos entrega el sitio Web asociado a la cuenta del autor, y si enviamos <strong>description</strong> nos entrega la bio que está en su perfil.</p>
<p style="text-align: justify;">Así que con eso, el código quedaría de la siguiente forma <em>(incluyendo el HTML anterior)</em>:</p>
<pre class="php" title="code">&lt;div id="cuadro-info"&gt;
   &lt;div id="imagen-autor"&gt;
     &lt;a href="&lt;?php the_author_meta('user_url'); ?&gt;"&gt;
    &lt;?php echo get_avatar( get_the_author_meta('user_email'), '80', '' );
      ?&gt;
     &lt;/a&gt;
   &lt;/div&gt;
   &lt;div id="info-bio-autor"&gt;
       &lt;h4&gt;Escrito por &lt;?php the_author_link(); ?&gt;&lt;/h4&gt;
       &lt;p&gt;&lt;?php the_author_meta('description'); ?&gt;&lt;/p&gt;
   &lt;/div&gt;
&lt;/div&gt;</pre>
<p style="text-align: justify;">Como pueden ver, hicimos uso de las funciones destacadas anteriormente para rescatar el gravatar del autor, su nombre, sitio Web y bio del perfil.</p>
<p style="text-align: justify;">Ahora, si se fijan, hay un parámetro que incluimos en la función <strong>get_avatar</strong> que no indicamos anteriormente, el cual tiene un valor de <strong>80</strong>. Este parámetro corresponde al tamaño de la imagen. Como los avatars son cuadrados, este valor se toma como ancho y alto de la imagen, la cual en este caso será de 80 pixeles.</p>
<p style="text-align: justify;">Con eso ya tenemos nuestro cuadro armado en estructura y con la información del autor mostrándose, pero probablemente si lo vemos en el navegador, se verá desordenado y bastante horrible, ya que no hemos estilizado nada. Eso, precisamente, será nuestro próximo paso:</p>
<h2 style="text-align: justify;">Código CSS</h2>
<p style="text-align: justify;">Mediante CSS vamos a encargarnos de posicionar los elementos dentro de cada bloque y de estilizar para hacerlo más agradable a la vista. El código que entregamos aquí es referencial, de acuerdo a lo que utilizamos para los cuadros de este sitio, así que siéntanse libres de modificar de acuerdo al estilo de su sitio:</p>
<pre class="css" title="code">div#info-autor {
 background: #f7f7fa; padding: 10px;
 margin: 0 0 15px 0;
 -moz-border-radius: 8px;
 -webkit-border-radius: 8px;
 border-radius: 8px;
 overflow: auto;
}
div#info-autor div#imagen-autor {
 float: left;
 margin: 0 10px 5px 0;
 border: 3px solid #626263;
}
div#info-autor div#imagen-autor a img{
 border: none;
}
div#info-autor p{
 text-align: justify;
 font-style: italic;
}
div#info-autor h4{
 font-weight: bold;
 padding-bottom: 5px;
 color: #403f3a;
 letter-spacing: -1px;
 line-height: 1em;
 font-size: 18px;
}</pre>
<p style="text-align: justify;">Algunos detalles a tener en consideración:</p>
<ul>
<li>La propiedad border-radius <em>(-moz-border-radius para Firefox y -webkit-border-radius para navegadores basados en Webkit)</em>, corresponde a CSS3, por lo que navegadores más antiguos o algunos modernos que no soporten CSS3 por completo <em>(IE)</em> no desplegarán correctamente el efecto. ¿Qué efecto se preguntarán?, esquinas redondeadas para los bloques.</li>
<li>Los últimos 2 bloques de código <em>(para párrafos y para encabezados h4)</em> los incluímos para que el estilo fuera distinto al que por defecto tiene la hoja de estilo en otros sectores del sitio. Sin embargo, esto es opcional.</li>
</ul>
<p style="text-align: justify;">Y con esos ajustes de CSS tenemos terminado nuestro cuadro de información de autores. ¿Se preguntan como queda el resultado? Fácil de ver, siguiendo más abajo, luego de la calificación del tutorial pueden verlo completamente implementado.</p>
<p style="text-align: justify;">Nuevamente, los parámetros tanto de estilo como de estructura, son los que utilizamos acá. Si quieren armarlo de forma distinta, o posicionar y estilizar de manera más acorde a su sitio, no tengan miedo en jugar con el código. Esa es la base, pero todo lo que se puede lograr depende de cada uno <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Por ahora, les recordamos que como siempre 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" /></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>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/05/22/como-crear-un-cuadro-de-informacion-de-autores-en-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</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 superponer contenido sobre una animación en Flash</title>
		<link>http://www.comolohago.cl/2010/02/22/como-superponer-contenido-sobre-una-animacion-en-flash/</link>
		<comments>http://www.comolohago.cl/2010/02/22/como-superponer-contenido-sobre-una-animacion-en-flash/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 00:20:28 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Z index]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3092</guid>
		<description><![CDATA[
Gracias al posicionamiento mediante CSS es posible controlar el lugar donde aparecerá cada uno de los elementos de nuestras páginas en la pantalla de los visitantes. Si bien con propiedades como float es posible acomodar con facilidad cada capa en un costado de la pantalla, hay una propiedad muy interesante que nos permite superponer distintos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm3.static.flickr.com/2688/4379695821_369fc36cf1_o.jpg" alt="" width="362" height="250" /></p>
<p style="text-align: justify;">Gracias al posicionamiento mediante CSS es posible controlar el lugar donde aparecerá cada uno de los elementos de nuestras páginas en la pantalla de los visitantes. Si bien con propiedades como <em>float</em> es posible acomodar con facilidad cada capa en un costado de la pantalla, hay una propiedad muy interesante que nos permite superponer distintos contenidos entre sí y de esta forma lograr un complejo efecto visual sobre animaciones, imágenes u otro tipo de contenidos que queramos desplegar.</p>
<p style="text-align: justify;">Es por eso que hoy, en un nuevo tutorial que les trae CLH, estaremos viendo en detalle la propiedad <strong>z-index</strong> de CSS, la cual nos permite lograr lo antes descrito.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3092"></span></p>
<h1 style="text-align: center;">Cómo superponer contenido sobre una animación en Flash</h1>
<p style="text-align: justify;">Si bien lo que veremos hoy es bastante más generalizado que <em>&#8216;Superponer contenido sobre una animación en Flash&#8217;</em>, hemos decidido denominarlo de esa forma ya que es uno de los problemas más comunes que llevan a la profundización de esta propiedad. Sin embargo, lo expuesto hoy puede aplicarse para todo tipo de contenido, incluyendo imágenes, textos o menús de navegación entre otras cosas.</p>
<p style="text-align: justify;">Con eso claro, vamos con lo primero:</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<ol style="text-align: justify;">
<li>Opcionalmente un editor Web. De cualquier forma de no utilizar alguno, se puede realizar el procedimiento mediante bloc de notas.</li>
</ol>
<p style="text-align: justify;">Antes de entrar de lleno al procedimiento, es bueno hacer una aclaración de conceptos. Como mencionábamos en la introducción de este tutorial, estaremos hablando de y trabajando con la propiedad z-index de CSS. Así que para los curiosos <em>(como Topher)</em> y los preguntones <em>(como Dexter)</em>:</p>
<blockquote>
<h2 style="text-align: justify;">¿Qué es z-index?</h2>
<p style="text-align: justify;">La pregunta <span style="text-decoration: line-through;"><em>de la olla millonaria de caldos mag.. sin propaganda mejor</em></span> clave de todo este asunto. Si nos remontamos a épocas antiguas, por alla por los tiempos estudiantiles de cada uno y hacemos un pequeño repaso por matemáticas, o más especificamente geometría análitica, es posible recordar aquellos <span style="text-decoration: line-through;"><em>temibles</em></span> contenidos sobre el plano cartesiano, rectas, pendientes y demases.</p>
<p style="text-align: justify;">Si hacemos más memoria aún, recordaremos que un factor común de esos contenidos era cuando nos hablaban sobre los <strong>puntos en el espacio y los ejes a los que pertenecían</strong>. Esos ejes, al menos en ese momento, eran principalmente 2: <strong>el eje x</strong>, el cual representaba la horizontalidad<strong> y el eje y</strong>, el cual representaba la verticalidad. Para los que le hayan hecho la cruz a la geometría posterior a eso.. <em>(la cruz.. intersección de 2 puntos.. humor matemático y juego de palabras, que lindo ¿no?)</em> y se hayan perdido el resto de la historia, existe además un tercer eje, el cual es conocido como <strong>eje z</strong> y representa la profundidad en el espacio. Esto se relaciona directamente a las 3 dimensiones en las que vivimos y vemos los seres humanos: horizontal <em>(x)</em>, vertical <em>(y)</em>, profundidad <em>(z)</em>. Esta es la parte donde todos decimos <em>&#8220;Oooohhhh&#8221;</em> al ver como todo está conectado entre sí.</p>
<p style="text-align: justify;">Computacionalmente el asunto no es muy diferente. La pantalla en donde vemos todo tipo de contenidos, desde recursos multimedia, archivos, aplicaciones, juegos, etc. opera con la lógica del plano, teniendo un eje horizontal y uno vertical, los cuales son representados por las resoluciones de pantalla <em>(por ej. al hablar de una resolución de 1024&#215;768 pixeles, estamos diciendo que en la pantalla vemos 1024 pixeles horizontalmente y 768 de forma vertical)</em>. A su vez acá también tenemos un plano z de profundidad, el cual si bien a simple vista no notamos, si existe. La mejor prueba para notarlo es ver que al momento de abrir una aplicación, el escritorio no desaparece, solo queda parcial o totalmente oculto por el nuevo contenido que se superpuso.</p>
<p style="text-align: justify;">En diseño Web, o más especificamente en CSS, podemos manejar el tema de las profundidades de los contenidos que estamos desplegando. Esto lo hacemos mediante la propiedad <strong>z-index</strong>, la cual se encarga de asignar una posición de profundidad a cada contenido de acuerdo al valor que le demos. A mayor valor asignado a esta propiedad para un contenido, se irá superponiendo a cada contenido restante que tenga un valor menor. Al final, todos los contenidos irán formando una pila, de menor a mayor.</p>
<p style="text-align: justify;">Para que un elemento pueda hacer uso de la propiedad z-index, <strong>debe siempre</strong> estar posicionado, ya sea absoluta o relativamente. Si el elemento no está posicionado, no podrá usarse la propiedad. Adicionalmente, si 2 elementos comparten el mismo z-index se posicionarán de acuerdo al orden que le hayamos dado en el documento HTML.</p>
</blockquote>
<p style="text-align: justify;">Con esa <span style="text-decoration: line-through;"><em>larga</em></span> explicación lista, podemos empezar a trabajar en nuestro proyecto de hoy y ver como resulta todo:</p>
<h2 style="text-align: justify;">Procedimiento:</h2>
<p style="text-align: justify;">Lo que haremos hoy será bastante simple. Crearemos un documento HTML en donde añadiremos un pequeño encabezado, el cual estará compuesto de una animación flash <em>(en el fondo)</em> y una barra en imagen <em>(superpuesta a la animación)</em> para luego insertar un menú de navegación. Junto a eso añadiremos un pequeño botón como detalle. Este botón podrá ser manipulado tal como si fuese una imagen normal, es decir, añadiéndole un enlace total o por mapa, viendo sus propiedades, copiando la ruta, etc. Lo mismo corre para el menú de navegación.</p>
<p style="text-align: justify;">Entonces basicamente contaremos con 3 capas: una para la animación, otra para nuestra barra y menú de navegación y finalmente una que irá sobre todas las anteriores con el botón.</p>
<p style="text-align: justify;">1.- Utilizaremos los siguientes elementos:</p>
<p style="text-align: justify;">Una animación de fondo:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4060/4380593934_182e25b2cb_o.png" alt="" width="593" height="133" /></p>
<p style="text-align: justify;">Un botón <em>(para hacer botones, los invitamos a revisar <a href="http://www.comolohago.cl/2008/09/29/como-hacer-botones-estilo-20-para-tu-web/" target="_blank">este tutorial</a> donde hemos cubierto el proceso por completo)</em>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4063/4379909439_a90b201efb_o.png" alt="" width="200" height="38" /></p>
<p style="text-align: justify;">Y adicionalmente hemos creado una barra de color blanco <em>(la cual por razones obvias no pondremos acá)</em> de 1&#215;60 px, la cual montaremos sobre la animación y modificaremos vía CSS.</p>
<p style="text-align: justify;">Para no extender en demasía este tutorial, el menú de navegación lo incluiremos como texto plano, con el fin de ubicar donde iría el código final y como se posiciona en términos de profundidad con respecto a los otros elementos. Empezar a hacer el menú desde cero acá probablemente nos llevaría un buen rato y lo hemos visto en otros tutoriales, así que lo haremos de esta forma.</p>
<p style="text-align: justify;">2.- Con nuestros elementos listos, prepararemos nuestro CSS, el cual definirá las propiedades a aplicar a cada parte del contenido:</p>
<pre class="css" title="code">body{
margin: 0;
}

#uno{
position: absolute;
z-index: 1;
width:100%;
}

#dos{
position: absolute;
z-index: 2;
background-image: url(barra.png);
background-repeat: repeat;
width: 100%;
height: 60px;
opacity: .50;
-moz-opacity: .50;
filter: alpha(opacity=50);
margin-top: 10px;
font-weight: bold;
text-indent:20px;
}

#tres{
position:absolute;
z-index: 3;
margin-left:450px;
}</pre>
<p style="text-align: justify;">Entonces ordenemos el cuento:</p>
<ul>
<li>Cada id declarado <em>(uno, dos y tres)</em> corresponden a uno de los elementos que agregaremos <em>(animación en el uno, barra y menú de navegación en el dos y botón en el tres)</em>. Los tres han sido posicionados de forma absoluta y se les ha asignado un z-index correlativo con el fin de que la animación salga al fondo, sobre ella la barra y el menú de navegación y sobre todos ellos el botón.</li>
<li>A su vez, la barra se ha agregado como fondo en el id dos, con el fin de escribir el texto sobre esta imagen de fondo y así poder aprovechar una imagen pequeña <em>(1&#215;60 px)</em> y repetirla a lo largo del encabezado.</li>
<li>Adicionalmente hemos utilizado las propiedades <strong>opacity, -moz-opacity y filter</strong> para agregar transparencia a la barra y que no se vea solida en blanco, si no que nos permita ver el resto de la animación que está en el fondo.</li>
<li>Todo lo demás lo hemos acomodado mediante márgenes e indentaciones de texto para acomodar de acuerdo al diseño que teníamos en mente.</li>
</ul>
<p style="text-align: justify;">Ahora ojo, hemos hecho todos los posicionamientos con medidas fijas en pixeles, para efectos de demostración. Al momento de hacer diseños definitivos es bueno adaptarse a como se ha diseñado el sitio completo, especialmente si son diseños líquidos cuyas medidas están en porcentajes.</p>
<p style="text-align: justify;">3.- Con el CSS listo, ahora crearemos un archivo HTML, en donde insertaremos div&#8217;s con el respectivo contenido, los cuales tomarán propiedades del CSS y se posicionarán como lo teníamos pensado originalmente. Entonces:</p>
<pre class="html" title="code">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Ejemplo de superposicion&lt;/title&gt;
&lt;link href="estilo.css" rel="stylesheet" type="text/css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="uno"&gt;
&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=7,0,19,0" width="700" height="157"&gt;
&lt;param name="movie" value="fondo.swf" /&gt;
&lt;param name="quality" value="high" /&gt;
&lt;param name="wmode" value="transparent" /&gt;
&lt;embed wmode="transparent" src="fondo.swf" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="700" height="157"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/div&gt;
&lt;div id="dos"&gt;&lt;h2&gt;Inicio | Quienes Somos | Contacto&lt;/h2&gt;&lt;/div&gt;
&lt;div id="tres"&gt;&lt;img src="boton.png" /&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">Guardamos todo y vemos en nuestro navegador favorito para observar el resultado final:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4051/4379909629_61008e7633_o.png" alt="" width="601" height="138" /></p>
<p style="text-align: justify;">Como podemos ver en la imagen anterior, tenemos nuestra animación hecha en Flash en el fondo. Sobre ella se ha agregado la barra que creamos <em>(repetida y con la opacidad alterada vía CSS)</em>. Sobre la barra nuestro menú de navegación y sobre todo ello el botón. Se ha ordenado tal como los valores que hemos dado a cada z-index.</p>
<p style="text-align: justify;">Simple ¿no?. Así que en resumen:</p>
<h2 style="text-align: justify;">¿Qué hemos aprendido hoy?</h2>
<ul style="text-align: justify;">
<li>Mediante z-index podemos manejar la profundidad de varios elementos, aún cuando compartan el mismo espacio físico.</li>
<li>Para utilizar z-index, debemos posicionar los elementos de forma relativa o absoluta.</li>
<li>2 elementos pueden compartir el mismo z-index y serán mostrados de acuerdo al orden que se agregan.</li>
<li>Podemos superponer todo tipo de contenidos, así que a animarse y probar.</li>
<li>La geometría analítica está relacionada a como vemos y vivimos los humanos, y todo eso a como se grabó Avatar.</li>
</ul>
<p style="text-align: justify;">Y con eso damos todo por terminado hoy, recordándoles que como siempre, 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 tengan, no sean tímidos, los invitamos a dejarnos unas líneas a continuación. Somos buena onda para responder, lo prometemos <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </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/02/22/como-superponer-contenido-sobre-una-animacion-en-flash/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cómo convertirse en un campeón de HTML &#8211; Parte 1</title>
		<link>http://www.comolohago.cl/2010/02/11/como-convertirse-en-un-campeon-de-html-parte-1/</link>
		<comments>http://www.comolohago.cl/2010/02/11/como-convertirse-en-un-campeon-de-html-parte-1/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 22:04:43 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Diseño Web]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3033</guid>
		<description><![CDATA[
Volviendo a la vida después de unas extremadamente cortas vacaciones, al llegar a los cuarteles generales de CLH tuve la oportunidad de revisar nuestro siempre lleno buzón de peticiones.  A medida que pasaba por los distintos correos, cartas, botellas de bebida vacías y postales que han echado ahí, nos fue posible ver un denominador común [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4063/4349489288_0b8531aeb8_o.jpg" alt="" width="400" height="300" /></p>
<p style="text-align: justify;">Volviendo a la vida después de unas <span style="text-decoration: line-through;"><em>extremadamente</em></span> cortas vacaciones, al llegar a los cuarteles generales de CLH tuve la oportunidad de revisar nuestro siempre lleno buzón de peticiones.  A medida que pasaba por los distintos correos, cartas,<span style="text-decoration: line-through;"><em> botellas de bebida vacías</em></span> y postales que han echado ahí, nos fue posible ver un denominador común en el cual mucha gente nos preguntaba sobre el proceso de creación de sitios Web desde cero.</p>
<p style="text-align: justify;">Si bien hemos cubierto distintos aspectos para diseñar sitios Web <em>(como tutoriales de CSS, buenas prácticas y tips o funcionalidades específicas)</em>, a la fecha nunca nos habíamos sentado a redactar una guía sobre la base de todo: HTML. Pues bien, hoy daremos comienzo al que esperamos que sea un largo camino de tutoriales en los cuales veremos desde los conceptos más básicos de este lenguaje, pasando por todo lo necesario para poder codificar como un campeón.</p>
<p style="text-align: justify;">El detalle, como siempre <em>(o &#8216;as usual&#8217; para nuestros amigos ángloparlantes)</em>, después del salto.</p>
<p style="text-align: justify;"><span id="more-3033"></span></p>
<h1 style="text-align: center;">Cómo convertirse en un campeón de HTML &#8211; Parte 1</h1>
<p style="text-align: justify;">Al igual que en otras sagas que hemos hecho en el pasado como <a href="http://www.comolohago.cl/2008/09/10/como-aprender-a-programar-y-no-morir-en-el-intento-parte-1/" target="_blank"><em>&#8220;Cómo aprender a programar y no morir en el intento&#8221;</em></a> <em>(la cual ya tendrá una parte 11, lo prometemos, paciencia) </em>o <a href="http://www.comolohago.cl/2009/02/01/como-dominar-css-sin-salir-del-escritorio-parte-1/" target="_blank"><em>&#8220;Cómo dominar CSS sin salir del escritorio&#8221;</em></a> , este primer capítulo contendrá más teoría que práctica, algo que se irá revirtiendo a medida que vayamos avanzando. Sin embargo, intentaremos hacer algo distinto, que es fijar un ejercicio a modo de ejemplo al final de cada tutorial para que vayamos practicando desde el comienzo.</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<ol>
<li>Un editor Web o en su defecto bloc de notas <em>(ya entraremos en detalle en esto)</em>.</li>
<li>Un navegador Web <em>(idealmente más de uno, ya veremos porque).</em></li>
</ol>
<h2 style="text-align: justify;">Contenidos:</h2>
<ol style="text-align: justify;">
<li>¿Qué es HTML?</li>
<li>Tipos, versiones y sabores.</li>
<li>Estructura vs Estilo.</li>
<li>Estructura básica de un documento HTML.</li>
<li>Editores Web.</li>
<li>Ejercicio: Primera página en HTML.</li>
</ol>
<p style="text-align: justify;">Tenemos bastantes contenidos por delante, así que sin más que añadir, manos a la obra:</p>
<h2 style="text-align: justify;">1.- ¿Qué es HTML?</h2>
<p style="text-align: justify;">Ahh.. nuestro viejo, querido <em>(y hace poco actualizado)</em> HTML. Si tuvieramos que definir una base estructural para todo lo que hoy vemos en sitios Web sería este lenguaje, y ya podremos ir viendo porque.</p>
<p style="text-align: justify;">HTML <em>(Hyper Text Markup Language &#8211; Lenguaje de marcas de hipertexto)</em> es un lenguaje utilizado para la creación de documentos Web o páginas. Creado originalmente en la década de los 80 en el CERN <em>(aunque sus primeras versiones vieron la luz recién en los 90)</em>, se define como un lenguaje de marcas que busca definir una estructura en los documentos Web que publicamos. Esto se hace mediante la definición de secciones dentro del documento <em>(por eso define estructura)</em>, tales como encabezados, títulos, cuerpos, párrafos, etc. Adicionalmente cuenta con una serie de elementos para el ordenamiento correcto de la información como listas y bloques, así como permitir la inserción de elementos multimedia como imágenes, sonidos, animaciones, e incluso herramientas para interactuar con los usuarios como formularios.</p>
<p style="text-align: justify;">Uno de los objetivos principales con la definición de este lenguaje, ha sido no solo entregar herramientas para la confección de un documento en particular, sino que también funcionalidades que nos permita enlanzar este documento a otros mediante enlaces, hipervínculos o <strong>hipertextos</strong>.</p>
<p style="text-align: justify;">Desde su primera versión <em>(1.0)</em> hasta la más actual <em>(HTML 5)</em>, se han ido incluyendo funcionalidades que permiten a este lenguaje interactuar con cada nueva tecnología Web que ha ido apareciendo a través de los años: desde inserción de hojas de estilo hasta incrustación de lenguajes de programación Web como PHP.</p>
<p style="text-align: justify;">Si bien HTML es un lenguaje de estructura y no de programación propiamente tal, cuenta con varios elementos similares que pueden ser reconocidos y facilitan el aprendizaje para quienes conozcan otros lenguajes, como la semántica y la estructura de sus partes, lo que podrá ser apreciado a medida que se van desarrollando nuevos documentos.</p>
<p style="text-align: justify;">La base de HTML radica en el uso de etiquetas para definir el inicio y término de una sección de un documento Web en particular. Estas etiquetas encierran el contenido que desplegaremos a través del navegador y cada una de ellas posee atributos y características que hacen que la información se muestre de cierta manera. A medida que vayamos desarrollando ejemplos podremos ver esto de forma más clara.</p>
<p style="text-align: justify;">Antes de continuar, es bueno aclarar algunas preguntas frecuentes:</p>
<blockquote>
<p style="text-align: justify;"><strong>1.- ¿Qué formato tienen los documentos HTML?</strong></p>
<p style="text-align: justify;">Principalmente 2, aunque es 1 realmente ya que se trata del mismo. Los documentos HTML <em>(que solo contengan este lenguaje y no otros incrustados)</em> son de formato <strong>htm</strong> o <strong>html</strong>, el cual básicamente es el mismo y es reconocido de igual manera por los navegadores. La diferencia radica simplemente en que algunos sistemas operativos y sistemas de archivos más antiguos <em>(como DOS y FAT respectivamente)</em> no permitían extensiones de archivos de más de 3 letras.</p>
<p style="text-align: justify;"><strong>2.- ¿Es necesario algún conocimiento previo antes de aprender HTML?</strong></p>
<p style="text-align: justify;">No. Si bien siempre ayuda tener conocimientos o nociones de otros lenguajes o del funcionamiento propiamente tal de la Web, no es un requerimiento, ya que es posible aprender y dominar HTML sin haber estudiado nada relacionado anteriormente. En mi caso personal, cuando empecé a diseñar sitios Web hace más de 10 años, HTML fue lo primero que aprendí sin tener ningún otro conocimiento al respecto <em>(con suerte lo que era una URL)</em>, por lo que puedo dar fé de que es posible.</p>
<p style="text-align: justify;"><strong>3.- ¿Cuál es el nivel de dificultad del lenguaje?</strong></p>
<p style="text-align: justify;">Relativamente bajo. Un alto porcentaje de las etiquetas que contiene el lenguaje son prácticamente autoexplicativas, y para las que no, con un poco de práctica y <em>prueba/error</em> basta para dominarlas. Dedicándole un poco de tiempo diario <em>(nunca más de 1 hora)</em>, se puede tener un buen entendimiento y dominio del lenguaje en menos de 1 semana.</p>
<p style="text-align: justify;"><strong>4.- Tengo mala memoria, ¿debo aprenderme  todas las etiquetas?</strong></p>
<p style="text-align: justify;">En lo absoluto. HTML cuenta con un gran número de etiquetas, cada una con funcionalidades y atributos distintos, por lo que recordar exactamente cada una es una perdida de espacio en la cabeza. Sin embargo, si bien no es necesario recordarlas al pie de la letra, es esencial saber que hace cada una para tener un entendimiento completo de la estructura de un documento en particular. A medida que vamos tomando más experiencia, nos vamos apoyando en herramientas como editores Web, los cuales mediante interfaces gráficos nos ayudan a codificar de manera más rápida y óptima, dejando la codificación <em>&#8220;a mano&#8221;</em> para casos más específicos y corrección de errores.</p>
<p style="text-align: justify;"><strong>5.- ¿Qué necesito para visualizar un documento HTML?</strong></p>
<p style="text-align: justify;">Un navegador Web. Los navegadores actuales están preparados para interpretar todas las etiquetas correspondientes a HTML, a excepción de versiones más antiguas que puedan no reconocer alguna funcionalidad de las versiones más recientes del lenguaje.</p>
</blockquote>
<p style="text-align: justify;">Hay mucho más que podríamos decir sobre HTML y su historia, pero no es la idea alargarnos en este tema cuando hay tanto aún por delante. A medida que vayamos avanzando iremos viendo uno que otro concepto interesante que pueda servirnos.</p>
<h2 style="text-align: justify;">2.- Tipos, versiones y sabores</h2>
<p style="text-align: justify;">Si bien no hay en chocolate, vainilla ni Dr. Pepper, HTML cuenta con varias versiones, tipos y hasta una derivación que ya veremos.</p>
<p style="text-align: justify;">Tal como hemos comentado, la primera versión de HTML, la 1.0, vió la luz por allá por los inicios de los 90. A la fecha se han lanzado 4 versiones adicionales, siendo la 5 la más reciente, cada una de las cuales ha añadido nuevos elementos y quitado o depreciado algunos de versiones anteriores. Las adiciones más notables y/o renombradas tienen que ver con la integración de nuevas tecnologías Web que han ido apareciendo desde entonces y las eliminaciones con respecto a un punto que veremos más adelante, que refiere a la definición más estricta de HTML como un lenguaje de estructura de documentos Web y no tanto de estilo.</p>
<p style="text-align: justify;">Si bien ya vamos en la versión 5 de HTML, la más utilizada a la fecha sigue siendo la 4.01, ya que la primera fue lanzada hace poco tiempo y aún está en etapa de adaptación e integración por parte de los diseñadores y desarrolladores. Hoy es posible ver sitios en HTML 5, pero corresponden a la minoría, principalmente por lo indicado anteriormente y porque aún gente que posee navegadores más antiguos, los cuales no están preparados para interpretar algunas funcionalidades de la nueva versión.</p>
<p style="text-align: justify;">Adicionalmente, existe una derivación del lenguaje, conocido como XHTML, el cual corresponde a una mezcla entre XML y HTML, con lo cual se aplica una variación y se define un lenguaje mucho más estricto con respecto a ciertas reglas, como por ejemplo el cierre correcto de cada sección y el no omitir etiquetas, algo que en HTML a veces es permitido. En próximas ediciones entraremos más en detalle en este tema, ya que por ahora no es necesario y alargaríamos aún más esta primera etapa.</p>
<h2 style="text-align: justify;">3.- Estructura vs Estilo</h2>
<p style="text-align: justify;">Si bien es algo temprano para discutir esto, en lo personal lo considero un concepto tremendamente importante a aprender antes de entrar de lleno al lenguaje en sí. Siempre, cuando estamos aprendiendo a dominar una nueva tecnología, es de suma importancia entender cuales son los alcances reales y correctos de esta, especialmente porque es tremendamente común encontrar una serie de malas prácticas definidas que pueden llevarnos a errores más adelante.</p>
<p style="text-align: justify;">Cuando HTML fue definido en un comienzo, siempre se pensó como un lenguaje de estructura para documentos Web, tal como lo hemos indicado anteriormente. Sin embargo, a medida que fue pasando el tiempo y los requerimientos comenzaron a evolucionar, se fue haciendo necesario contar con funcionalidades que permitieran estilizar las página para entregarle al usuario una experiencia más agradable. Con esto, se empezó a hacer común el uso de etiquetas como <strong>font face</strong> para definir el tipo de letra a utilizar en un texto, <strong>font color</strong> para definir su color o <strong>b, i, u</strong> para el formato del texto <em>(negrita, cursiva y subrayado respectivamente)</em>.</p>
<p style="text-align: justify;">A medida que estas etiquetas comenzaban a utilizarse más y más, se comenzó a apreciar que HTML dejaba de ser un lenguaje netamente de estructura y de a poco se convertía en un híbrido que mezclaba tanto la estructura como el estilo del documento, un propósito muy distinto para el que inicialmente se había ideado. Debido a esto es que lenguajes de estilo como CSS comienzan a potenciarse y las etiquetas antes mencionadas a depreciarse y dejar de ser soportadas por nuevos navegadores, devolviendo HTML a su propósito inicial, solamente preocuparse de la estructura y dejar que el estilo lo maneje un lenguaje específico definido para esto.</p>
<p style="text-align: justify;">Resumiendo un poco lo anterior, es de suma importancia entender el concepto de lo que es HTML, un lenguaje creado para definir la estructura de documento Web y no su estilo. Es por esto que no debemos esperar o apuntar a utilizar etiquetas que nos ayuden a configurar formatos de visualización o estilos gráficos. Para eso existen otras herramientas y debemos tener claro cual es el alcance y el correcto uso de cada una de ellas.</p>
<h2 style="text-align: justify;">4.- Estructura básica de un documento HTML</h2>
<p style="text-align: justify;">Un documento HTML tiene una estructura básica definida por etiquetas <em>(encerradas entre los símbolos &lt; y &gt; para la apertura de una sección y &lt;/ y &gt; para el cierre de la misma)</em>, cada una de las cuales demarca una sección del mismo:</p>
<ul style="text-align: justify;">
<li>Inicio del documento.</li>
<li>Cabecera.</li>
<li>Cuerpo del documento.</li>
<li>Cierre del documento.</li>
</ul>
<p style="text-align: justify;">Viendo en detalle:</p>
<p style="text-align: justify;"><strong>a) Inicio del documento:</strong> Corresponde a la apertura oficial, donde le indicamos al navegador que se trata de un documento Web en formato HTML, por lo que debe proceder a interpretar las etiquetas para mostrar el contenido en pantalla. Este inicio se marca con la etiqueta &lt;html&gt;.</p>
<p style="text-align: justify;"><strong>b) Cabecera del documento:</strong> Indica toda la información relativa al documento, como su título y opcionalmente librerías externas y/o hojas de estilo que deseemos cargar de forma externa. La cabecera propiamente tal se encierra en las etiquetas &lt;head&gt; y &lt;/head&gt;, llevando dentro de ellas como mínimo la correspondiente al título, la cual va entre &lt;title&gt; y &lt;/title&gt;.</p>
<p style="text-align: justify;"><strong>c) Cuerpo del documento:</strong> Es la sección principal del documento, en donde incluiremos todo el contenido que se desplegará en pantalla. Corresponde a las etiquetas &lt;body&gt; y &lt;/body&gt;.</p>
<p style="text-align: justify;"><strong>d) Cierre del documento:</strong> Tal como lo abrimos, debemos cerrarlo mediante la etiqueta &lt;/html&gt;.</p>
<p style="text-align: justify;">O sea, un documento básico existe de la siguiente manera:</p>
<pre class="html" title="code">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Titulo del documento&lt;/title&gt;
&lt;body&gt;
Contenido del documento
&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">Cada documento que creemos es importante guardarlo siempre en su nombre con <strong>minúsculas</strong>, ya que los navegadores son sensitivos a las mayúsculas y por eso, al momento de enlazar <em>(algo que veremos más adelante)</em> no reconoceran <strong>http://www.misitio.com/ejemplo.html</strong> si el archivo se llama <strong>Ejemplo.html</strong>, así que mucho ojo con eso.</p>
<h2 style="text-align: justify;">5.- Editores Web</h2>
<p style="text-align: justify;">La gran manzana de la discordia, especialmente entre desarrolladores Web. Años atrás, cuando Netscape e Internet Explorer luchaban por el dominio entre los usuarios, Frontpage era el niño <em>cool</em> del barrio y comparábamos los modems de 33.6k y 54k, la mayoría de los editores Web que hoy conocemos no existían, y los que si estaban disponibles <em>(como el <span style="text-decoration: line-through;">maldito</span> bendito Frontpage)</em> eran bastante rudimentarios de utilizar, con una curva alta de aprendizaje y sin un beneficio real para quienes diseñaban o desarrollaban sitios Web. Es por esto que muchos <em>(incluyéndome)</em> hacían uso del buen y querido bloc de notas para codificar, ya que este permitía hacerlo de forma rápida, guardando en el formato necesario y sin utilizar muchos recursos <em>(algunos luego empezaron a utilizar Word, pero ese ya es otro tema)</em>.</p>
<p style="text-align: justify;">A medida que pasaron los años, grandes aplicaciones de edición Web comenzaron a aparecer, como es el caso de Dreamweaver, KompoZer, Nvu y Coda por nombrar algunos, los cuales comenzaron a integrar interfaces gráficos realmente amigables y simples de usar, lo que terminó por entregarle la posibilidad a los diseñadores de crear documentos Web de manera rápida y sencilla solo presionando algunos botones.</p>
<p style="text-align: justify;">Hoy la oferta es amplia, hay para todo gusto y es algo realmente recomendable de usar, a pesar de que muchos desarrolladores acostumbrados a la época de antaño lo reprueben. Por eso nos tomamos el tiempo de entregar el consejo de buscar un buen editor Web que nos asista en la tarea y tomar provecho de todas las ventajas que nos ofrecen. Sin duda que hacen la tarea más fácil y nos permiten quemar pestañas en interfaces algo más agradables que simples editores de texto.</p>
<p style="text-align: justify;">Si la posibilidad está a su alcance, hagan uso de esas herramientas. Asistan su proceso de creación y háganlo lo más sencillo posible, para que se preocupen de lo que realmente importa, que es la confección de buenos sitios y la generación de un aún mejor contenido.</p>
<p style="text-align: justify;">Sobre cual elegir en particular, va en cada uno, lo que más nos acomode y esté a nuestro alcance. En lo personal me agrada tanto Dreamweaver para Windows como Coda para Mac. Lamentablemente ámbos tienen un costo bastante elevado, por lo que a veces es mejor optar por alternativas más económicas o de código abierto como Nvu o KompoZer. Lo más importante es encontrar el que mejor sirva para nuestros propósitos.</p>
<h2 style="text-align: justify;">6.- Ejercicio: Primera página en HTML</h2>
<p style="text-align: justify;">Y llegamos a la sección con la que esperamos cerrar cada uno de los capítulos. Un pequeño ejercicio que nos sirva para aplicar todo lo que hemos aprendido en esta edición. Hoy veremos la creación de una sencilla primera página en HTML, para poder desplegarla en un navegador y empezar a experimentar a futuro con técnicas más avanzadas.</p>
<p style="text-align: justify;">Para eso, abrimos nuestro editor Web favorito <em>(o un editor de texto como bloc de notas)</em> y escribimos el siguiente código, el cual como siempre, va con los comentarios respectivos:</p>
<pre class="html" title="code">// Abrimos el documento
&lt;html&gt;
// Declaramos la cabecera
&lt;head&gt;
// Agregamos el título
&lt;title&gt;Mi primer documento Web&lt;/title&gt;
// Cerramos la cabecera
&lt;/head&gt;
// Declaramos el cuerpo
&lt;body&gt;
// Llenamos con un párrafo
&lt;p&gt;Un texto de ejemplo&lt;/p&gt;
// Cerramos el cuerpo
&lt;/body&gt;
// Cerramos el documento
&lt;/html&gt;</pre>
<p style="text-align: justify;">Como pueden ver, utilizamos una nueva etiqueta que no habíamos visto: <strong>&lt;p&gt;&lt;/p&gt;</strong>. Esta etiqueta sirve para encerrar un párrafo de texto normal, lo que veremos en detalle en una próxima edición.</p>
<p style="text-align: justify;">Por ahora con eso basta. Guardamos el documento con extensión <strong>.html</strong> y lo abrimos en un navegador para ver el resultado.</p>
<p style="text-align: justify;">Y luego de ver toda esta introducción, algo de conceptos y un pequeño ejercicio, damos por terminada la primera edición de esta saga, la cual esperamos sea de utilidad para todos Uds. y que podamos hacer una gran cantidad de números en el futuro, para que podamos ver todo el detalle de este grandioso lenguaje llamado HTML.</p>
<p style="text-align: justify;">Por ahora lo dejaremos hasta aquí, recordándoles que siempre es bueno comer chicle para la memoria y no masticar pasas, ya que hace muy mal&#8230; o bueno, algo así.</p>
<p style="text-align: justify;">Como siempre, 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, comentario o si hay algún tema en especial que quieran ver a futuro, 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/02/11/como-convertirse-en-un-campeon-de-html-parte-1/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Cómo implementar donaciones vía PayPal</title>
		<link>http://www.comolohago.cl/2010/01/26/como-implementar-donaciones-via-paypal/</link>
		<comments>http://www.comolohago.cl/2010/01/26/como-implementar-donaciones-via-paypal/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 04:42:51 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[donaciones]]></category>
		<category><![CDATA[PayPal]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2966</guid>
		<description><![CDATA[om]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4017/4304233418_85095ee3ec_o.png" alt="" width="259" height="74" /></p>
<p style="text-align: justify;">Hace algún tiempo nos llegó una petición sobre como incorporar un sistema simple de donaciones vía PayPal en un sitio Web cualquiera. Luego de investigar un poco al respecto, porque en verdad no sabíamos nada sobre el proceso propiamente tal, nos dimos cuenta que es bastante simple y rápido de hacer, ya que el propio PayPal se encarga de la mayor parte del proceso, dejando que nos preocupemos de lo más importante: personalizar y recibir el dinero que los usuarios nos quieran donar.</p>
<p style="text-align: justify;">Hoy, en CLH, veremos como implementar este simple sistema de donaciones en nuestros sitios Web. Y lo veremos en detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2966"></span></p>
<h1 style="text-align: center;">Cómo implementar donaciones vía PayPal</h1>
<p style="text-align: justify;">Como siempre, lo primero:</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<ol style="text-align: justify;">
<li>Una cuenta de PayPal.</li>
<li>Un sitio Web <em>(e idealmente usuarios dispuestos a hacer donaciones </em> <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  )</li>
</ol>
<p style="text-align: justify;">Sin más que detallar, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">Procedimiento:</h2>
<p>1.- Lo primero que debemos hacer es ir al <a href="http://www.paypal.com" target="_blank">sitio de PayPal</a>, en donde deberemos ingresar si ya tenemos una cuenta, o de lo contrario registrarnos.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4044/4305022685_84e807303e_o.png" alt="" width="600" height="543" /></p>
<p>2.- Una vez que hayamos ingresado a nuestra cuenta, debemos ir a la pestaña <strong>Vender en su Web</strong>:</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4022/4305031385_0255e7d8c6_o.png" alt="" width="600" height="56" /></p>
<p>3.- En aquella sección, podremos ver en la parte inferior un cuadro de <strong>Funciones clave</strong>. Ahí debemos seleccionar <strong>Botones comprar ahora</strong>:</p>
<p><img class="aligncenter" src="http://farm3.static.flickr.com/2696/4305776702_e6bfec3d42_o.png" alt="" width="600" height="526" /></p>
<p>4.- Esto nos llevará a un formulario proporcionado por PayPal, el cual nos dejará configurar una serie de parámetros para crear un botón de <em>&#8220;Comprar ahora&#8221;</em>, a través del cual los usuarios podrán hacer una compra de un determinado producto <em>(en nuestro caso donaciones)</em>, solo haciendo click en el:</p>
<p><img class="aligncenter" src="http://farm3.static.flickr.com/2753/4305800106_dc45c20d25_o.png" alt="" width="600" height="654" /></p>
<p style="text-align: justify;">Acá debemos hacer los siguientes ajustes:</p>
<p style="text-align: justify;">5.- En la sección <strong>Aceptar pagos por</strong>, debemos cambiar la opción <strong>Productos</strong> por <strong>Donativos. </strong>Esto cambiará las opciones que viene más adelante en el formulario.</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4051/4305076695_c3ca1b7f39_o.png" alt="" width="286" height="80" /></p>
<p style="text-align: justify;">6.- En <strong>Nombre de organización o servicio</strong> ponemos nuestro nombre o el del sitio Web donde recibiremos las donaciones y en <strong>Id. del donativo</strong> podemos fijar un código especial para identificar esas donaciones <em>(por ejemplo si estamos recibiendo dinero en PayPal desde ese sitio por otro concepto, es bueno diferenciar)</em>. Este último es opcional.</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2704/4305820698_cbfd220c2d_o.png" alt="" width="495" height="63" /></p>
<p style="text-align: justify;">7.- Luego, en la sección <strong>Personalizar botón</strong>, podemos definir las características gráficas del botón que se mostrará en nuestro sitio, ya sea el que nos proporciona PayPal, o uno que podemos definir nosotros mismos a partir de una imagen. Hay una serie de opciones que podemos acomodar a nuestro gusto, por lo que recomendamos probar hasta encontrar la configuración ideal:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm5.static.flickr.com/4035/4305077151_8d00e42d79_o.png" alt="" width="597" height="303" /><br />
<em>Al parecer ahora en Chile hablamos inglés.. Get it? -&gt; !</em></p>
<p style="text-align: justify;">8.- Finalmente definiremos la divisa <em>(o moneda)</em> en que recibiremos los aportes, así como si dejaremos a los usuarios definir cuanto donaran o si es una cantidad por defecto y como recibiremos las notificaciones de pago:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4006/4305821026_21c9c1ef68_o.png" alt="" width="430" height="228" /></p>
<p style="text-align: justify;">9.- Una vez que definimos todos los parámetros, debemos presionar el botón que dice <strong>Crear botón</strong> y nos llevará a una página en donde se nos entregará el código correspondiente al botón creado:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2727/4305095897_ebfbfc3a40_o.png" alt="" width="600" height="295" /></p>
<pre class="html" title="code">&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;
&lt;input type="hidden" name="cmd" value="_s-xclick"&gt;
&lt;input type="hidden" name="encrypted" value="-----BEG
IN PKCS7-----MIIHJwYJKoZIhvc"&gt;
&lt;input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif" border="0"
name="submit" alt="PayPal - The safer, easier way to pay online!"&gt;
&lt;img alt="" border="0" src="https://www.paypal.com/es_XC/i/scr/pixel.gif" width="1" height="1"&gt;
&lt;/form&gt;</pre>
<p style="text-align: justify;">Este código debemos insertarlo en cualquier parte de nuestro sitio Web. De esta forma, cuando un usuario haga click en él, lo llevará a un interfaz de PayPal en donde se le preguntará cuanto desea donar y podrá hacerlo de forma rápida y sencilla.</p>
<p style="text-align: justify;">Con lo que hemos visto ahora basta y sobra para hacer un sistema sencillo de donaciones para nuestro sitio Web. Sin embargo, antes de cerrar, veremos un pequeño truco que puede ser muy útil para darle un estilo especial a las donaciones.</p>
<p style="text-align: justify;">Como es posible ver, el código que nos entrega PayPal no es más que un formulario con valores en campos ocultos y una imagen utilizada como botón. Los valores enviados como ocultos permiten definir a quien pertenece el botón de donación y ejecuta el script de PayPal para procesar los pagos. Lo bueno de esto, es que es posible enviar otros valores de forma oculta. Uno de los valores que se puede enviar, es <strong>return</strong>, el cual permite definir una página donde el usuario será llevado una vez que haga la donación. Esto es útil si queremos que el usuario siga navegando en nuestro sitio después de donar, así como también más comodo para el visitante, quien no querrá salir del área donde estaba originalmente. Para utilizar este valor, solo debemos incluir esta línea dentro del código anterior:</p>
<pre class="html" title="code">&lt;input type="hidden" name="return" value="url de la página
donde será llevado"&gt;</pre>
<p style="text-align: justify;">Aquí podemos diseñar una pequeña página con un agradecimiento por la donación o algo por el estilo. Sin duda que le dará un toque especial.</p>
<p style="text-align: justify;">Ahora <strong>ojo</strong>. Este parámetro actualmente no figura de forma <em>&#8216;oficial&#8217;</em> dentro de los botones de compra de PayPal, ya que se utilizaba anteriormente, por lo que no es seguro que siempre funcione. Nosotros lo probamos con 2 cuentas y funcionó sin problemas en una de ellas, en la otra no. Desconocemos realmente la razón, pero es bueno probar en caso de que sirva.</p>
<p style="text-align: justify;">Y así de simple tenemos un pequeño sistema de donaciones vía PayPal para insertar en nuestros sitios Web en solo minutos. Es una forma muy práctica para recibir aportes de los usuarios que estén interesados en nuestros contenidos y sin duda que nos servirá.</p>
<p style="text-align: justify;">Anees de terminar, les recordamos que como siempre, 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" /></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/2010/01/26/como-implementar-donaciones-via-paypal/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

