<?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; Javascript</title>
	<atom:link href="http://www.comolohago.cl/category/diseno-web/javascript/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 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 optimizar tu sitio Web en 10 pasos</title>
		<link>http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/</link>
		<comments>http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 18:32:40 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2476</guid>
		<description><![CDATA[Cientos de miles de millones de horas más tarde, trasnoches al por mayor, litros y litros del buen café-café, dosis interminables de snacks y un sinfín de decisiones tomadas (¿Qué color? ¿Verde? ¿Rojo?) te han llevado al momento que tanto esperabas: El sitio está terminado y listo para el lanzamiento. A descansar ahora ¿no?, nada [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2592/4131150508_09003ac297_o.png" alt="" width="400" height="113" />Cientos de miles de millones de horas más tarde, trasnoches al por mayor, litros y litros del buen <em>café-café</em>, dosis interminables de snacks y un sinfín de decisiones tomadas <em>(¿Qué color? ¿Verde? ¿Rojo?)</em> te han llevado al momento que tanto esperabas: El sitio está terminado y listo para el lanzamiento. A descansar ahora ¿no?, nada más lejos de la realidad.</p>
<p style="text-align: justify;">Para todos aquellos que les gusta el diseño Web, trabajan en ello, o bien ambas, no hay mejor momento que cuando un sitio es terminado y se lanza. Sin embargo, junto con eso, se sabe que el trabajo no está ni cerca de terminar, ya que desde ese instante en adelante comienza el proceso interminable de la optimización y mejoramiento de lo que se ha hecho, lo cual, siendo bastante honestos, puede terminar siendo aún más exhaustivo <span style="text-decoration: line-through;"><em>e interminable</em></span> que el proceso de diseño y desarrollo.</p>
<p style="text-align: justify;">Pues bien, hoy en CLH, en nuestro continuo afán de hacer la vida un poco más sencilla, les traemos un sencillo top ten con algunos tips y trucos para que puedan optimizar sus sitios Web, para al menos partir con un poco de orientación en este largo y complejo camino.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2476"></span></p>
<h1 style="text-align: center;">Cómo optimizar tu sitio Web en 10 pasos</h1>
<p style="text-align: justify;"><strong>Nota:</strong> La optimización de un sitio Web es un proceso continuo y bastante extenso, que de seguro toma bastante más que los 10 pasos presentados a continuación. Sin embargo, les presentamos algunos de los que consideramos, en nuestra opinión, más esenciales para poder partir, y esperamos en un futuro traer algunos más.</p>
<p style="text-align: justify;">En este tutorial, al ser de un tipo distinto que los normales, no necesitamos ningún tipo de implementos de forma requerida, quizás es recomendable algún editor Web para alguna de las tareas, pero ahí lo podrán apreciar en cada punto.</p>
<p style="text-align: justify;">Lo que veremos hoy es un conjunto de buenas prácticas, consejos útiles y tips de mejora de rendimiento que nunca están demás.</p>
<p style="text-align: justify;">Sin más que decir, vamos con nuestro top ten:</p>
<h2 style="text-align: justify;">1.- Siempre declarar el DocType <em>(y asegurarse que sea el correcto)</em></h2>
<p style="text-align: justify;">Este es un punto al que muchos, incluyéndome, en algunas ocasiones le hemos dado poca importancia, pero sin duda que la tiene. El declarar el DocType o tipo de documento es clave para permitir que los navegadores interpreten de forma correcta el código que tenemos en cada página, ya sea HTML o XHTML. Si bien al no declarar, existe la posibilidad de que en nuestro navegador se vea de forma correcta, esto no asegura que el código se interprete bien para cada usuario y será complejo al momento de validar.</p>
<p style="text-align: justify;">La gran mayoría de los editores Web <em>(como Adobe Dreamweaver)</em>, agregan el DocType de forma automática, por lo que no hay que preocuparse. Sin embargo, nosotros lo podemos añadir de forma manual, siempre al <strong>inicio del documento</strong>, es decir, antes de la etiqueta &lt;html&gt;. Los 4 más recomendados de utilizar <em>(siempre que no estemos trabajando con HTML 5)</em>, son:</p>
<blockquote>
<p style="text-align: justify;">&lt;!DOCTYPE HTML PUBLIC  &#8220;-//W3C//DTD HTML 4.01//EN&#8221; &#8220;http://www.w3c.org/TR/html4/strict.dtd&#8221;&gt;</p>
<p style="text-align: justify;">&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221; &#8220;http://www.w3c.org/TR/html4/loose.dtd&#8221;&gt;</p>
<p style="text-align: justify;">&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;</p>
<p style="text-align: justify;">&lt;!DOCTYPE html PUBLIC&#8221;-//W3C//DTD XHTML 1.0 Strict//EN&#8221; &#8220;http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#8221;&gt;</p>
</blockquote>
<p style="text-align: justify;">La diferencia de utilizar una de las 4 formas anteriores depende primero de si estamos utilizando HTML o XHTML para codificar <em>(las 2 primeras para HTML y las 2 últimas para XHTML)</em> y de si estamos utilizando la versión Strict o la Transitional del lenguaje. La diferencia de lo último depende si queremos permitir el uso de etiquetas que estén descontinuadas de versiones anteriores del lenguaje <em>(Strict no permite, Transitional si)</em>. Más allá de eso, cualquiera de las 4 es correcta.</p>
<h2 style="text-align: justify;">2.- Nunca estilizar dentro de las etiquetas</h2>
<p style="text-align: justify;">Esto corresponde a una buena práctica, y si bien es un comportamiento adoptado y adaptado por la gran mayoría de diseñadores Web, siempre hay por ahí algún caso que cae en el error, por lo que es bueno recordarlo.</p>
<p style="text-align: justify;">Con la popularización de CSS, y la descontinuación de etiquetas de estilo <em>(como font face)</em> en HTML, se buscaba hacer una separación completa y absoluta entre el estilo de los documentos Web y su estructura, por lo que al aplicar un estilo dentro de una etiqueta en particular caemos en lo que tanto se ha intentado evitar. Para muestra, un botón <em>(aunque no es un botón realmente, sino que más un ejemplo)</em>:</p>
<blockquote>
<p style="text-align: justify;"><strong>Esto es incorrecto:</strong></p>
<p style="text-align: justify;">&lt;p style:=&#8221;color: black; font-family:Arial;&#8221;&gt;Texto de ejemplo&lt;/p&gt;</p>
<p style="text-align: justify;"><strong>Esto es correcto:</strong></p>
<p style="text-align: justify;">En una hoja de estilo externa, declarar:</p>
<p style="text-align: justify;">p{<br />
color:black;<br />
font-family:Arial;<br />
}</p>
<p style="text-align: justify;">O bien, en la misma hoja de estilo externa, declarar:</p>
<p style="text-align: justify;">.estilo1{<br />
color:black;<br />
font-family:Arial;<br />
}</p>
<p style="text-align: justify;">Y luego, en nuestro HTML:</p>
<p style="text-align: justify;">&lt;p class=&#8221;estilo1&#8243;&gt;Texto de ejemplo&lt;/p&gt;</p>
</blockquote>
<p style="text-align: justify;">De esta forma, separamos completamente la estructura del estilo, realizandolo de forma correcta y ahorrándonos bastante tiempo al momento de hacer modificaciones.</p>
<h2 style="text-align: justify;">3.- CSS al comienzo, Javascript al final</h2>
<p style="text-align: justify;">Este es un error en el que personalmente he caído bastante, con las librerías en Javascript, pero vamos por parte:</p>
<p style="text-align: justify;">Lo recomendable para las hojas de estilo externas en CSS es siempre cargarlas al inicio del documento, entre las etiquetas &lt;head&gt; y &lt;/head&gt;. Esto nos asegura tanto una carga más rápida de la página propiamente tal, como asegurar que siempre los estilos se carguen junto al documento y no luego de que se ha cargado el contenido, ya que si el usuario detiene la carga de la página, o su conexión se cae, se desplegará el contenido sin ningún estilo aplicado, entregando una experiencia visual bastante mala.</p>
<blockquote>
<p style="text-align: justify;"><strong>Lo correcto es:</strong></p>
<p style="text-align: justify;">&lt;head&gt;<br />
&lt;title&gt;Mi sitio Web&lt;/title&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;estilos.css&#8221; media=&#8221;screen&#8221;&gt;<br />
&lt;/head&gt;</p></blockquote>
<p style="text-align: justify;">Por otro lado, las librerías en Javascript es todo lo contrario. Lo recomendable en este caso es incluirlas al final del documento, para que las cargas las realice cuando el contenido ya se depliegue en pantalla. ¿Por qué?, porque normalmente un documento Web no se seguirá cargando mientras una parte de el no se termine de cargar <em>(enredado ¿no?)</em>. Considerando que las librerías en Javascript pueden llegar a tener un tamaño mayor al mismo documento, es muy probable que la carga se tome algunos instantes para poder seguir, por lo que a no ser que sea estrictamente necesario <em>(por ej. si una librería determina como se despliega el sitio en si)</em>, lo más conveniente es cargarlas al final, y de esta forma presentarle el contenido al usuario lo más rápido posible para que este pueda empezar a navegar, sin necesitar que se cargue todo el documento.</p>
<blockquote>
<p style="text-align: justify;"><strong>Un ejemplo sería así:</strong></p>
<p style="text-align: justify;">&lt;/div&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;libreria.js&#8221;&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p style="text-align: justify;">La librería se cargara de cualquier forma, pero se le dará una mayor prioridad al contenido y estilo de la página.</p>
<h2 style="text-align: justify;">4.- Estilizar para cada navegador</h2>
<p style="text-align: justify;">Esta es una frase que debiésemos grabarnos a fuego. <strong>Todos los navegadores despliegan documentos Web de forma diferente</strong>. Es uno de los grandes problemas que nos cuesta comprender, especialmente cuando estamos empezando. Debido a que todos los navegadores son distintos, han sido codificados por empresas diferentes, usan motores que no son iguales a otros <em>(excepto navegadores de la misma familia, como Firefox y Flock)</em>, el contenido, o más bien el estilo de este, es interpretado de distintas formas por cada uno de ellos.</p>
<p style="text-align: justify;">Como tal, junto con asegurarnos de siempre probar nuestros diseños en todos los navegadores posibles <em>(nunca podremos asegurar compatibilidad completa con todos, pero si debemos cubrir los más comunes)</em>, es esencial definir hojas de estilo para cada uno de ellos e indicarle al documento que junto con detectar el navegador, cargue el estilo correspondiente. El mayor problema es comunmente Internet Explorer, ya que hay muchos estilos que no reconoce, especialmente entre sus distintas versiones <em>(6, 7 y 8 )</em>, por lo que podemos hacer lo siguiente. Dentro de nuestra inclusión de hojas de estilo, añadimos una pequeña excepción para que si el navegador es IE, cargue la hoja de estilo correspondiente:</p>
<blockquote>
<p style="text-align: justify;">&lt;!&#8211; [if lte IE 7]&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; media=&#8221;screen&#8221; type=&#8221;text/css&#8221; href=&#8221;estiloie7.css&#8221;&gt;<br />
&lt;!&#8211; [endif]&#8211;&gt;</p></blockquote>
<p style="text-align: justify;">El código anterior indica que si el navegador es IE 7 o alguna versión inferior, entonces cargue la hoja de estilo correspondiente. Esto lo definimos con el parámetro <strong>lte</strong>, el cual significa <strong>less than or equal </strong><em>(menor a o igual a)</em>. En caso de solo querer cubrir versiones anteriores a IE 7, cambiamos el parámetro por <strong>lt</strong>.</p>
<h2 style="text-align: justify;">5.- En lo posible, cargar todo localmente</h2>
<p style="text-align: justify;">Hoy en día, con toda la información disponible en Internet, es posible para los diseñadores y desarrolladores Web contar con un gran número de librerías de acceso libre y gratuito para utilizar en sus sitios. Sin embargo, muchas de estas librerías requieren ser cargadas desde sitios Web de terceros, lo que inevitablemente aumentará el tiempo final de carga de nuestro sitio y por ende empeorará la experiencia del usuario.</p>
<p style="text-align: justify;">Es por esto, que en lo posible, lo recomendable es tener todas, o el mayor número posible, de librerías y hojas de estilo en el mismo servidor donde está el sitio, para que la carga se haga de forma local y mucho más rápida.</p>
<h2 style="text-align: justify;">6.- Añadir descripciones a las imágenes</h2>
<p style="text-align: justify;">Un detalle comunmente pasado por alto son los atributos de descripciones a las imágenes que incluímos en nuestros sitios Web. Si bien al no añadirlas nada sucede y el contenido se despliega de forma correcta, si es necesario incluirlas para efectos de mejorar la accesibilidad de cada página y para el momento de la validación del código. Es importante recordar que los sistemas de navegación para no videntes reconocen este atributo de las imágenes para explicar el tipo de contenido que está ahí, así que a no olvidarlo:</p>
<blockquote>
<p style="text-align: justify;"><strong>Esto no es correcto:</strong></p>
<p style="text-align: justify;">&lt;img src=&#8221;imagen.jpg&#8221;&gt;</p>
<p style="text-align: justify;"><strong>Esto es correcto:</strong></p>
<p style="text-align: justify;">&lt;img src=&#8221;imagen.jpg&#8221; alt=&#8221;Una imagen cualquiera&#8221;&gt;</p>
</blockquote>
<p style="text-align: justify;">Adicionalmente, hay algunos navegadores que en vez del atributo alt, reconocen <strong>title</strong>, por lo que nunca está demás agregar ambos.</p>
<h2 style="text-align: justify;">7.- Nunca olvidar cerrar cada etiqueta</h2>
<p style="text-align: justify;">HTML o XHTML, es 100% acerca de tener una estructura ordenada y definida en cada documento. Y como tal, siempre debemos asegurarnos de que cada etiqueta que abramos, sea cerrada. No importa si los navegadores obvien en algunas ocasiones este tema, es nuestro deber asegurarnos que todo esta abierto y cerrado como y cuando corresponde. De esta forma, nuestro sitio validará de mejor forma y nos haremos un gran favor al momento de realizar edición de código o bien si estamos realizando un trabajo colaborativo, para que otras personas sepan siempre donde empieza y donde termina cada parte del documento.</p>
<blockquote>
<p style="text-align: justify;"><strong>Esto no es correcto:</strong></p>
<p style="text-align: justify;">&lt;p&gt; Un párrafo de texto<br />
&lt;p&gt; Otro párrafo de texto<br />
&lt;p&gt; Y otro más</p>
<p style="text-align: justify;"><strong>Esto es correcto:</strong></p>
<p style="text-align: justify;">&lt;p&gt; Un párrafo de texto &lt;/p&gt;<br />
&lt;p&gt; Otro párrafo de texto &lt;/p&gt;<br />
&lt;p&gt; Y otro más &lt;/p&gt;</p></blockquote>
<p style="text-align: justify;">Con XHTML además, tenemos la posibilidad de cerrar la etiqueta en la misma de apertura y es considerado una práctica correcta:</p>
<blockquote>
<p style="text-align: justify;">&lt;br /&gt; -&gt; Una etiqueta abierta y cerrada.</p>
</blockquote>
<h2 style="text-align: justify;">8.- Favorecer PNG por sobre JPG, y el entrelazado</h2>
<p style="text-align: justify;">Este corresponde más a un tip gráfico que Web, pero considerando que normalmente incluímos un gran número de imágenes en nuestros sitios Web, no está demás remarcar.</p>
<p style="text-align: justify;">El formato más común para tratar imágenes es JPG, es de los más utilizados, pero no por eso el mejor. La verdad es que cada vez que manipulamos una imagen en formato JPG, ya sea al abrirla, editarla, cambiarla de tamaño, añadirle algo encima, o lo que sea y la volvemos a guardar, esta va perdiendo calidad, y así sucesivamente cada vez que trabajemos sobre ella, por lo que si estamos realizando constantes modificaciones, después de un tiempo la imagen será de una calidad notablemente inferior a la original.</p>
<p style="text-align: justify;">Por esto es recomendable el uso de PNG, que es un formato que se encarga de mantener la calidad a través de los distintos cambios, algo a tener muy en cuenta, especialmente si trabajamos con imágenes de gran resolución o si son nuestra fuente primaria de trabajo <em>(por ej. si tenemos un sitio con un portafolio de trabajos gráficos)</em>.</p>
<p style="text-align: justify;">Adicionalmente a esto, al utilizar PNG, una técnica bastante buena para utilizar en imágenes que vayamos a desplegar en la Web, es guardarlas con entrelazado. ¿Qué significa esto?, bastante simple. El entrelazado añade características a la imagen para que esta se cargue de forma distinta a que si se guardara convencionalmente.</p>
<p style="text-align: justify;">Por ejemplo, si tenemos una imagen sin entrelazado y la insertamos en un documento Web, la carga de esta se realizará de forma vertical, de arriba hacia abajo. Con esto, si la conexión es lenta, o la imagen muy grande, se irá viendo como se carga, trozo por trozo, de arriba hacia abajo.</p>
<p style="text-align: justify;">Por otra parte, con el entrelazado, la modalidad de carga cambia, y en vez de realizarse de forma vertical como el caso anterior, esta se va realizando por capas, desde el fondo hasta el frente de la imagen, cargando en una primera etapa la imagen completa, viéndose como si estuviese pixeleada y eventualmente cargando capa tras capa encima de esta, de cierta forma <em>despixeleándose</em>. Con esto, el contenido de la imagen puede ser apreciado antes que termine de cargarse, y por lo general se muestran de forma mucho más rápida que de forma convencional.</p>
<h2 style="text-align: justify;">9.- Tablas para los datos, nunca para el diseño</h2>
<p style="text-align: justify;">Cuando empecé a meterme de lleno en el diseño Web, hace unos 10 años, la mayoría de los sitios eran diseñados utilizando 2 técnicas: Frames o marcos y con tablas.</p>
<p style="text-align: justify;">Ámbos métodos eran bastante útiles, ya que permitían hacer una organización del contenido de forma sencilla y bastante rápida y ordenada. Por una parte los frames nos permitían separar el sitio en secciones y trabajar cada una de ellas mediante archivos independientes y por otra, las tablas, nos permitían definir una estructura segmentada y ordenada mediante filas, columnas y celdas, detallando contenido en ellas tal como si fuese un rompecabezas.</p>
<p style="text-align: justify;">Sin embargo, con el tiempo y evolución que ha tenido HTML, hace bastante que no es visto con buenos ojos definir el diseño de un sitio mediante alguna de estas 2 técnicas, y es recomendable hacer el uso de bloques <em>(o div&#8217;s)</em> para hacer el diseño propiamente tal, utilizando posicionamientos en CSS  y dejar las tablas solamente para presentar información tabulada.</p>
<p style="text-align: justify;">Sin duda que el dominar de forma correcta el uso de bloques puede ser tremendamente complejo al compararlo con lo que hacíamos mediante tablas, pero a medida que se va teniendo un mejor entendimiento de como funcionan es posible alcanzar un mejor grado de ubicación de cada componente, así como un orden ideal.</p>
<p style="text-align: justify;">Es por esto que si sus sitios están actualmente diseñados bajo una estructura de tablas, es recomendable empezar a actualizar los conocimientos y hacer los traspasos necesarios, todo con el fin de tener un sitio mejor adaptado a lo que hoy es considerado correcto.</p>
<h2 style="text-align: justify;">10.- Validar, validar y luego seguir validando</h2>
<p style="text-align: justify;">Dejamos al final un punto que tiene tanta o más importancia que los anteriormente mencionados, que es el tema de la validación.</p>
<p style="text-align: justify;">Cuando hablamos de validar un sitio, nos referimos a inspeccionarlo con el fin de determinar que toda la codificación haya sido hecha de forma correcta, y de esa forma asegurarnos que cada navegador verá exactamente lo que queremos mostrar. De esta forma podemos asegurarnos que los usuarios tendrán una buena experiencia visualizando el sitio y también ayudaremos a que los buscadores indexen de mejor forma en sus resultados.</p>
<p style="text-align: justify;">Para validar tenemos varias opciones, como por ejemplo:</p>
<ul style="text-align: justify;">
<li>La primera, y más utilizada, es el <a href="http://validator.w3.org/" target="_blank">validador oficial de la W3C</a>, en el cual al ingresar la URL de nuestro sitio nos entregará un detalle de cualquier problema que haya.</li>
<li>Existen complementos para navegadores que nos ayudan en la tarea, como es el caso de <a href="https://addons.mozilla.org/en-US/firefox/addon/60" target="_blank">Web Developer</a> y <a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Firebug</a> para Firefox.</li>
</ul>
<p style="text-align: justify;">Adicionalmente existen otros sitios que validan nuestro código, pero con lo anterior podrán hacerlo sin problemas.</p>
<p style="text-align: justify;">Y con este último punto damos cierre a esta práctica guía para optimizar tu sitio Web en tan solo 10 pasos. Al ir terminando nos hemos dado cuenta de algunos importantes que se nos quedaron fuera y que es importante recalcar, por lo que probablemente en un futuro cercano haremos una continuación sobre este tema, que sin duda a muchos les servirá.</p>
<p style="text-align: justify;">Por ahora lo dejamos hasta aquí, recordando como siempre 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" /></p>
<p style="text-align: justify;">Cualquier comentario o duda 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: center;">
<p style="text-align: justify;">
<p style="text-align: justify;">
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>CLH Express: Compresión CSS/Javascript, Feedburner, Blogger, Firefox, Pdf&#8217;s y más Pdf&#8217;s</title>
		<link>http://www.comolohago.cl/2009/11/14/clh-express-compresion-cssjavascript-feedburner-blogger-firefox-pdfs-y-mas-pdfs/</link>
		<comments>http://www.comolohago.cl/2009/11/14/clh-express-compresion-cssjavascript-feedburner-blogger-firefox-pdfs-y-mas-pdfs/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 00:38:02 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CLH Express]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[Feedburner]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2415</guid>
		<description><![CDATA[Continuando con la sección que hace poco dimos por inaugurada, hoy cubriremos algunos tips y peticiones pequeñas que han llegado al buzón oficial de CLH. Desde incrustar archivos PDF en un sitio Web, hasta comprimir nuestras hojas de estilo y utilizar Feedburner en blogs de Blogger, los invitamos a conocer el detalle, como siempre, después [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="aligncenter size-full wp-image-2320" title="clh-express" src="http://www.comolohago.cl/wp-content/uploads/2009/10/clh-express.png" alt="clh-express" width="400" height="202" />Continuando con la <a href="http://www.comolohago.cl/2009/10/29/clh-express-wordpress-movil-eliminar-directorios-vacios-trucos-de-firefox-mapas-de-imagenes-y-optimizacion-de-tablas-en-mysql/" target="_blank">sección</a> que hace poco dimos por inaugurada, hoy cubriremos algunos tips y peticiones pequeñas que han llegado al <a href="http://www.comolohago.cl/peticiones/" target="_blank">buzón oficial de CLH</a>. Desde incrustar archivos PDF en un sitio Web, hasta comprimir nuestras hojas de estilo y utilizar Feedburner en blogs de Blogger, los invitamos a conocer el detalle, como siempre, después del salto.</p>
<p><span id="more-2415"></span></p>
<h1 style="text-align: center;">CLH Express: Compresión CSS/Javascript, Feedburner, Blogger, Firefox, Pdf&#8217;s y más Pdf&#8217;s</h1>
<p style="text-align: justify;">
<p style="text-align: justify;">Les recordamos que si nos quieren hacer llegar sus peticiones, solo deben contactarnos en la <a href="http://www.comolohago.cl/peticiones/" target="_blank">sección correspondiente de nuestro sitio</a>.</p>
<p style="text-align: justify;">En el CLH Express de hoy:</p>
<ol style="text-align: justify;">
<li>Cómo incrustar archivos PDF en un sitio Web.</li>
<li>Cómo utilizar Feedburner en Blogger.</li>
<li>Cómo comprimir nuestros CSS y Javascript.</li>
<li>Cómo evitar el refresco automático de Firefox.</li>
<li>Cómo convertir de PDF a Excel.</li>
</ol>
<p style="text-align: justify;">Sin más que decir, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">1.- Cómo incrustar archivos PDF en un sitio Web</h2>
<p style="text-align: justify;">Cuando hablamos de incrustar, nos referimos a la funcionalidad de reproducir un contenido dentro de otro, el cual puede ser del mismo tipo o bien distinto. La gracia de todo esto, es lograr un impacto mínimo a los ojos del usuario, con el fin de que se vea una integración casi nativa entre las 2 partes.</p>
<p style="text-align: justify;">Es común que hoy en día en nuestros sitios Web ofrezcamos documentos en formato PDF, los cuales pueden ser descargados por los visitantes o bien abiertos en el mismo navegador en una nueva pestaña o ventana.</p>
<p style="text-align: justify;">Pero, ¿qué pasa si queremos que el usuario pueda visualizar el documento sin dejar nuestro sitio?, es aquí donde la incrustación juega un papel vital. Hoy en día, gracias a Google Docs, la visualización de archivos PDF se ha vuelto realmente cómoda y natural, por lo que podemos aprovecharla y utilizarla desde nuestro propio sitio, para obtener las claras ventanas.</p>
<p style="text-align: justify;">¿Cómo lo haremos?, bastante simple. Sólo debemos crear un documento HTML para nuestra Web <em>(si es que no tenemos uno ya)</em> y crear un iframe en el, desde el cual cargaremos la URL del visor de PDF de Google Docs y a este le indicaremos, mediante un parámetro, que cargue nuestro archivo PDF. El código queda de la siguiente forma:</p>
<blockquote>
<p style="text-align: justify;">&lt;iframe src=&#8221;http://docs.google.com/gview?url=direccion de nuestro archivo PDF&amp;embedded=true&#8221; style=&#8221;width:ancho del visor; height:alto del visor;&#8221; frameborder=&#8221;0&#8243;&gt;&lt;/iframe&gt;</p>
</blockquote>
<p style="text-align: justify;">Por ejemplo, si quisiéramos mostrar en este artículo un PDF que incluímos en nuestro tutorial <a href="http://www.comolohago.cl/2008/06/10/como-tocar-cumpleanos-feliz-en-guitarra/" target="_blank"><em>&#8220;Cómo tocar cumpleaños feliz en guitarra&#8221;</em></a>, iría algo así:</p>
<blockquote>
<p style="text-align: justify;">&lt;iframe src=&#8221;http://docs.google.com/gview?url=http://www.comolohago.cl/uploads/Tab.pdf&amp;embedded=true&#8221; style=&#8221;width:500px; height:375px;&#8221; frameborder=&#8221;0&#8243;&gt;&lt;/iframe&gt;</p>
</blockquote>
<p style="text-align: justify;">Al cargar ese documento HTML en nuestro navegador, se cargará un visor con el documento PDF y algunas funciones para manipularlo.</p>
<h2 style="text-align: justify;">2.- Cómo utilizar Feedburner en Blogger</h2>
<p style="text-align: justify;">Desde hace mucho tiempo que un aspecto vital de los sitios Web <em>(especialmente los que están generando nuevo contenido de forma continua)</em> son los feeds. Estos nos permiten entregarle a los usuarios una forma cómoda para que se enteren de nuevas actualizaciones, ya que la oferta de lectores de RSS hoy es bastante amplia, pudiendo incluso integrarlos a los navegadores Web o servicios de Google.</p>
<p style="text-align: justify;">Configurar Feedburner para nuestros blogs en Wordpress es bastante sencillo, solo basta crear la cuenta y apuntarlo. Sin embargo, en Blogger requiere de un poco más de trabajo, aunque no por eso se hace más complejo. Hoy veremos como en unos breves pasos podemos dejar todo andando:</p>
<p style="text-align: justify;">1.- Lo primero que haremos será ir al <a href="http://www.feedburner.com" target="_blank">sitio de Feedburner</a> y crear una cuenta si es que no tenemos.</p>
<p style="text-align: justify;">2.- Luego, en el cuadro <strong>Burn a feed right this instant</strong> debemos ingresar la dirección de nuestro blog y hacemos click en <strong>Next</strong>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2646/4104446280_200d2ea3a8_o.png" alt="" width="478" height="92" />3.- A continuación, nos mostrará un cuadro de selección con los feeds que detectó desde el blog. Probablemente serán 2, uno en formato Atom y uno en RSS. Optaremos por el segundo y haremos click en <strong>Next</strong>.</p>
<p style="text-align: justify;">4.- Luego nos pedirá que definamos el título del feed y la URL de este. Aquí podemos fijar según queramos y hacemos click en <strong>Next</strong>. Con esto habremos activado el feed desde el sitio de Feedburner.</p>
<p style="text-align: justify;">5.- Ahora debemos dirijirnos al nuestro panel de control en Blogger, y dentro de <strong>Configuración</strong> buscaremos la opción <strong>Feed del sitio</strong>.</p>
<p style="text-align: justify;">6.- Dentro de esta última, buscamos la opción llamada <strong>Publicar URL redireccionada del feed</strong> y en ella ingresamos la URL que definimos en el último paso en Feedburner:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2703/4104470570_78c13263a1_o.png" alt="" width="500" height="93" /></p>
<p style="text-align: justify;">7.- Guardamos la configuración y listo. Desde ahora nuestros feeds se harán en formato RSS a través de Feedburner.</p>
<h2 style="text-align: justify;">3.- Cómo comprimir nuestros CSS y Javascript</h2>
<p style="text-align: justify;">Una buena práctica en el desarrollo de sitios Web, la cual lamentablemente es obviada por muchos, es la compresión de hojas de estilo CSS y archivos Javascript una vez que tenemos las versiones finales y nos aprontamos a subirlas al servidor. Los beneficios de hacer esto incluyen desde mejorar el tiempo de carga de los sitios <em>(algo que siempre debiesemos tener en cuenta)</em>, eliminar partes innecesarias <em>(como por ejemplo comentarios, los cuales está bien tenerlos en las versiones que manejamos a la hora de desarrollar, pero en el sitio en si no cumplen ninguna funcionalidad)</em> o bien optimizar mediante la combinación de secciones, cuando por ejemplo 2 marcas utilizan el mismo estilo y están declaradas por separado.</p>
<p style="text-align: justify;">Hoy hacer compresión de CSS y Javascript es bastante sencillo, ya que se encuentran disponibles muchos servicios que nos permiten realizarlo en línea y en solo unos segundos. Les recomendamos 2:</p>
<ol style="text-align: justify;">
<li>Para las hojas de estilo: CSS Compressor de CSS Drive Gallery, el cual pueden encontrar <a href="http://www.cssdrive.com/index.php/main/csscompressor/" target="_blank">aquí</a>.</li>
<li>Para Javascript: Javascript Compressor, el cual pueden encontrar <a href="http://javascriptcompressor.com/" target="_blank">aquí</a>.</li>
</ol>
<p style="text-align: justify;">Ambos servicios son sumamente sencillos de utilizar. Sólo debemos ingresar nuestro código y presionar un botón para que nos entregue la versión comprimida. Así que a tenerlo en cuenta a la hora de desarrollar.</p>
<h2 style="text-align: justify;">4.- Cómo evitar el refresco automático de Firefox</h2>
<p style="text-align: justify;">Una de las tantas funcionalidades que Firefox ofrece por defecto a la hora de instalarlo es el refresco automático de páginas que estemos viendo. Si bien en algunos casos puede ser útil, hay otros en los que se vuelve bastante molesto, por lo que una opción es desactivarlo, lo cual se puede hacer en unos cuantos pasos:</p>
<p style="text-align: justify;">1.- Abrimos Firefox y en la barra de direcciones escribimos <strong>about:config</strong> , con lo que se abrirá el interfaz de configuración:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2644/4104510392_c2bfe1c118_o.png" alt="" width="500" height="165" /></p>
<p style="text-align: justify;">2.- Hacemos click en <strong>¡Tendré cuidado, lo prometo!</strong> y nos llevará a las opciones de configuración. Una vez ahí, en el filtro debemos escribir:</p>
<blockquote>
<p style="text-align: justify;">accessibility.blockautorefresh</p>
</blockquote>
<p style="text-align: justify;">Y nos buscará la opción con el mismo nombre:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2709/4103747823_236ceb455e_o.png" alt="" width="368" height="84" /></p>
<p style="text-align: justify;">3.- Por defecto esta opción viene con el valor <strong>false</strong>. Hacemos click con el botón derecho del mouse sobre ella y seleccionamos <strong>Modificar</strong>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2794/4103747843_0ab569103f_o.png" alt="" width="364" height="166" /></p>
<p style="text-align: justify;">4.- Y veremos como el valor se cambia a <strong>true</strong>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2721/4103747853_ed1c42e125_o.png" alt="" width="386" height="68" /></p>
<p style="text-align: justify;">Y tenemos el refresco automático bloqueado. Si queremos volver a activarlo, solo debemos repetir el proceso y modificar el valor para que quede en <strong>false</strong>.</p>
<h2 style="text-align: justify;">5.- Cómo convertir de PDF a Excel</h2>
<p style="text-align: justify;">Dentro de las peticiones que nos llegan día a día, la conversión de formatos <em>(especialmente involucrando PDF)</em> es la categoría más llena. Una de las que teníamos en carpeta hace tiempo era la conversión de archivos PDF a formato Excel, la cual en un principio nos sorprendió bastante, ya que desconocíamos que fuera posible. Sin embargo, nuestro buen Topher, quien es la portabilidad hecha persona, nos ha mostrado un servicio que en lo personal me ha dejado impactado por su simpleza y rapidez. Hablamos de <strong>PDF to Excel</strong>, el cual puede ser accedido desde el siguiente enlace,  que nos permite hacer la conversión en solo 3 pasos, enviándonos el archivo convertido a nuestro correo electrónico.</p>
<p style="text-align: justify;">Para convertir:</p>
<p style="text-align: justify;">1.- Ingresamos al sitio oficial de <a href="http://www.pdftoexcelonline.com/es/Default.aspx" target="_blank">PDF to Excel</a>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2520/4104537986_dac6df8899_o.png" alt="" width="500" height="309" /></p>
<p style="text-align: justify;">2.- Seguimos los 3 pasos para la conversión que vemos en el sitio principal:</p>
<ul style="text-align: justify;">
<li>Seleccionamos el archivo a convertir.</li>
<li>Seleccionamos el formato de destino <em>(aunque solo está disponible XLS)</em>.</li>
<li>Ingresamos nuestro correo electrónico para que nos envíen el archivo.</li>
</ul>
<p style="text-align: justify;">3.- Hacemos click en <strong>Convertir</strong> y esperamos mientras se sube el archivo al servidor:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2600/4104538040_7b286de259_o.png" alt="" width="500" height="301" /></p>
<p style="text-align: justify;">4.- Una vez subido, nos mostrará el mensaje de éxito y a continuación solo debemos esperar que nos llegue a nuestro correo:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2646/4103775439_b03591c3a8_o.png" alt="" width="500" height="398" /></p>
<p style="text-align: justify;">Para tener una noción aproximada, al momento de probar el servicio subimos un PDF de 850KB. La carga del archivo al servidor demoró unos 30 segundos y en no más de 5 minutos lo teníamos disponible en nuestro correo. Sin embargo, estos tiempos pueden variar dependiendo de nuestra conexión y de la carga que tenga el servidor al momento de utilizar el servicio.</p>
<p style="text-align: justify;">Bastante simple.</p>
<p style="text-align: justify;">Y así damos por terminada esta edición de CLH Express, en donde buscamos responder todas aquellas dudas que presenten soluciones cortas y sencillas que no necesiten de un completo paso a paso. Les recordamos que pueden seguir enviándonos sus peticiones a nuestro<a href="http://www.comolohago.cl/peticiones/" target="_blank"> buzón oficia</a>l.</p>
<p style="text-align: justify;">Como siempre, este CLH Express 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 CLH Express 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;">
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/11/14/clh-express-compresion-cssjavascript-feedburner-blogger-firefox-pdfs-y-mas-pdfs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cómo añadir campos a un formulario dinámicamente</title>
		<link>http://www.comolohago.cl/2009/08/15/como-anadir-campos-a-un-formulario-dinamicamente/</link>
		<comments>http://www.comolohago.cl/2009/08/15/como-anadir-campos-a-un-formulario-dinamicamente/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 04:10:19 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Formularios]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=1810</guid>
		<description><![CDATA[
En CLH, en nuestro afán de cubrir hasta los últimos posibles detalles en cada temática, hemos hablado en varias ocasiones de los formularios Web. Ya sea estilizándolos, validándolos por Javascript, añadiendo Calendarios o incluso haciéndolos, esto se debe a lo que siempre remarcamos, que es su importancia dentro de un sitio que pretenda interactuar con [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3534/3821614323_cf658b23a7.jpg" alt="" width="400" height="150" /></p>
<p style="text-align: justify;">En CLH, en nuestro afán de cubrir hasta los últimos posibles detalles en cada temática, hemos hablado en varias ocasiones de los formularios Web. Ya sea <a href="http://www.comolohago.cl/2009/03/05/como-estilizar-los-formularios-de-nuestros-sitios-web/" target="_blank">estilizándolos</a>, <a href="http://www.comolohago.cl/2009/02/26/como-validar-campos-de-un-formulario-mediante-javascript/" target="_blank">validándolos por Javascript</a>, <a href="http://www.comolohago.cl/2009/08/04/como-anadir-un-calendario-a-tus-formularios/" target="_blank">añadiendo Calendarios</a> o incluso <a href="http://www.comolohago.cl/2008/10/07/como-hacer-un-formulario-de-contacto/" target="_blank">haciéndolos</a>, esto se debe a lo que siempre remarcamos, que es su importancia dentro de un sitio que pretenda interactuar con sus visitantes.</p>
<p style="text-align: justify;">Pues bien, hoy añadimos una nueva página a las numerosas lecciones al respecto. En esta ocasión, les enseñaremos a añadir campos al formulario de forma dinámica, para permitirle a un usuario en particular definir cuantos datos de un tipo quiere ingresar.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-1810"></span></p>
<p style="text-align: justify;">
<h1 style="text-align: center;">Cómo añadir campos a un formulario dinámicamente</h1>
<p>Antes de partir, una pequeña explicación:</p>
<h2>¿Qué haremos?</h2>
<p style="text-align: justify;">Lo que haremos, será añadir una pequeña funcionalidad a nuestro formulario, para que mediante un botón, el usuario pueda añadir más campos para ingresar un tipo de dato en particular y así definir la cantidad que estime conveniente. Esto lo haremos mediante un formulario en HTML y un código en Javascript, además de un poco de PHP para procesar el formulario.</p>
<h2 style="text-align: justify;">¿Por qué hacerlo?</h2>
<p style="text-align: justify;">Es una muy buena pregunta, que tiene una respuesta así de buena. Cuando hacemos un formulario, en algunas ocasiones nos presentamos con la problemática de que para una información en particular, el número de datos a ingresar puede ser relativo.</p>
<p style="text-align: justify;">Por ej: Si le queremos preguntar al usuario el nombre de sus hermanos o familiares, ¿Cómo definimos cuantos tendrán?. Claro, podríamos irnos a la segura y poner 10 o 15 campos, pero si el usuario solo tiene 1 hermano, estaríamos manejando una gran cantidad de datos innecesariamente.</p>
<p style="text-align: justify;">Por esto es mejor darle el control al usuario y permitirle añadir más campos para el mismo dato según estime conveniente.</p>
<h2 style="text-align: justify;">Implementos Necesarios</h2>
<ol style="text-align: justify;">
<li>Un editor Web.</li>
<li>Idealmente un hosting que pueda ejecutar archivos PHP.</li>
</ol>
<p style="text-align: justify;">Con eso claro, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">Procedimiento</h2>
<p style="text-align: justify;">1.- Lo primero que haremos, será crear nuestro formulario con los datos que querremos que el usuario ingrese. Si tienen dudas sobre como hacerlo, les recomendamos leer <a href="http://www.comolohago.cl/2008/05/17/como-hacer-una-autentificacion-en-php/" target="_blank">este tutorial</a> donde hemos cubierto el proceso por completo.</p>
<p style="text-align: justify;">2.- Una vez que hemos creado nuestro formulario debemos hacer los ajustes para preparar nuestros campos dinámicos. Para eso nos dirigimos a donde están este campo <em>(dentro de la celda, o entre las etiquetas <strong>td y /td</strong> si hemos insertado una tabla dentro del formulario, lo que es recomendable) </em>y ahí lo que haremos será crear otra tabla en donde dejaremos los campos dinámicos. Así nos aseguraremos que sin importar cuantos campos se agreguen, ni el formulario ni la tabla principal pierdan la forma, así que dentro de la celda, agregaremos el código correspondiente. En este caso, como demostramos con un formulario para agregar nuevos usuarios añadiremos:</p>
<blockquote>
<p id="line118">&lt;table id=&#8221;tablaUsuarios&#8221;&gt;</p>
<p>&lt;tr&#8217;&gt;</p>
<p>&lt;td width=&#8221;175&#8243;&gt;Nombre&lt;/td&gt;</p>
<p>&lt;td width=&#8221;175&#8243;&gt;Sitio Web &lt;/td&gt;</p>
<p>&lt;td width=&#8221;100&#8243;&gt;Correo&lt;/td&gt;</p>
<p>&lt;td width=&#8221;100&#8243;&gt;Acciones&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p></blockquote>
<p style="text-align: justify;">Lo que hemos hecho aquí es simplemente añadir una fila con 3 celdas, en las que se indica el nombre de un usuario, su sitio Web y su correo. Ojo que solo agregamos las celdas con los títulos. Los campos de texto los agregaremos en el siguiente paso para ver como lo hacemos dinámicamente.</p>
<p style="text-align: justify;">3.- A continuación, en una nueva fila de la tabla principal que está en el formulario, agregaremos y alinearemos a la derecha un botón para agregar nuevas filas:</p>
<blockquote>
<p id="line136">&lt;<span class="start-tag">td</span><span class="attribute-name"> align</span>=<span class="attribute-value">&#8220;right&#8221;</span>&gt;<br />
&lt;<span class="start-tag">input</span><span class="attribute-name"> type</span>=<span class="attribute-value">&#8220;button&#8221; </span><span class="attribute-name">onClick</span>=<span class="attribute-value">&#8220;agregarUsuario()&#8221;<br />
</span><span class="attribute-name">value</span>=<span class="attribute-value">&#8220;A&amp;ntilde;adir usuario&#8221; </span>&gt;<br />
&lt;/<span class="end-tag">td</span>&gt;</p></blockquote>
<p style="text-align: justify;">Con esto, hemos creado una celda alineada a la derecha y hemos añadido un botón al cual se le ha asignado un atributo <strong>onClick</strong>, es decir, cuando se pulse este botón, se ejecutará una acción, en este caso, llamará a una función <strong>agregarUsuario()</strong> en Javascript que ya definiremos.</p>
<p style="text-align: justify;">4.- Como describimos en el paso anterior, haremos una llamada a una función en Javascript que se encargará de añadir un campo cada vez que pulsemos el botón. Así que entre las etiquetas <strong>head y /head</strong>, agregaremos el siguiente código. La explicación, como siempre, en negrita, cursiva y entre /* y */:</p>
<blockquote><p>&lt;script language=&#8221;javascript&#8221; type=&#8221;text/javascript&#8221;&gt; <em><strong>/* Abrimos etiqueta de código Javascript */</strong></em></p>
<p style="text-align: justify;"><em><strong>/* Partimos por definir una variable llamada posicionCampo. Esta variable servirá como índices para marcar cuantos campos se han agregado dinámicamente. La inicializamos en 1, ya que la primera llamada ocurrirá cuando no hayan campos agregados */</strong></em></p>
<p>var posicionCampo=1;</p>
<p><em><strong>/* Declaramos la función agregarUsuario( ) */</strong></em></p>
<p>function agregarUsuario(){</p>
<p><em><strong>/* Declaramos una variable llamada nuevaFila y a ella le asignamos la recuperación del elemento HTML designado por el id tablaUsuarios. En este caso, la tabla en la que manejamos los campos dinámicamente y llamamos a la función insertRow para agregar una fila */</strong></em></p>
<p>nuevaFila = document.getElementById(&#8220;tablaUsuarios&#8221;).insertRow(-1);</p>
<p><em><strong>/* Asignamos a la propiedad id de nuevaFila el valor de posicionCampo, que inicializamos en 1 */</strong></em></p>
<p>nuevaFila.id=posicionCampo;</p>
<p><em><strong>/* Luego en otra variable llamada nuevaCelda, agregaremos una celda a la tabla, mediante la función insertCell */<br />
</strong></em></p>
<p>nuevaCelda=nuevaFila.insertCell(-1);</p>
<p><em><strong>/* Con la celda creada, insertamos dinámicamente un campo de texto, el cual almacenaremos en un array llamado nombre, con una posición equivalente a la variable posicionCampo. Una vez terminado, repetimos la acción para el sitio Web y correo, asignando al array respectivo */</strong></em></p>
<p>nuevaCelda.innerHTML=&#8221;&lt;td&gt;&lt;input type=&#8217;text&#8217; size=&#8217;15&#8242; name=&#8217;nombre["+posicionCampo+"]&#8216; &gt;&lt;/td&gt;&#8221;;</p>
<p>nuevaCelda=nuevaFila.insertCell(-1);</p>
<p>nuevaCelda.innerHTML=&#8221;&lt;td&gt; &lt;input type=&#8217;text&#8217; size=&#8217;10&#8242; name=&#8217;web["+posicionCampo+"]&#8216; &gt;&lt;/td&gt;&#8221;;</p>
<p>nuevaCelda=nuevaFila.insertCell(-1);</p>
<p>nuevaCelda.innerHTML=&#8221;&lt;td&gt; &lt;input type=&#8217;text&#8217; size=&#8217;10&#8242; name=&#8217;correo["+posicionCampo+"]&#8216; &gt;&lt;/td&gt;&#8221;;</p>
<p><em><strong>/* Finalmente añadimos una última celda para las acciones y ahí agregamos un botón llamado Eliminar, el cual al ser presionado (definiendo la propiedad onClick), llamará a una función eliminarUsuario, pasando como parámetro la fila correspondiente */</strong></em></p>
<p>nuevaCelda=nuevaFila.insertCell(-1);</p>
<p>nuevaCelda.innerHTML=&#8221;&lt;td&gt;&lt;input type=&#8217;button&#8217;  value=&#8217;Eliminar&#8217; onclick=&#8217;eliminarUsuario(this)&#8217;&gt;&lt;/td&gt;&#8221;;</p>
<p><em><strong>/* Incrementamos el valor de posicionCampo para que empiece a contar de la fila siguiente */</strong></em></p>
<p>posicionCampo++;</p>
<p>}</p>
<p><em><strong>/* Definimos la función eliminarUsuario, la cual se encargará de quitar la fila completa del formulario. No es necesario hacer modificaciones sobre este código */</strong></em></p>
<p>function eliminarUsuario(obj){</p>
<p>var oTr = obj;</p>
<p>while(oTr.nodeName.toLowerCase()!=&#8217;tr&#8217;){</p>
<p>oTr=oTr.parentNode;</p>
<p>}</p>
<p>var root = oTr.parentNode;</p>
<p>root.removeChild(oTr);</p>
<p>}</p>
<p id="line1"><em><strong>/* Cerramos el código Javascript */</strong></em></p>
<p>&lt;/<span class="end-tag">script</span>&gt;</p></blockquote>
<p>5.- Y listo. Ahora podemos agregar campos dinámicamente y enviarlos a través del formulario, almacenando los datos en arrays, lo cual hará más sencillo de procesar y rescatar después mediante PHP o algún otro lenguaje dinámico, para manipular esos datos y hacer con ellos lo que necesitemos, como insertar en una BD o simplemente desplegar por pantalla.</p>
<p>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_52d616c96c.jpg" alt="" width="400" height="314" />Esperamos que haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Cualquier duda que tengan, los invitamos a dejarnos un comentario 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>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/08/15/como-anadir-campos-a-un-formulario-dinamicamente/feed/</wfw:commentRss>
		<slash:comments>64</slash:comments>
		</item>
		<item>
		<title>Cómo añadir un calendario a tus formularios</title>
		<link>http://www.comolohago.cl/2009/08/04/como-anadir-un-calendario-a-tus-formularios/</link>
		<comments>http://www.comolohago.cl/2009/08/04/como-anadir-un-calendario-a-tus-formularios/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 16:36:32 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=1710</guid>
		<description><![CDATA[
Muchas veces cuando presentamos formularios en nuestros sitios o sistemas Web, necesitamos que los usuarios ingresen una fecha para utilizar como parámetro. El principal problema que se presenta es asegurarnos que esta fecha se ingrese en el formato ideal.
Una de las mejores respuestas para esta inquietud es integrar un calendario al formulario, el cual además [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1711" title="calendario2" src="http://www.comolohago.cl/wp-content/uploads/2009/08/calendario2.jpg" alt="calendario2" width="380" height="400" /></p>
<p style="text-align: justify;">Muchas veces cuando presentamos formularios en nuestros sitios o sistemas Web, necesitamos que los usuarios ingresen una fecha para utilizar como parámetro. El principal problema que se presenta es asegurarnos que esta fecha se ingrese en el formato ideal.</p>
<p style="text-align: justify;">Una de las mejores respuestas para esta inquietud es integrar un calendario al formulario, el cual además de darnos el formato requerido, presenta una funcionalidad atractiva visualmente para quienes hacen uso del sitio.</p>
<p style="text-align: justify;">Hoy en CLH, les enseñaremos mediante un sencillo tutorial a realizar esta tarea.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-1710"></span></p>
<h1 style="text-align: center;">Cómo añadir un calendario a tus formularios</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 página Web con un formulario.</li>
<li>Un editor Web <em>(en CLH recomendamos y utilizamos Adobe Dreamweaver. Pueden descargar la versión CS4 desde <a href="http://www.adobe.com/es/products/dreamweaver/" target="_blank">este enlace</a>).</em></li>
<li>Popcalendar, que es un calendario emergente hecho en Javascript. <em>(pueden descargarlo desde el <a href="http://www.sectorweb.net/tutoriales/calendarioemergente/calendario.zip" target="_blank">sitio de su creador</a>).</em></li>
</ol>
<p style="text-align: justify;">Con todo lo necesario, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">Procedimiento:</h2>
<p style="text-align: justify;">1.- Lo primero que debemos hacer es confeccionar un formulario al cual le añadiremos un campo de texto para ingresar la fecha. Si tienen dudas sobre como crear un formulario, pueden revisar <a href="http://www.comolohago.cl/2008/05/17/como-hacer-una-autentificacion-en-php/" target="_blank">este tutorial</a> donde hemos cubierto el proceso por completo.</p>
<p style="text-align: justify;">2.- Una vez que tenemos nuestro formulario listo y hemos descargado la librería Popcalendar <em>(indicada en la sección Implementos Necesarios)</em>, debemos descomprimirla en alguna parte de nuestro computador.</p>
<p style="text-align: justify;">Al descomprimir, tendremos una serie de archivos. Debemos mover <strong>popcalendar.js</strong> y el directorio <strong>images</strong> a la carpeta donde tenemos alojado nuestro sitio Web con el formulario <em>(ya sea local o en algún FTP de alojamiento Web)</em>. Es muy importante mantener la estructura de rutas. Si deseamos mover las imágenes, debemos editar las rutas de estas en el archivo <strong>.js</strong>.</p>
<p style="text-align: justify;">3.- A continuación, debemos realizar la edición en el archivo de la página donde tenemos el formulario y añadiremos, entre las etiquetas <strong>head</strong> y <strong>/head</strong> lo siguiente:</p>
<blockquote>
<p style="text-align: justify;">&lt;script language=&#8217;javascript&#8217; src=&#8217;popcalendar.js&#8217;&gt;&lt;/script&gt;</p>
</blockquote>
<p style="text-align: justify;">Con ese trozo de código lo que hemos hecho es incluir la librería correspondiente al calendario a la página con nuestro formulario. El atributo <strong>src</strong> corresponde a la ubicación del script, por lo que solo debemos mantenerlo así si es que la hemos guardado en el mismo directorio que nuestra página. De lo contrario, debemos modificar aquella ruta para que realice la llamada como corresponde.</p>
<p style="text-align: justify;">4.- Luego que hemos realizado la inclusión del archivo, debemos hacer la modificación correspondiente en el campo de texto donde queremos que se ingrese la fecha.</p>
<p style="text-align: justify;">Lo que haremos será añadir un atributo a este campo de texto llamado <strong>onClick</strong>, de esta forma cuando un usuario haga click sobre el campo de texto <em>(intentando escribir por ejemplo)</em> se desplegará el calendario en pantalla para que seleccionen la fecha y esta se escribirá automáticamente en el formato que definamos sobre el campo.</p>
<p style="text-align: justify;">Así que revisamos el código de nuestro formulario y vamos a la etiqueta correspondiente al campo de texto de la fecha, por ejemplo, en este caso, tendríamos algo como:</p>
<blockquote>
<p style="text-align: justify;">&lt;input name=&#8221;fecha&#8221; type=&#8221;text&#8221; size=&#8221;10&#8243; id=&#8221;fecha&#8221;  /&gt;</p>
</blockquote>
<p style="text-align: justify;">A esa etiqueta debemos agregarle una pequeña modificación para que sepa que debe realizar la llamada al calendario, por lo que modificaremos el atributo <strong>id</strong> y añadiremos <strong>onClick</strong> tal como habíamos detallado antes <em>(en negrita lo que añadiremos/cambiaremos)</em>:</p>
<blockquote>
<p style="text-align: justify;">&lt;input name=&#8221;fecha&#8221; type=&#8221;text&#8221; size=&#8221;10&#8243;<strong> id=&#8221;dateArrival&#8221; onClick</strong>=<strong>&#8220;popUpCalendar(this, form1.dateArrival, &#8216;dd/mm/yyyy&#8217;);&#8221;</strong>&gt;</p>
</blockquote>
<p style="text-align: justify;">Pues bien, ¿qué hicimos aquí?</p>
<ul style="text-align: justify;">
<li>Cambiamos el id a <strong>dateArrival</strong> para que reconozca el id correspondiente al calendario para estilizar la etiqueta.</li>
<li>Añadimos el atributo <strong>onClick</strong> que le dice al formulario: <em>&#8220;Cuando se haga click, ejecute esto&#8221;</em> y ejecutará la función <strong>popUpCalendar</strong> de la librería, enviando como parámetro el nombre del formulario <em>(form1 que viene por defecto, si lo han cambiado deben modificar aquí)</em> y el formato de la fecha <em>(en este caso dimos un formato día/mes/año, con 2 dígitos para el día, 2 dígitos para el mes y 4 dígitos para el año</em>.<em> Pueden modificarlo como lo necesiten</em>).</li>
</ul>
<p style="text-align: justify;">Una vez que hemos hecho las ediciones, guardamos el archivo y probamos todo. Al hacer click en el campo, nos mostrará el calendario con las fechas correspondientes, parecido a este:</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-1712" title="calendario" src="http://www.comolohago.cl/wp-content/uploads/2009/08/calendario.jpg" alt="calendario" width="258" height="142" /></p>
<p style="text-align: justify;">Simple, ¿no? Ahora podemos añadir una atractiva funcionalidad que sera muy útil tanto para nuestros usuarios como para nosotros al momento de manipular los datos.</p>
<p style="text-align: justify;">Es común que al implementar el calendario no resulte la primera vez, les recomendamos fijarse en la etiqueta del formulario, que las comillas esten bien definidas, eso es un problema común.</p>
<p style="text-align: justify;">Adicionalmente, si necesitamos implementar más de un calendario en la misma página podemos hacerlo de la misma forma, solo asegurándonos de cambiar el atributo <strong>id</strong> de la etiqueta para que no sea el mismo.</p>
<p style="text-align: justify;">Con esto damos por terminado este tutorial, esperamos que sea de utilidad y agrado de Uds.</p>
<p style="text-align: justify;">Y recuerden que como siempre, esto ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.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;">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/2009/08/04/como-anadir-un-calendario-a-tus-formularios/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
		</item>
		<item>
		<title>Cómo crear un menu desplegable para Web</title>
		<link>http://www.comolohago.cl/2009/05/21/como-crear-un-menu-desplegable-para-web/</link>
		<comments>http://www.comolohago.cl/2009/05/21/como-crear-un-menu-desplegable-para-web/#comments</comments>
		<pubDate>Thu, 21 May 2009 08:52:38 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=425</guid>
		<description><![CDATA[
Debo reconocerlo: Siempre he sido un fan acérrimo de los desarrollos Web. Y como tal, siempre me gusta estar buscando nuevas herramientas y utilidades para añadir a nuevos proyectos. Una de las cosas que más me gusta de cada nuevo desarrollo es la creación de los menús, algo que sin duda forma gran parte de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3361/3551191434_4db78596f1.jpg?v=0" alt="" width="400" height="197" /></p>
<p style="text-align: justify;">Debo reconocerlo: Siempre he sido un fan acérrimo de los desarrollos Web. Y como tal, siempre me gusta estar buscando nuevas herramientas y utilidades para añadir a nuevos proyectos. Una de las cosas que más me gusta de cada nuevo desarrollo es la creación de los menús, algo que sin duda forma gran parte de la estructura visual de lo que haremos.</p>
<p style="text-align: justify;">Dentro de los menús, sin duda que los desplegables son de los más funcionales que podamos utilizar. Esto se debe a que nuestros proyectos, ya sean simples sitios Web, Blogs o Sistemas, normalmente cuentan con una serie de secciones, las cuales son más fáciles de acomodar mediante un buen menú desplegable con secciones y sub-secciones.</p>
<p style="text-align: justify;">Para el desarrollo de estos menús existen varias alternativas: Software que construye menús en Flash o DHTML, librerías, frameworks de CSS y más. Hoy en CLH, mediante un sencillo tutorial, les enseñaremos a construir un menú desplegable simple, funcional y atractivo graficamente, con el uso de algunas librerías fáciles de implementar.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-425"></span></p>
<h1 style="text-align: center;">Cómo crear un menú desplegable para Web</h1>
<p style="text-align: justify;">Para el desarrollo de este tutorial, nos basaremos en un framework de Javascript, de lado cliente, llamado Ext, el cual presenta una serie de interesantes funcionalidades que esperamos cubrir a fondo en próximos tutoriales.</p>
<p style="text-align: justify;">Así que como siempre, lo primero:</p>
<h2>Implementos necesarios:</h2>
<ol>
<li>Las librerías correspondientes al framework, que pueden descargar desde nuestro <a href="http://www.comolohago.cl/uploads/menu.zip" target="_blank">sitio Web</a>.</li>
<li>Un editor Web. CLH utiliza y recomienda <a href="http://www.adobe.com/es/products/dreamweaver/" target="_blank">Adobe Dreamweaver</a>.</li>
</ol>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">1.- Luego de descargar las librerías, procedemos a descomprimirlo en algún lugar de nuestro computador.</p>
<p style="text-align: justify;">2.- Al descomprimir deberíamos tener <strong>menu.css, menu.js, examples.css, ext-core.js y ext-core-debug.js</strong> además de un directorio con imágenes que utilizaremos.</p>
<p style="text-align: justify;">3.- Con todo eso listo, ahora crearemos un archivo HTML en donde formaremos nuestro menú. Vamos a nuestro editor Web favorito e insertamos el siguiente código:</p>
<blockquote>
<p style="text-align: justify;">&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01//EN&#8221; &#8220;http://www.w3.org/TR/html4/strict.dtd&#8221;&gt;<br />
&lt;html lang=&#8221;en&#8221;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=utf-8&#8243; /&gt;<br />
&lt;title&gt;CLH&lt;/title&gt;<br />
<em><strong>/* Llamamos a las hojas de estilo que utilizaremos */</strong></em><br />
&lt;link href=&#8221;examples.css&#8221; rel=&#8221;stylesheet&#8221; /&gt;<br />
&lt;link href=&#8221;menu.css&#8221; rel=&#8221;stylesheet&#8221; /&gt;</p>
<p><em><strong>/* Ahora llamamos a las librerías JS del framework ext3 que utilizaremos en la creación del menú  y añadimos el script correspondiente que se encargará de los &#8216;despliegues&#8217; del menú. */</strong><strong></strong></em></p>
<p style="text-align: justify;">&lt;script src=&#8221;ext-core-debug.js&#8221;&gt;&lt;/script&gt;<br />
&lt;script src=&#8221;menu.js&#8221;&gt;&lt;/script&gt;</p>
<p>&lt;script&gt;<br />
Ext.onReady(function() {<br />
new Ext.ux.Menu(&#8217;simple-horizontal-menu&#8217;, {<br />
transitionType: &#8217;slide&#8217;,<br />
direction: &#8216;horizontal&#8217;, // default<br />
delay: 0.2,              // default<br />
autoWidth: true,         // default<br />
transitionDuration: 0.3, // default<br />
animate: true,           // default<br />
currentClass: &#8216;current&#8217;  // default<br />
});</p>
<p>});<br />
&lt;/script&gt;<br />
&lt;style&gt;<br />
.ux-menu a.current {<br />
background-image: url(&#8216;imagenes/menu-item-bg-current.png&#8217;);<br />
border-color: #cbc0b7;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
<em><strong>/* Damos un título a nuestro menú y lo conformamos con una lista no ordenada y un listado de ítems. La lista no ordenada referenciará al id &#8217;simple-horizontal-menu&#8217; definido por defecto en las hojas de estilo, el cual se encargará de dar los toques necesarios al menú. Podemos ir reemplazando las secciones y subsecciones según nos acomode */</strong></em><br />
&lt;h3&gt;Cómo Lo Hago&lt;/h3&gt;<br />
&lt;ul id=&#8221;simple-horizontal-menu&#8221;&gt;<br />
&lt;li&gt;<br />
&lt;a href=&#8221;#&#8221;&gt;Nosotros&lt;/a&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Quienes Somos&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;<br />
&lt;a href=&#8221;#&#8221;&gt;Historia&lt;/a&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Principio&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Medio&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Final&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Créditos&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Tutoriales&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;<br />
&lt;a href=&#8221;#&#8221;&gt;Categorías&lt;/a&gt;<br />
&lt;ul&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Computación&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Diseño&lt;/a&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Manualidades&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=&#8221;#&#8221;&gt;Contacto&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</p>
</blockquote>
<p style="text-align: justify;">4.- Ejecutamos en nuestro navegador favorito y podemos disfrutar de nuestro menú desplegable horizontal.</p>
<p style="text-align: justify;">Algunas notas adicionales:</p>
<p style="text-align: justify;">a) Este menú está basado en un framework llamado ext3, el cual ofrece una serie de funcionalidades, así como modificaciones a este ejemplo. Como todos los ejemplos de diseño Web, partimos enseñando lo más básico pero los incentivamos a indagar más a fondo. En futuros tutoriales iremos viendo otros ejemplos y como hacer desarrollos más personalizados.</p>
<p style="text-align: justify;">b) El estilo del menú es por defecto. Si quieren realizar cambios a los colores o imagenes utilizadas, les recomendamos revisar las hojas de estilo <em>(de extensión CSS)</em> y el directorio imágenes.</p>
<p style="text-align: justify;">Fácil y bonito ¿no?. Como ven, ya no es necesario desgastarse y revisar líneas y líneas de código para disfrutar de un recurso Web útil e impresionante para nuestros visitantes.</p>
<p style="text-align: justify;">Como siempre, recuerden que este tutorial ha sido:</p>
<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario, pueden 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;">
<p style="text-align: justify;">
<p style="text-align: justify;">
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/05/21/como-crear-un-menu-desplegable-para-web/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Cómo validar campos de un formulario mediante Javascript</title>
		<link>http://www.comolohago.cl/2009/02/26/como-validar-campos-de-un-formulario-mediante-javascript/</link>
		<comments>http://www.comolohago.cl/2009/02/26/como-validar-campos-de-un-formulario-mediante-javascript/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 23:31:30 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Diseño Web]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=347</guid>
		<description><![CDATA[
Hoy en día, es muy común utilizar una serie de formularios en nuestros sitios Web. Ya sea para establecer canales formales de contacto, o si necesitamos autentificar usuarios para acceder a los contenidos o simplemente para distintas funcionalidades que podamos ofrecer, sin duda que es la herramienta más útil, sencilla y conocida que hay.
Un aspecto [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3084/2922312807_c34c6907f9.jpg?v=0" alt="" width="398" height="345" /></p>
<p style="text-align: justify;">Hoy en día, es muy común utilizar una serie de formularios en nuestros sitios Web. Ya sea para establecer canales formales de contacto, o si necesitamos autentificar usuarios para acceder a los contenidos o simplemente para distintas funcionalidades que podamos ofrecer, sin duda que es la herramienta más útil, sencilla y conocida que hay.</p>
<p style="text-align: justify;">Un aspecto importante de estos formularios es que los usuarios ingresen los datos solicitados para que podamos operar con ellos. Si bien una vez que envían esta información podemos validarla al momento de ser procesada, esto muchas veces causa recargas innecesarias en el servidor y es por eso que es mucho mejor hacer la validación antes de que sea enviada y así cargar el contenido siguiente solo si es necesario.</p>
<p style="text-align: justify;">Hoy les enseñaremos una sencilla validación mediante Javascript.</p>
<p style="text-align: justify;">Todo el detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-347"></span></p>
<h1 style="text-align: center;">Cómo validar campos de un formulario mediante Javascript</h1>
<p style="text-align: justify;">
<h2>Implementos necesarios:</h2>
<ol>
<li style="text-align: justify;">Un editor Web <em>(recomendamos y utilizamos Adobe Dreamweaver)</em>. Si no poseen, pueden escribir el código en algún editor de texto como block de notas.</li>
</ol>
<p>Con todo eso claro, vamos, manos a la obra:</p>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">1.- Lo primero que haremos será crear un nuevo archivo HTML, en donde incluiremos un formulario y definiremos una función en Javascript que se encargará de la validación.</p>
<p style="text-align: justify;">2.- En nuestro HTML, creamos un formulario, el cual contendrá 3 campos:</p>
<ul>
<li style="text-align: justify;">Un campo de texto para ingresar el nombre.</li>
<li style="text-align: justify;">Un campo de texto para ingresar la edad.</li>
<li style="text-align: justify;">Una lista desplegable indicando el motivo del contacto.</li>
</ul>
<p style="text-align: justify;">Adicionalmente añadiremos un botón para el envío de datos. El código del formulario es el siguiente:</p>
<blockquote>
<p style="text-align: justify;">&lt;form name=&#8221;form1&#8243; action=&#8221;pagina-de-destino.html&#8221;&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Nombre: &lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;text&#8221; name=&#8221;nombre&#8221; size=&#8221;30&#8243; maxlength=&#8221;100&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Edad: &lt;/td&gt;<br />
&lt;td&gt;&lt;input type=&#8221;text&#8221; name=&#8221;edad&#8221; size=&#8221;3&#8243; maxlength=&#8221;2&#8243;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;Motivo:&lt;/td&gt;<br />
&lt;td&gt;<br />
&lt;select name=motivo&gt;<br />
&lt;option value=&#8221;Seleccionar&#8221;&gt;Seleccionar<br />
&lt;option value=&#8221;General&#8221;&gt;Contacto General<br />
&lt;option value=&#8221;Tecnico&#8221;&gt;Problemas Técnicos<br />
&lt;option value=&#8221;Sugerencias&#8221;&gt;Sugerencias<br />
&lt;/select&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td colspan=&#8221;2&#8243; align=&#8221;center&#8221;&gt;&lt;input type=&#8221;button&#8221; value=&#8221;Enviar&#8221; onclick=&#8221;validar_formulario()&#8221;&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/form&gt;</p></blockquote>
<p style="text-align: justify;">Como podemos apreciar, el código es el estándar de un formulario como los que hemos hecho en otros tutoriales. Sin embargo, en la etiqueta HTML correspondiente al botón de envío hemos agregado un nuevo atributo llamado <strong>onclick</strong>, el cual cumple la función de que cuando se presione el botón en vez de cargar una página, llamará a una función Javascript de nombre <strong>validar_formulario()</strong></p>
<p>3.- A continuación, añadiremos la función en Javascript que realizará la validación. El código es el siguiente, el cual debemos insertarlo entre las etiquetas &lt;head&gt; y &lt;/head&gt;. Los comentarios van en negrita, cursiva y entre /* y */:</p>
<blockquote><p>&lt;script&gt; <em><strong>/* Abrimos etiqueta de código */</strong></em><br />
function validar_formulario(){ <em><strong>/* Abrimos la función validar_formulario */</strong></em><br />
<em><strong>/* Partimos por validar que se haya ingresado un valor para el nombre, esto lo hacemos mediante un if y preguntamos si el campo es igual a 0, si es así, desplegamos un mensaje para que se ingrese el nombre y volvemos al formulario. */</strong></em><br />
if (document.form1.nombre.value.length==0){<br />
alert(&#8220;Debe ingresar su nombre&#8221;)<br />
document.form1.nombre.focus()<br />
return 0;<br />
}</p>
<p><em><strong>/* Luego validamos la edad, viendo si se ingresa una mayor a 18 años. Asignamos primero a una variable el valor ingresado y luego comprobando que no este vacío y que cumpla el requerimiento. También llamaremos a una función validarEntero que definiremos en el siguiente paso, dándole como parámetro la edad ingresada. Esta función realizará las validaciones necesarias para definir si es un dato numérico. */</strong></em><br />
edad = document.form1.edad.value<br />
edad = validarEntero(edad)<br />
document.form1.edad.value=edad<br />
if (edad==&#8221;"){<br />
alert(&#8220;Debe ingresar su edad.&#8221;)<br />
document.form1.edad.focus()<br />
return 0;<br />
}else{<br />
if (edad&lt;18){<br />
alert(&#8220;Debe ser mayor de 18&#8243;)<br />
document.form1.edad.focus()<br />
return 0;<br />
}<br />
}</p>
<p><em><strong>/* Finalmente, validamos el motivo del contacto */</strong></em><br />
if (document.form1.motivo.selectedIndex==0){<br />
alert(&#8220;Debe seleccionar un motivo de su contacto.&#8221;)<br />
document.form1.interes.focus()<br />
return 0;<br />
}</p>
<p><em><strong>/* Si paso todas las validaciones, desplegamos un mensaje de éxito y enviamos el formulario */</strong></em><br />
alert(&#8220;Los datos fueron ingresados correctamente y seran enviados&#8221;);<br />
document.form1.submit();<br />
}<br />
&lt;/script&gt;</p></blockquote>
<p style="text-align: justify;">4.- A continuación de la función anterior, crearemos otra función que realizará una conversión del dato ingresado para la edad a entero y comprueba si lo que se ingresó es realmente un valor numérico:</p>
<blockquote>
<p style="text-align: justify;">function validarEntero(valor){<br />
<em><strong>/* Mediante parseInt intentaremos transformar el valor a número entero. Si el dato fue ingresado bien y ya lo era, no hará nada */</strong></em><br />
valor = parseInt(valor)</p>
<p><em><strong>/* Se comprobará si el valor es un número */</strong></em><br />
if (isNaN(valor)) {<br />
<em><strong>/* Si no lo es, se devuelve una cadena vacía */</strong></em><br />
return &#8220;&#8221;<br />
}else{<br />
<em><strong>/* De lo contrario se devuelve el número */</strong></em><br />
return valor<br />
}<br />
}</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;">Y con ese procedimiento tenemos una sencilla validación activada para nuestro formulario. De esta forma, nos aseguraremos de que los datos enviados estén siempre correctos y no sobrecargaremos a nuestro servidor procesando datos que puedan estar nulos o incorrectos. Es sin duda muy útil.</p>
<p style="text-align: justify;">Como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;">
<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/02/26/como-validar-campos-de-un-formulario-mediante-javascript/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Cómo mejorar tu sitio Web mediante JavaScript</title>
		<link>http://www.comolohago.cl/2008/09/28/como-mejorar-tu-sitio-web-mediante-javascript/</link>
		<comments>http://www.comolohago.cl/2008/09/28/como-mejorar-tu-sitio-web-mediante-javascript/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 05:31:56 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Diseño Web]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=186</guid>
		<description><![CDATA[

No, no se ofendan. Con el título de este tutorial no pretendemos decirles que sus sitios sean malos o algo por el estilo, pero un aspecto que todo Webmaster debe tener en cuenta es que siempre se puede mejorar.
Con JavaScript disponemos de un poderoso lenguaje que nos permite añadir muy buenas funcionalidades a nuestras páginas [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3040/2893398279_a5a185ecf0.jpg?v=0" alt="" width="250" height="300" /></p>
<p style="text-align: center;">
<p style="text-align: justify;">No, no se ofendan. Con el título de este tutorial no pretendemos decirles que sus sitios sean malos o algo por el estilo, pero un aspecto que todo Webmaster debe tener en cuenta es que siempre se puede mejorar.</p>
<p style="text-align: justify;">Con JavaScript disponemos de un poderoso lenguaje que nos permite añadir muy buenas funcionalidades a nuestras páginas Web con solo unas pocas líneas de código. En el tutorial de hoy, les traemos algunos sencillos trucos que nos ayudarán a obtener esa funcionalidad que tanto buscamos.</p>
<p style="text-align: justify;">Todo el detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-186"></span></p>
<p style="text-align: justify;">
<h1 style="text-align: center;">Cómo mejorar tu sitio Web mediante JavaScript</h1>
<p style="text-align: justify;"><strong>Nota:</strong> El propósito de este artículo no es entrar en detalle sobre que es JavaScript ni detallar su funcionamiento. Lo que intentamos es entregar algunos pequeños códigos para que puedan insertarlos en sus sitios y saber que es lo que hace cada uno de ellos.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Con ese aviso, vamos de lleno a este tutorial. La verdad es que para el desarrollo no necesitaremos materiales especiales, a lo más un editor Web (como Dreamweaver o NVU) o simplemente un editor de texto (como Block de Notas) para insertar los códigos.</p>
<h2>Contenidos:</h2>
<p style="text-align: justify;">En resumen, hoy veremos:</p>
<ol>
<li style="text-align: justify;">Crear un link para que añadan nuestro sitio a Favoritos.</li>
<li style="text-align: justify;">Que dejen nuestro sitio como página de inicio.</li>
<li style="text-align: justify;">Abrir una ventana emergente.</li>
<li style="text-align: justify;">Evitar doble envío de formularios.</li>
<li style="text-align: justify;">Marcar/desmarcar todos los checkboxes de un formulario.</li>
<li style="text-align: justify;">Redirigir de acuerdo a la resolución de pantalla del usuario.</li>
<li style="text-align: justify;">Imprimir la página.</li>
</ol>
<p>Así que con los contenidos ya definidos, vamos manos a la obra:</p>
<p style="text-align: justify;">
<h2>Procedimiento:</h2>
<p style="text-align: justify;"><strong>1.- Añadir sitio a Favoritos:</strong> Este pequeño truco nos sirve para crear un vínculo (mediante texto o imagen) para que nuestros visitantes le hagan click y automáticamente añadan nuestra página a Favoritos. El código es bastante sencillo, y es como sigue:</p>
<p style="text-align: justify;">
<blockquote>
<pre>&lt;a href="javascript:window.external.AddFavorite('http://www.ejemplo.com','Titulo del

sitio');"&gt;Agregar a favoritos&lt;/a&gt;</pre>
</blockquote>
<p style="text-align: justify;">Solo deben cambiar la URL por la suya y el &#8220;Título del Sitio&#8221; por el que corresponda. Además si desean, el texto Agregar a favoritos pueden reemplazarlo por una imagen.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>2.- Página de Inicio: </strong>Otra manera de crear lealtad con nuestros usuarios es otorgarles la posibilidad de dejar nuestro sitio como página de inicio, para que cada vez que abran su navegador, cargue nuestro sitio directamente. Esto se hace añadiendo el siguiente código, el cual creará un vínculo para que cuando hagan click se establezca la página de inicio:</p>
<p style="text-align: justify;">
<blockquote>
<pre style="text-align: justify;">&lt;a href="http://www.ejemplo.com#" class="chlnk"

onclick="this.style.behavior='url(#default#homepage)';

this.setHomePage('http://www.ejemplo.com');"

style="cursor: hand"&gt; Haznos tu página de inicio&lt;/a&gt;</pre>
</blockquote>
<p style="text-align: justify;"><strong>3.- Abrir una ventana emergente: </strong>También conocidos como <em>&#8220;pop-ups&#8221;</em>. A pesar de lo odiosos que pueden ser, tienen una cierta utilidad para algunos contenidos que queramos desplegar. Para abrir ventanas emergentes, debemos primero insertar la siguiente función entre las etiquetas &lt;head&gt; y &lt;/head&gt;:</p>
<blockquote>
<pre>&lt;script language="JavaScript"&gt;</pre>
<pre>  function Abrir_ventana (pagina) {</pre>
<pre>var opciones="toolbar=no, location=no, directories=no, status=no,
menubar=no, scrollbars=no, resizable=yes, width=508, height=365,
top=85, left=140";</pre>
<pre>  window.open(pagina,"",opciones);</pre>
<pre>  }</pre>
<pre>  &lt;/script&gt;</pre>
</blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;">En esta función podemos editar varios parámetros de la ventana a abrir, como por ejemplo si tendra barra de estado, su ancho, alto, si tendra scrollbar, etc. Ahí podrán ajustar dependiendo de la necesidad que tengan. Luego para hacer uso de esa función, en los vínculos desde donde las llamaremos ponemos:</p>
<blockquote>
<pre>&lt;a href="javascript:Abrir_ventana('popup.html')"&gt;Abrir la
ventana&lt;/a&gt;</pre>
</blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;">Donde popup.html es la página que se abrirá en la ventana emergente.</p>
<p style="text-align: justify;"><strong>4.-Evitar el doble envío de formularios: </strong>Cuando tenemos formularios en nuestro sitio (contacto, registro, etc), muchas veces ocurre que algunos usuarios por distintas razones realizan más de un click y se produce un doble envío. Para prevenirlo, debemos partir por insertar la siguiente función entre las etiquetas &lt;head&gt; y &lt;/head&gt;:</p>
<blockquote>
<pre>&lt;script LANGUAGE="JavaScript"&gt;</pre>
<pre>    &lt;!--</pre>
<pre>    var cuenta=0;</pre>
<pre>    function enviado() {</pre>
<pre>    if (cuenta == 0)</pre>
<pre>    {</pre>
<pre>    cuenta++;</pre>
<pre>    return true;</pre>
<pre>    }</pre>
<pre>    else</pre>
<pre>    {</pre>
<pre>    alert("El formulario ya está siendo enviado, por favor aguarde un instante.");</pre>
<pre>    return false;</pre>
<pre>    }</pre>
<pre>    }</pre>
<pre>    // --&gt;</pre>
<pre>    &lt;/script&gt;</pre>
</blockquote>
<p style="text-align: justify;">Y luego en las propiedades del formulario añadimos la parte de &#8216;onSubmit&#8221; del siguiente código, tal como se muestra:</p>
<blockquote>
<pre>&lt;form method="POST" action="proceso.php"
  <strong>onSubmit="return enviado()"</strong>&gt;</pre>
<pre>    ...</pre>
<pre>    &lt;input type="submit" value="Enviar"&gt;</pre>
<pre>    &lt;/form&gt;</pre>
</blockquote>
<p style="text-align: justify;"><strong>5.- Marcar/desmarcar todos los checkbox de un formulario:</strong> Cuando presentamos un formulario a los visitantes, en ocasiones les entregamos una serie de opciones que les dejamos marcar o desmarcar. Para esto es muy útil añadir un pequeño link para que los marquen o desmarquen todos si así lo desean. Para esto primero añadimos entre las etiqueas &lt;head&gt; y &lt;/head&gt;:</p>
<blockquote>
<pre>&lt;SCRIPT LANGUAGE = "JavaScript"&gt;</pre>
<pre>    &lt;!--</pre>
<pre>    function modificar_boxes(chequear,cantidad){</pre>
<pre>    for (i=0; i &lt; cantidad ; i++ ){</pre>
<pre>    if (chequear){</pre>
<pre>    document.forms[0].opcion[i].checked=true;</pre>
<pre>    }else{</pre>
<pre>    document.forms[0].opcion[i].checked=false;</pre>
<pre>    } }}</pre>
<pre>    --&gt;</pre>
<pre>            &lt;/SCRIPT&gt;</pre>
</blockquote>
<p style="text-align: justify;">Y luego en el formulario luego de que añadimos los checkboxes, añadimos lo siguiente:</p>
<blockquote>
<pre>&lt;INPUT TYPE=button NAME="marcar" VALUE="Marcar todos"
    onClick="modificar_boxes(true,3)"&gt;</pre>
<pre>    &lt;INPUT TYPE=button NAME="desmarcar" VALUE="Desmarcar todos"
    onClick="modificar_boxes(false,3)"&gt;</pre>
</blockquote>
<p style="text-align: justify;"><strong>6.- Redirigir de acuerdo a la resolución de pantalla del usuario:</strong> Cuando construimos un sitio Web, un aspecto importante a tener en cuenta es la resolución de pantalla de los visitantes. Siempre se ha pensado en un estandar de 1024&#215;768 pero hoy en día muchos usuarios tienen resoluciones mayores y en algunos casos menores, por lo que es una buena opción tener distintas modalidades de nuestro Sitio y redirigirlos de acuerdo a la que tienen. Primero debemos añadir entre las etiquetas &lt;head&gt; y &lt;/head&gt;:</p>
<blockquote>
<pre>&lt;script LANGUAGE="JavaScript"&gt;</pre>
<pre>function redireccionar() {</pre>
<pre>var url640x480 = "http://www.tu-sitio.com/640x480";</pre>
<pre>var url800x600 = "http://www.tu-sitio.com/800x600";</pre>
<pre>var url1024x768 = "http://www.tu-sitio.com/1024x768";</pre>
<pre>if ((screen.width == 640) &amp;&amp; (screen.height == 480))</pre>
<pre>window.location.href= url640x480;</pre>
<pre>else if ((screen.width == 800) &amp;&amp; (screen.height == 600))</pre>
<pre>window.location.href= url800x600;</pre>
<pre>else if ((screen.width == 1024) &amp;&amp; (screen.height == 768))</pre>
<pre>window.location.href= url1024x768;</pre>
<pre>else window.location.href= url640x480;</pre>
<pre>}</pre>
<pre>&lt;/script&gt;</pre>
</blockquote>
<p style="text-align: justify;">Ahí podemos modificar de acuerdo a las resoluciones que deseemos soportar. Y luego modificamos la etiqueta &lt;body&gt; dejandola así:</p>
<blockquote>
<pre>&lt;body onLoad="redireccionar()"&gt;</pre>
</blockquote>
<p style="text-align: justify;"><strong>7.- Imprimir la página:</strong> Para el final dejamos un truco bastante sencillo, el cual nos permitirá entregarle a los usuarios la utilidad de que impriman la página actual, mediante el siguiente código:</p>
<blockquote>
<pre>&lt;a
href="javascript:print()"&gt;Imprimir&lt;/a&gt;</pre>
</blockquote>
<p style="text-align: justify;">Con eso podrán imprimir el resultado de alguna información que les presentemos.</p>
<p style="text-align: justify;">Con ese último truco terminamos este tutorial por hoy. En una próxima oportunidad iremos presentandoles algunas otras cosas interesantes para que vayan implementando en sus sitios y hacerlos cada vez más cómodos y completos para sus visitantes.</p>
<p style="text-align: justify;">Como siempre este tutorial ha sido desarrollado, probado y documentado por el equipo de Como Lo Hago, por lo que cuenta con nuestro <strong>Sello de Garantía.</strong> Cualquier duda, problema o comentario que puedan tener, pueden 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: justify;">
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2008/09/28/como-mejorar-tu-sitio-web-mediante-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

