<?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; PHP</title>
	<atom:link href="http://www.comolohago.cl/category/diseno-web/php/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 crear un formulario de contacto &#8211; Versión 2.0</title>
		<link>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/</link>
		<comments>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/#comments</comments>
		<pubDate>Sun, 30 May 2010 02:16:33 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[formulario de contacto]]></category>

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

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

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

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

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

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

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

#container {

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

}

#formulario {

 padding: 1em;

}

#formulario fieldset {

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

}

#formulario label {

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

}

#formulario input[type=text], textarea {

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

}

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

 background: #f5f2c9;

}

#formulario input[type=submit] {

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

}

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

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

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

 var valor;
 var i = 0;

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

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

 });

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

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

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

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

 });

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

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

 });

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

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

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

     if(valor != '') {

       if(validaCorreo(valor)){

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

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

 });

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

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

 });

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

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

 });

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

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

 });

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

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

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

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

 });

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

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

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

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

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

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

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

           }
       });

       return false;

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

 });

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

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

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

 /* Recepcionamos los datos enviados asincrónicamente */

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

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

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

 /* Definimos el formato del mensaje a enviar */

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

 /* Definimos las cabeceras del mensaje */

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

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

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

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

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

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3455</guid>
		<description><![CDATA[
¿Cuántas veces nos hemos encontrado con la siguiente situación?:
Nuestro plan de telefonía móvil nos entrega X cantidad de minutos a la Compañía 1, Y cantidad de minutos a la Compañía 2 y Z cantidad de minutos a la compañía 3. Agotamos una de las opciones y necesitamos hacer una llamada urgente, pero empezamos a pensar [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4011/4590072739_edb6b4e49c_o.png" alt="" width="450" height="177" /></p>
<p style="text-align: justify;">¿Cuántas veces nos hemos encontrado con la siguiente situación?:</p>
<p style="text-align: justify;">Nuestro plan de telefonía móvil nos entrega X cantidad de minutos a la Compañía 1, Y cantidad de minutos a la Compañía 2 y Z cantidad de minutos a la compañía 3. Agotamos una de las opciones y necesitamos hacer una llamada urgente, pero empezamos a pensar <em>¿Y si es de los minutos que ya no me quedan? Me cobrarán extra o no podré hacer la llamada</em>. Y ante la duda, una oportunidad pasa.</p>
<p style="text-align: justify;">Hoy en Internet es posible encontrar algunas aplicaciones que nos permiten reconocer la compañía a la que pertenece un número móvil. Sin embargo,  algunas de ellas presentan requisitos específicos o son de licencia comercial, lo que no las hace accesibles para cualquier persona.</p>
<p style="text-align: justify;">Pero que no panda el cúnico amigos nuestros, que hoy en CLH, mediante un realmente simple y rápido tutorial <em>(siempre lo decimos, pero este en verdad es muy simple)</em>, les enseñaremos a construir un identificador de teléfonos móviles de forma gratuita y en la comodidad de su hogar.</p>
<p style="text-align: justify;">¿Qué hacer? Solo seguirnos después del salto <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;"><span id="more-3455"></span></p>
<p style="text-align: justify;">
<h1 style="text-align: center;">Cómo crear un identificador de teléfonos móviles</h1>
<p style="text-align: justify;">
<blockquote>
<h2 style="text-align: justify;"><img class="alignnone" src="http://www.comolohago.cl/wp-content/uploads/2010/03/search_page.png" alt="" width="27" height="27" />Detalles del tutorial</h2>
<ul style="text-align: justify;">
<li><strong>Tiempo  aproximado de implementación: </strong>30 minutos.</li>
<li><strong>Dificultad:</strong> Básico.</li>
</ul>
<h2 style="text-align: justify;"><img class="alignnone size-full    wp-image-3161" title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" width="27" height="27" />Implementos necesarios:</h2>
<ul style="text-align: justify;">
<li><span lang="ES-CL"><span style="font-size: small;">Un servidor Web que ejecute archivos PHP y un sistema de gestión de bases de datos MySQL <em>(Recomendamos <a href="http://www.apachefriends.org/en/xampp.html" target="_blank">XAMPP</a>)</em>.</span></span></li>
<li><span lang="ES-CL"><span style="font-size: small;">La base de numeración telefónica móvil publicada por la Subtel. Pueden descargarla en formato PDF desde el <a href="http://www.subtel.cl/prontus_subtel/site/artic/20061230/asocfile/20061230210846/base_numeracion_oct09.pdf" target="_blank">siguiente enlace</a>.</span></span></li>
<li><span lang="ES-CL"><span style="font-size: small;">Un editor para la codificación <em>(Recomendamos <a href="http://notepad-plus.sourceforge.net/es/site.htm" target="_blank">Notepad++</a>)</em>.</span></span></li>
</ul>
<p><strong>Notas sobre el proceso:</strong></p>
<p style="text-align: justify;">Probablemente en este punto se preguntarán: ¿Cómo funciona esto? Bastante sencillo. La Subsecretaría de Telecomunicaciones en Chile define una serie de prefijos los cuales son asignados en rangos a las distintas compañías que entregan servicios de telefonía móvil. Estos prefijos están compuestos por <strong>4 dígitos</strong> y van desde el 6200 hasta el 9999.</p>
<p style="text-align: justify;">Ahora, ¿qué tienen que ver estos prefijos? Son ellos los que forman la primera mitad de nuestros números de teléfonos móviles. En consecuencia, cada prefijo tiene 4 dígitos más que forman un número único completo. Si nuestras matemáticas no fallan, podemos deducir que eso significa que existe un total de 9999 números de teléfonos móviles únicos por cada prefijo. Considerando que son 3799 prefijos en total, en Chile tenemos 37.986.201 posibles combinaciones de números.</p>
<p style="text-align: justify;">¿Eso significa que eventualmente habrán 37 millones de celulares dando vuelta en el país?. Puede ser, pero de momento no, ya que como podrán fijarse en la base de numeración, hay prefijos asignados a compañías que actualmente no ofrecen servicios de telefonía móvil de libre acceso al público general&#8230; pero nunca se sabe. Adicionalmente, hay algunos rangos de prefijos que no están asignados, lo que deja un total 2620 prefijos y por ende 26.197.380 combinaciones. Pero eso es un dato anecdótico más que nada.</p>
<p style="text-align: justify;">Con esa información, ya tenemos la lógica clara para realizar nuestra aplicación, así que manos a la obra.</p>
</blockquote>
<p style="text-align: justify;">
<h2 style="text-align: justify;">Procedimiento:</h2>
<p style="text-align: justify;">1.- Lo primero que debemos hacer, y que es el paso más crítico, es transformar la base de numeración telefónica a un formato adecuado, ya que la que descargamos esta en formato PDF y no podremos acceder a ella de forma normal, así que nuestro objetivo es traspasarla a nuestra base de datos MySQL con el fin de poder consultarla mediante el script que desarrollaremos.</p>
<p style="text-align: justify;">Para esto tenemos varias opciones:</p>
<ul>
<li style="text-align: justify;">Podemos copiar el contenido de la base y traspasarlo a una planilla Excel, en la cual debemos eliminar las XXXX que aparecen en el campo suscriptor y solo mantener el prefijo y en otra columna la compañía a la que pertenece ese prefijo. Adicionalmente, es bueno que al menos para las tres compañías más conocidas, cambiemos sus nombres completos o razones sociales a nombres más amigables y reconocibles para el usuario <em>(por ej. ENTEL PCS TELECOMUNICACIONES S.A. a ENTEL PCS)</em>.</li>
<li style="text-align: justify;">Una vez que tenemos nuestro Excel armado con el formato que queremos, lo traspasamos a MySQL. ¿Dudas sobre como hacerlo? No se preocupen, en el pasado hemos hecho <a href="http://www.comolohago.cl/2009/05/24/como-importar-a-mysql-desde-excel/" target="_blank">un tutorial que cubre el proceso de forma completa</a>.</li>
</ul>
<p style="text-align: justify;">Pero, equipo de CLH, este proceso es largo y tedioso, ¿pueden echarnos una mano por favor?. Bueno, bueno, pero solo porque lo pidieron por favor. Si hacen click <a href="http://www.comolohago.cl/uploads/numeracion.sql" target="_blank">en este enlace</a>, pueden descargar la base de datos completa lista para importar a MySQL. Pero no le cuenten a nadie, ¿ya?.</p>
<p style="text-align: justify;">El archivo que les dejamos es un fiel reflejo de la base de datos que creamos, llamada<strong> moviles</strong>, la cual tiene una tabla llamada <strong>numeracion</strong>. Esta a su vez tiene 2 campos: <strong>prefijo</strong> (INT) y <strong>empresa</strong> (TEXT). Más sencillo imposible.</p>
<p style="text-align: justify;">2.- Ahora que hemos ordenado nuestros datos, podemos empezar a codificar lo que será nuestra pequeña aplicación. Para empezar, haremos un formulario el cual contendrá un campo de texto para que el usuario ingrese el número de teléfono móvil a consultar y un botón para enviar la consulta. Para esto, crearemos un archivo en formato PHP, llamado <strong>consulta.php</strong>, el cual contendrá además de lo anterior, un autollamado donde se ejecutará el script y consultaremos la base de datos. Pero primero, el formulario:</p>
<pre class="html" title="code">&lt;div id="formulario"&gt;
 &lt;form name="formulario-consulta" id="formulario-consulta" action="consulta.php" method="post"&gt;
 &lt;label for="numero"&gt;Ingrese el n&amp;uacute;mero a consultar:&lt;/label&gt;
 &lt;input type="text" name="numero" id="numero" /&gt;
 &lt;p&gt;&lt;input type="submit" id="submit" name="submit"
value="Consultar n&amp;uacute;mero" /&gt;
 &lt;/form&gt;
&lt;/div&gt;</pre>
<p style="text-align: justify;">3.- Luego de codificar nuestro formulario, procedemos a hacer el código PHP, el cual validará el número ingresado y luego hará cortará los primeros 4 caracteres de la cadena ingresada <em>(para igualarlo al prefijo)</em>, hará la consulta en la base de datos y desplegará el resultado de acuerdo a lo que se obtenga:</p>
<pre class="php" title="code">if($_POST) {

 if($_POST['numero'] == '') {

     $mensaje = "&lt;span id='error'&gt;Debe ingresar un n&amp;uacute;mero para
     consultar.&lt;/span&gt;";

 }
 else {

          if(!$conexion = mysqli_connect("localhost", "usuario", "clave", "bd")) {

              $mensaje = "&lt;span id='error'&gt;No se pudo conectar
              a la base de datos.&lt;/span&gt;";

          }
          else {

                     $numero = substr(trim($_POST['numero']), 0, 4);

                     $consulta = "SELECT empresa FROM numeracion WHERE prefijo = ".$numero;

                     if($resultado = mysqli_query($conexion, $consulta)) {

                           if(mysqli_num_rows($resultado) == 0) {

                               $mensaje = "&lt;span id='error'&gt;No hay coincidencias para el
                               n&amp;uacute;mero ".$_POST['numero'].".&lt;/span&gt;";

                           }
                           else {

                               $datos = mysqli_fetch_array($resultado, MYSQL_ASSOC);

                               $mensaje = "&lt;span id='exito'&gt;El n&amp;uacute;mero ".$_POST['numero']."
                               pertenece a ".$datos['empresa']."&lt;/span&gt;";

                           }

                     }
                     else {

                         $mensaje = "&lt;span id='error'&gt;Ocurri&amp;oacute; un error al ejecutar
                         la consulta. Int&amp;eacute;ntelo nuevamente.&lt;/span&gt;";

                      }

       }

    }

 }</pre>
<p style="text-align: justify;">
<p style="text-align: justify;">4.- El código en si es bastante autoexplicativo. Comprobamos primero si se enviaron datos, conectamos a la base de datos y ejecutamos la consulta. En cada paso creamos una variable llamada <strong>mensaje</strong>, la cual almacena información correspondiente al resultado de la operación. Este mensaje lo añadiremos al final del formulario para que le informe al usuario que sucedió:</p>
<pre class="php" title="code">&lt;div id="mensaje"&gt;&lt;?php 

       if(isset($mensaje)) {

          echo $mensaje;

        }

 ?&gt;&lt;/div&gt;</pre>
<p style="text-align: justify;">5.- De forma opcional, si así lo deseamos, podemos estilizar un poco esta pequeña aplicación, creando un archivo <strong>estilos.css</strong> y añadiéndolo a la cabecera de <strong>consulta.php</strong>:</p>
<pre class="css" title="code">#formulario {

 width: 450px;
 margin: 0 auto;
 font-family: Arial;
 font-size: 11px;
 border: solid 1px black;
 padding: 20px;
 background-color: #fac519;

}

#formulario-consulta {

 margin-left: 150px;

}

#submit {

 font-family: inherit;
 font-size: 11px;

}

label {
 display: block;
}

#mensaje {

 font-family: Arial;
 font-size: 11px;
 padding: 3px;
 border: 1px dashed black;

}

#exito {

 background-color: #6ad11b;

}

#error {

 background-color: #f51414;

}</pre>
<p style="text-align: justify;">
<p style="text-align: justify;">6.- Finalmente, nuestro consulta.php quedaría de la siguiente forma:</p>
<pre class="php" title="code">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
 &lt;link rel="stylesheet" href="estilos.css" /&gt;
 &lt;title&gt;Identificador de tel&amp;eacute;fonos m&amp;oacute;viles&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;?php
 if($_POST) {

 if(empty($_POST['numero'])) {

 $mensaje = "&lt;span id='error'&gt;Debe ingresar un n&amp;uacute;mero para consultar.&lt;/span&gt;";

 }
 else {

 if(!$conexion = mysqli_connect("localhost", "root", "dumbass", "movil")){

 $mensaje = "&lt;span id='error'&gt;No se pudo conectar a la base de datos.&lt;/span&gt;";

 }
 else {

 $numero = substr(trim($_POST['numero']), 0, 4);

 $consulta = "SELECT empresa FROM numeracion WHERE prefijo = ".$numero;

 if($resultado = mysqli_query($conexion, $consulta)) {

 if(mysqli_num_rows($resultado) == 0) {

 $mensaje = "&lt;span id='error'&gt;No hay coincidencias para el n&amp;uacute;mero ".$_POST['numero'].".&lt;/span&gt;";

 }
 else {

 $datos = mysqli_fetch_array($resultado, MYSQL_ASSOC);

 $mensaje = "&lt;span id='exito'&gt;El n&amp;uacute;mero ".$_POST['numero']." pertenece a ".$datos['empresa']."&lt;/span&gt;";

 }

 }
 else {

 $mensaje = "&lt;span id='error'&gt;Ocurri&amp;oacute; un error al ejecutar la consulta. Int&amp;eacute;ntelo nuevamente.&lt;/span&gt;";

 }

 }

 }

 }
 ?&gt;
 &lt;div id="formulario"&gt;
 &lt;form name="formulario-consulta" id="formulario-consulta" action="consulta.php" method="post"&gt;
 &lt;label for="numero"&gt;Ingrese el n&amp;uacute;mero a consultar:&lt;/label&gt;
 &lt;input type="text" name="numero" id="numero" /&gt;
 &lt;p&gt;&lt;input type="submit" id="submit" name="submit" value="Consultar n&amp;uacute;mero" /&gt;
 &lt;/form&gt;
 &lt;div id="mensaje"&gt;&lt;?php 

 if(isset($mensaje)) {

 echo $mensaje;

 }

 ?&gt;&lt;/div&gt;
 &lt;/div&gt;

 &lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">Probamos y todo debiese funcionar sin problemas.</p>
<p style="text-align: justify;">Y así de simple tenemos un identificador de números móviles para cuando lo necesitemos. Si nos fijamos, el proceso es bastante simple de implementar, por lo que los incentivamos a animarse, en solo minutos tendrán una muy útil aplicación para compartir.</p>
<p style="text-align: justify;"><strong>Notas antes del cierre:</strong></p>
<p style="text-align: justify;">1.- Para nuestros amigos de fuera del país, lamentablemente este proceso sirve para Chile. Sin embargo, nos imaginamos que afuera debe ser bastante similar, por lo que los invitamos a compartir sus experiencias con otros usuarios.</p>
<p style="text-align: justify;">Antes de terminar:</p>
<p style="text-align: justify;"><a href="http://www.comolohago.cl/uploads/moviles.rar" target="_blank"><img class="aligncenter" src="http://farm3.static.flickr.com/2749/4471629680_c89163fa14_o.png" alt="" width="279" height="105" border="0" /></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 que puedan tener, los invitamos a dejar un comentario 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/05/09/como-crear-un-identificador-de-telefonos-moviles/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Cómo crear una galería de imágenes para tu Web</title>
		<link>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/</link>
		<comments>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 18:41:56 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysql]]></category>

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

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

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

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

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

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

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

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

		&lt;/div&gt;

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

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

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

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

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

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

  &lt;?php }
  ?&gt;

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

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

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

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

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

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

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

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

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

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

	?&gt;

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

	&lt;?php }

	?&gt;

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

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

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

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

   }, function(){

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

  });

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

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

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

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

  }, function(){

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

  });

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

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

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

}

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

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

}

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

}

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

#imgcompleta{
	border: 1px solid white;
}

a img{
	border: none;
}

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

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

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2888</guid>
		<description><![CDATA[Hace algún tiempo publicamos un artículo con tips sobre como optimizar nuestros sitios Web. En esa ocasión recalcamos el hecho de que hubo algunos puntos que se nos escaparon o que queríamos profundizar de mejor manera, por lo que probablemente haríamos una nueva edición en el futuro. Bueno, el momento ha llegado, aunque no precisamente [...]]]></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" />Hace algún tiempo publicamos un artículo con tips sobre <a href="http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/" target="_blank">como optimizar nuestros sitios Web</a>. En esa ocasión recalcamos el hecho de que hubo algunos puntos que se nos escaparon o que queríamos profundizar de mejor manera, por lo que probablemente haríamos una nueva edición en el futuro. Bueno, el momento ha llegado, aunque no precisamente continuando el mismo tema, si no que algo relacionado. Hoy les traemos una segunda parte enfocada netamente a código, compuesta de consejos y buenas prácticas que nunca están demás, especialmente en estos momentos que casi todo lo que vemos en Web envuelve, aunque sea en una pequeña parte, programación.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2888"></span></p>
<h1 style="text-align: center;">Cómo optimizar tu código en 10 pasos</h1>
<p style="text-align: justify;">Al no haber implementos necesarios <em>(a excepción quizás de un editor Web)</em>, vamos de lleno al contenido:</p>
<p style="text-align: justify;">El siguiente tutorial está compuesto de un conjunto de consejos y buenas prácticas a la hora de programar. A pesar de que está orientado a Web, algunos puntos son aplicables a otro tipo de lenguajes en los que se puede extrapolar.</p>
<h2 style="text-align: justify;">1.- Reutilización de variables</h2>
<p style="text-align: justify;">En la programación, las variables en las que almacenamos datos tienen lo que llamamos un <em>&#8220;ciclo de vida&#8221;</em>: Desde su nacimiento <em>(el momento en el que las declaramos)</em> hasta su muerte <em>(última línea en que han sido utilizadas)</em>, toman distintos valores y forman parte de una serie de procesos que nos llevan a obtener resultados.</p>
<p style="text-align: justify;">Posterior a su último uso, estas variables permanecen sin prestar utilidad. A pesar de que muchos lenguajes tienen implementada una característica conocida como recolector de basura, el cual se encarga de desocupar o limpiar todas las áreas de memoria que se encuentran utilizadas pero inactivas, en muchas ocasiones esto no ocurre o existe un periodo durante la ejecución de un programa en que seguimos creando variables y vamos ocupando más y más áreas de memoria, lo que adicionalmente nos puede llevar a confusión con el nombre de las mismas.</p>
<p style="text-align: justify;">Es por esto que es recomendable, si vemos que hemos dejado de utilizar una variable en particular, reutilizarla, siempre y cuando no afecte el código donde las usamos originalmente. Por ejemplo, en vez de usar esto:</p>
<pre class="php" title="code">i=0;
while(i&lt;10)
{
    echo 'Hola mundo';
    i++;
}

j=0;
while(j&lt;10)
{
    echo 'Adios!';
    j++;
}</pre>
<p style="text-align: justify;">Podemos utilizar esto, obteniendo el mismo resultado de manera más óptima:</p>
<pre class="php" title="code">i=0;
while(i&lt;10)
{
    echo 'Hola mundo';
    i++;
}
while(i&gt;0)
{
    echo 'Adios!';
    i--;
}</pre>
<p style="text-align: justify;">No solo reutilizamos la misma variable para ejecutar ámbas tareas, sino que a su vez optimizamos el código, mejorando la ejecución final.</p>
<p style="text-align: justify;">Claramente es un ejemplo bastante básico, pero nos sirve para ilustrar el punto. A medida que nuestras aplicaciones van creciendo, necesitamos manipular una mayor cantidad de variables, por lo que puede volverse algo confuso de manejar. La reutilización nos sirve para tener un mejor control de lo que tenemos y al mismo tiempo nos permite hacer nuestro código mucho más simple.</p>
<h2 style="text-align: justify;">2.- Nombrar como corresponde</h2>
<p style="text-align: justify;">Escribir código es de cierta forma contar una historia. Desde la declaración o nacimiento de las variables, hasta lo que hace cada una de ellas hasta el final, tenemos actos claros y definidos que permiten a cualquiera con conocimientos de programación poder seguir la historia del principio hasta el término. Y como tal, es importante tener consistencia en lo que escribimos, con respecto al nombre que le damos a las variables y funciones que utilizamos.</p>
<p style="text-align: justify;">En lo anterior recalcamos un hecho muy importante: <strong>todo el código que escribamos será revisado por alguien</strong>. Ya sea otros programadores o bien nosotros mismos más adelante cuando queramos optimizar o reutilizar, siempre habrá alguien que deba hacer la traza del código y ver que hace cada cosa. Es por esto que es importante que mantengamos concordancia con respecto a los nombres y seguir una lógica que nos permita mantener un orden y claridad a futuro.</p>
<p style="text-align: justify;">Por ejemplo, si recibimos los datos de un usuario a través de un formulario, es bueno que las variables a las que asignemos valores tengan un prefijo definido <em>(por ejemplo usuario)</em>. De esta forma, cuando nos encontremos 30 líneas más abajo y necesitemos recurrir a ellas, ya sabremos bajo que estructura trabajamos y minimizaremos el margen de error.</p>
<p style="text-align: justify;">Existen 2 convenciones definidas para nombrar elementos a la hora de programar, que si bien no es obligación usarlas, si pueden servir en demasía:</p>
<ul>
<li><strong>camelCase:</strong> En esta, la primera letra de cada palabra nueva lleva mayúscula, a excepción de la primera. Ej: $usuarioClave o function devuelveDatos.</li>
<li><strong>underscore:</strong> En la cual cada palabra es separada por un underscore o <em>guión bajo</em>. Ej: $usuario_clave o function devuelve_datos.</li>
</ul>
<p style="text-align: justify;">Al programar somos libres de definir nuestras propias reglas para nombrar. No obstante, si estamos realizando trabajo colaborativo con otros programadores, es bueno utilizar alguna de las convenciones aceptadas, con el fin de estandarizar el trabajo y hacer todo más entendible para los demas. Lo importante es definir una estructura y un estándar que nos permita hacer más uniforme nuestro código y de esta forma hacerlo mucho más entendible.</p>
<h2 style="text-align: justify;">3.- Agrupar el código</h2>
<p style="text-align: justify;">Si tomamos cualquier programa que hayamos escrito en el pasado, podremos apreciar que dentro de el, hay pequeñas secciones de código relacionadas entre sí por las funciones o tareas que realizan y que pueden o no tener directa relación con lo que viene líneas más abajo. Por un tema de orden, y para facilitar la documentación <em>(punto que veremos más adelante)</em> es bueno ir agrupando estas secciones y separarlas del resto del código con una línea en blanco. De esta forma, cada vez que necesitemos modificar una porción del programa será mucho más sencillo aislarlas y trabajar sobre ellas, ya que sabremos exactamente en donde empieza y donde termina esa parte del programa.</p>
<p style="text-align: justify;">Por ejemplo, en un programa donde recibimos datos a través de un formulario, los insertamos en una base de datos y desplegamos el resultado al visitante:</p>
<pre class="php" title="code">$usuario_id = $_POST["usuario_id"];
$usuario_clave = $_POST["usuario_clave"];
$usuario_correo = $_POST["usuario_correo"];

$conexion = mysql_connect("localhost", "usuariobd", "clavebd");
mysql_select_db("mibd");

$consulta = "INSERT INTO usuarios VALUES('$usuario_id', '$usuario_clave',
'$usuario_correo')";
$resultado = mysql_query($consulta);

echo 'El usuario se ha creado satisfactoriamente';</pre>
<p style="text-align: justify;">En el código anterior podemos ver claramente que hace cada parte del programa: Primero recibimos los datos desde un formulario, luego hacemos la conexión y selección de base de datos, posterior a eso ejecutamos la consulta y finalmente mostramos el mensaje de éxito al usuario. Claro y limpio. Si al momento de ejecutar encontramos un error en una de las partes será mucho más sencillo volver a ella, ajustar y volver a probar.</p>
<h2 style="text-align: justify;">4.- Indentar el código</h2>
<p style="text-align: justify;">Probablemente los 2 errores más clásicos que obtenemos al programar son la ausencia del punto y coma ( ; ) al terminar una sentencia y la falta de una llave de apertura o cierre en una iteración.</p>
<p style="text-align: justify;">Sobre el primero no es mucho lo que se pueda hacer, más que fijarse, pero sobre el segundo una de las causas más comunes de la ocurrencia de este error es la falta de indentación del código, lo que muchas veces nos hace confundir una llave de otra iteración con la que estamos escribiendo actualmente, lo que puede llevar a 2 situaciones, o bien el código no se ejecuta bien, o la iteración se ejecuta como sub-sección de otra, lo que puede llevar a resultados aún peores.</p>
<p style="text-align: justify;">Adicional a lo anterior, y tal como hemos remarcado en casi todos los puntos anteriores: <strong>orden</strong>. Siempre, y repito, <strong>siempre</strong> deberemos releer el código en algún momento y si bien cuando lo escribamos sabremos perfectamente que hace cada parte, no será así al tiempo después, por lo que mientras más ordenado y estructurado lo mantengamos, más sencillo será volver a trabajar sobre el.</p>
<p style="text-align: justify;">Así que recapitulando, esto <strong>no</strong> es correcto:</p>
<pre class="php" title="code">while(i&lt;10)
{
if(x == 'Letra equis')
{
echo 'Es la letra equis!';
}
else
{
echo 'No es la letra equis!';
}
}</pre>
<p style="text-align: justify;">Esto <strong>si </strong>es correcto:</p>
<pre class="php" title="code">while(i&lt;10)
{
    if(x == 'Letra equis')
    {
        echo 'Es la letra equis!';
    }
    else
    {
        echo 'No es la letra equis!';
    }
}</pre>
<p style="text-align: justify;">De esta forma, a primera vista ya sabemos que el if y el else se ejecutarán dentro del while y cada vez que se repita la iteración, queda todo más ordenado y hasta estéticamente se ve mejor.</p>
<h2 style="text-align: justify;">5.- No repetir, menos repetir y sobretodo no repetir</h2>
<p style="text-align: justify;">Este es un error bastante común que todos cometemos, especialmente cuando empezamos a programar y de forma inconsciente. Es natural que dentro de nuestros programas escribamos una, y otra, y otra vez el mismo código, o que bien en distintos programas de una misma aplicación <em>(por ej. en distintas páginas PHP que forman parte de un mismo sistema) </em>repitamos el mismo proceso o tengamos líneas repetidas.</p>
<p style="text-align: justify;">La gracia de la programación es justamente evitar eso y nos entrega una serie de herramientas a tener en consideración. Tal como utilizamos ciclos para ejecutar una misma tarea varias veces, siempre es posible parametrizar un proceso. Solo bastante notar que es lo que estamos repitiendo, descubrir o definir el algoritmo, buscar los parámetros y formar una función a la que podamos llamar que haga la tarea independiente de los valores entregados.</p>
<p style="text-align: justify;">Por otro lado, ¿tenemos un pié de página que se repite en cada página del sitio?, ¿un menú fijo que aparece en cada sección?. Hagamos uso de los includes y requires que PHP nos entrega, definamos funciones y plantillas que podamos reutilizar una y otra vez sin problemas. Una de las mayores bellezas de la programación es justamente esa: <strong>reutilizar</strong>. Podemos adaptar un mismo trozo de código para múltiples situaciones, haciendo la ejecución mucho más rápida y armónica.</p>
<h2 style="text-align: justify;">6.- Orden en sentencias SQL</h2>
<p style="text-align: justify;">Esta es una costumbre personal que adopté cuando empecé a hacer mis primeras armas en programación Web, por lo que fue una agradable sorpresa ver que estaba considerado como una buena práctica, y por eso hoy la remarcamos acá.</p>
<p style="text-align: justify;">Las sentencias SQL pueden llegar a ser largas, y por ende complejas de leer, especialmente si están insertas en una maraña de código PHP y/o HTML, por lo que debemos hacer lo posible para mantener un orden dentro de ellas y así hacerlas más fáciles de revisar en caso de errores. ¿A qué nos referimos con esto?, en particular a un punto: Poner en mayúscula las palabras reservadas de SQL. Esto nos permitirá siempre saber a primera vista que es lo que se hace y no nos llevará a confusión en caso de que alguna tabla o variable con la que estemos trabajando tenga un nombre similar a ellas. Por ejemplo:</p>
<pre class="sql" title="code">SELECT auto_patente, auto_marca, auto_color, auto_id_propietario,
propietario_nombre, propietario_telefono FROM auto a,
propietario p WHERE auto_id_propietario = propietario_rut
ORDER BY auto_patente DESC</pre>
<p style="text-align: justify;">Es mucho más sencilla de leer que:</p>
<pre class="php" title="code">select auto_patente, auto_marca, auto_color, auto_id_propietario,
propietario_nombre, propietario_telefono from auto a,
propietario p where auto_id_propietario = propietario_rut
order by auto_patente desc</pre>
<p style="text-align: justify;">Cuando estemos revisando código en texto plano a las 3 AM buscando el fatídico error agradecerán destacar las palabras reservadas, las cuales si se fijan, establecen una separación entre las distintas partes de la consulta.</p>
<h2 style="text-align: justify;">7.- No reinventar la rueda</h2>
<p style="text-align: justify;">Famosa frase que más de alguno ha escuchado anteriormente. Al programar, muchas veces tenemos la mala costumbre de querer hacer todo y confundimos la propiedad sobre una aplicación con generar el 100% del código. Nada más alejado de la realidad. Una de las gracias de esta gran red llamada Internet <em>(¿Inter.. net?)</em> es la cantidad de recursos que tenemos a nuestra disponibilidad, desde clases a trozos de código, es muy probable que muchas de las funcionalidades que necesitamos implementar ya hayan sido desarrolladas y puestas a disposición para utilizarlas, así que ¿por qué no aprovecharlas?.</p>
<p style="text-align: justify;">No tiene nada de malo, y en realidad es muy ventajoso. No perdamos tiempo reinventado la rueda, y mejor veamos que podemos construir a partir de ella. No hay que tener dudas sobre incorporar librerías externas a nuestros desarrollos, siempre que respetemos cualquier licencia bajo las que hayan sido liberadas obviamente. Esto nos permitirá ahorrar un tiempo considerable que podemos dedicar a mejorar otras partes más críticas de la aplicación y mejorar los tiempos totales del desarrollo, que es algo que siempre debemos vigilar.</p>
<p style="text-align: justify;">Lo más importante de recordar es que ser un buen programador no significa hacer todo desde cero, si no que tener la habilidad de identificar que integraciones podemos hacer con herramientas existentes y optimizar así el tiempo total de trabajo.</p>
<h2 style="text-align: justify;">8.- Codificar genéricamente</h2>
<p style="text-align: justify;">Un par de puntos más atrás hablábamos justamente de no repetir código. Este punto va precisamente de la mano. En muchos desarrollos en los que trabajemos a través del tiempo, veremos que es necesario desarrollar funcionalidades similares a las que hemos trabajado en el pasado, por lo que un buen consejo es hacer desarrollos genéricos con el fin de poder reutilizarlos y ahorrar tiempo.</p>
<p style="text-align: justify;">Por ejemplo, si inicialmente hacemos un sistema que incluya un registro de usuarios y en otro sistema necesitamos de lo mismo, ¿por qué no desarrollar una función genérica que reciba los parámetros necesarios para crear el usuario y así reutilizar bajo distintas situaciones?. De tal forma son muchos los casos en los que podremos ver que es posible reutilizar código de desarrollos anteriores, así que ahorremos tiempo y preparemos código estándar para utilizar.</p>
<h2 style="text-align: justify;">9.- Revisar código de otros programadores</h2>
<p style="text-align: justify;">Hace algún tiempo tuve la fortuna de trabajar como ayudante en un curso de programación gráfica en la Universidad, lo que me dió la oportunidad de revisar código de otros desarrolladores todas las semanas, una experiencia a la que todos deberíamos someternos en algún momento.</p>
<p style="text-align: justify;">Todos pensamos de forma distinta, y como tal, todos encontramos distintas soluciones o distintas formas de ejecutar una solución en particular, por lo que siempre es bueno revisar código de otros programadores, ya sea en librerías que descargamos o en sistemas que tengamos la posibilidad de ver. Eso nos ampliará la visión que tenemos sobre un lenguaje en particular y muchas veces nos permitirá ver formas más óptimas que las nuestras de codificar, lo que podremos incorporar a futuro.</p>
<p style="text-align: justify;">De la mano con lo anterior, siempre es una buena práctica plantearse nuevos desafíos al momento de hacer un desarrollo comparado con lo que hemos hecho anteriormente, y revisando código de otros programadores es una buena forma de plantearselos.</p>
<h2 style="text-align: justify;">10.- Documentar como un campeón</h2>
<p style="text-align: justify;">Uno de los puntos más importantes, sino el más importante, de esta guía. No podemos enfatizar lo suficiente la importancia de documentar el código y sobretodo de hacerlo correctamente.</p>
<p style="text-align: justify;">Si hay un punto en común de casi todo lo que vimos hoy, es el de facilitar la revisión del código, ya sea para otros desarrolladores o para nosotros mismos a futuro, y la documentación es fundamental en aquella tarea. Comentar que hace cada función, que rol cumple una variable en especial o porque hicimos algo de cierta manera será clave cuando los recuerdos no sean tan frescos en el futuro y necesitemos hacer modificaciones sobre el código.</p>
<p style="text-align: justify;">Adicionalmente a lo anterior, no es bueno exagerar. Si bien mientras más documentado esté el código será mejor, es bueno evitar comentarios obvios. Por ejemplo, si tenemos un ciclo que lo único que hace es mostrar el valor de una variable, no es necesario comentarlo, ya que a primera vista se puede ver sin problemas lo que hace.</p>
<p style="text-align: justify;">Así que en resumen es eso, comentar, pero ser criterioso a la hora de hacerlo. A final de cuentas es por nuestro propio bien, así que estimemos de forma correcta cuando y como hacerlo.</p>
<p style="text-align: justify;">Y con eso terminamos esta sencilla guía sobre 10 consejos para optimizar nuestro código, la que esperamos que sea de utilidad para todos aquellos dedicados a la programación o que buscan aprender más al respecto.</p>
<p style="text-align: justify;">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" /></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;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/01/10/como-optimizar-tu-codigo-en-10-pasos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cómo crear un feed RSS desde cero</title>
		<link>http://www.comolohago.cl/2010/01/06/como-crear-un-feed-rss-desde-cero/</link>
		<comments>http://www.comolohago.cl/2010/01/06/como-crear-un-feed-rss-desde-cero/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 22:21:34 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Feedburner]]></category>
		<category><![CDATA[Feeds]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[rss feeds]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2849</guid>
		<description><![CDATA[
En varios artículos anteriores hemos discutido y detallado la importancia que tienen los feeds para nuestros sitios Web, permitiéndonos entregarles nuevas formas a los usuarios para que se enteren de las actualizaciones de contenido.
Y a pesar de que hoy la mayoría de los sistemas que implementamos (como Wordpress) ya vienen con un feed creado e [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm3.static.flickr.com/2804/4251317116_8e0c04bd41_o.png" alt="" width="400" height="156" /></p>
<p style="text-align: justify;">En varios artículos anteriores hemos discutido y detallado la importancia que tienen los feeds para nuestros sitios Web, permitiéndonos entregarles nuevas formas a los usuarios para que se enteren de las actualizaciones de contenido.</p>
<p style="text-align: justify;">Y a pesar de que hoy la mayoría de los sistemas que implementamos <em>(como Wordpress)</em> ya vienen con un feed creado e implementado, listo para validar, siempre es posible crear uno de cero, o bien querer personalizar más a fondo lo que ya existe.</p>
<p style="text-align: justify;">Hoy, en CLH, mediante un sencillo tutorial les enseñaremos a crear un feed RSS desde cero, ya sea con contenido estático o dinámico.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2849"></span></p>
<h1 style="text-align: center;">Cómo crear un feed RSS</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>Un sitio Web con contenido, ya sea estático o dinámico.</li>
<li>Un editor Web. Si bien no es necesario y podemos codificar mediante bloc de notas, si es recomendable. En CLH utilizamos Adobe Dreamweaver, el cual pueden obtenerlo desde el <a href="http://www.adobe.com/es/products/dreamweaver/" target="_blank">siguiente enlace</a>.</li>
</ol>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">Para crear un feed RSS, es necesario codificar un archivo en formato XML, el cual contiene las etiquetas necesarias para interpretar y desplegar el contenido en el formato especificado, al cual accederán los usuarios. Este archivo podemos dejarlo nativo en XML, o bien incrustarlo dentro de PHP, como veremos en ámbos casos a continuación.</p>
<p style="text-align: justify;">Para esto realizaremos 2 procesos. En primera instancia crearemos un feed estático, a partir de contenidos que tengamos disponibles en nuestro sitio. Para este caso tomaremos las páginas de información estáticas que están incluídas en CLH <em>(quiénes somos, licencia clh, etc.)</em>.</p>
<p style="text-align: justify;">Posterior a eso repetiremos la tarea, pero esta vez recuperaremos contenidos desde una base de datos para meterlos al feed, ideal si están publicando a través de un CMS o si obtienen contenidos directamente desde una base de datos.</p>
<p style="text-align: justify;">Así que sin más, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">1.- Creando un feed RSS estático</h2>
<p style="text-align: justify;">Esta opción es válida solamente si tenemos contenido estático en nuestro sitio, lo cual si bien no se justifica mucho, puede ser una funcionalidad útil para entregarle a los visitantes.</p>
<p style="text-align: justify;">Para esto, es necesario que creemos un archivo XML en nuestro editor Web, y comenzamos a codificar:</p>
<pre class="xml" title="code">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;rss version="2.0"&gt;
...
&lt;/rss&gt;</pre>
<p style="text-align: justify;">Las primeras 2 líneas que hemos añadido corresponden a la definición de la versión y codificación de xml <em>(con el fin de que valide correctamente debemos añadir la versión, en cuanto a la codificación es opcional pero nunca está demás)</em> y la versión de RSS que utilizará el archivo que estamos creando. Actualmente la mayoría de los sitios ofrecen suscripciones tanto para RSS 1.1 como 2.0, pero con el último es más que suficiente. Al final cerramos la etiqueta rss para dar por finalizado el documento.</p>
<p style="text-align: justify;">A continuación de lo anterior, es necesario que todo lo relativo al feed <em>(tanto la información como el contenido)</em>, sea incluído dentro de las etiquetas &lt;channel&gt;&lt;/channel&gt;, lo cual lo agregaremos justo seguido del código anterior, es decir:</p>
<pre class="xml" title="code">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;rss version="2.0"&gt;
&lt;channel&gt;
...
&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p style="text-align: justify;">Y ahora, dentro de las etiquetas channel iremos añadiendo la información del feed, tal como se ve a continuación:</p>
<pre class="xml" title="code">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;rss version="2.0"&gt;
&lt;channel&gt;
    &lt;title&gt;Feed de páginas estáticas de CLH&lt;/title&gt;
    &lt;link&gt;http://www.comolohago.cl&lt;/link&gt;
    &lt;description&gt;Si se puede, te lo enseñamos&lt;/description&gt;
    ...
&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p style="text-align: justify;">Y finalmente, a continuación de la información, agregamos lo relativo al contenido que desplegaremos en el feed, esto lo haremos repitiendo las mismas etiquetas que usamos anteriormente, pero encerradas entre &lt;item&gt; e &lt;/item&gt;:</p>
<pre class="xml" title="code">&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;rss version="2.0"&gt;
&lt;channel&gt;
    &lt;title&gt;Feed de páginas estáticas de CLH&lt;/title&gt;
    &lt;link&gt;http://www.comolohago.cl&lt;/link&gt;
    &lt;description&gt;Si se puede, te lo enseñamos&lt;/description&gt;
    &lt;item&gt;
        &lt;title&gt;Quiénes Somos&lt;/title&gt;
        &lt;link&gt;http://www.comolohago.cl/acerca/&lt;/link&gt;
        &lt;description&gt;Conoce al equipo de CLH&lt;/description&gt;
    &lt;/item&gt;
    &lt;item&gt;
        &lt;title&gt;Licencia CLH&lt;/title&gt;
        &lt;link&gt;http://www.comolohago.cl/licencia-clh/&lt;/link&gt;
        &lt;description&gt;Lo que permitmos, y lo que no&lt;/description&gt;
    &lt;/item&gt;
    &lt;item&gt;
        &lt;title&gt;Colabora&lt;/title&gt;
        &lt;link&gt;http://www.comolohago.cl/colabora/&lt;/link&gt;
        &lt;description&gt;Ayúdanos a enseñar&lt;/description&gt;
    &lt;/item&gt;
    &lt;item&gt;
        &lt;title&gt;Peticiones&lt;/title&gt;
        &lt;link&gt;http://www.comolohago.cl/peticiones/&lt;/link&gt;
        &lt;description&gt;¿Algo que quieras ver?&lt;/description&gt;
    &lt;/item&gt;
&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p style="text-align: justify;">Lo anterior lo guardamos con cualquier nombre y con extensión <strong>xml</strong>, lo subimos y al abrirlo en el navegador podremos ver que nuestro feed estático está completamente listo:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm5.static.flickr.com/4071/4252146958_6ed19bfd68_o.png" alt="" width="600" height="388" /> <em>Feed estático visualizado mediante Firefox</em></p>
<p style="text-align: justify;">
<h2 style="text-align: justify;">2.- Creando un feed RSS dinámico</h2>
<p style="text-align: justify;">Ya. Creamos nuestro feed estático, nos demoramos solo unos minutos, nos dimos cuenta que era sencillísimo y estamos listos para conquistar el mundo&#8230; ¿no?. Pues bueno, aún no. Tal como indicábamos en el punto anterior, un feed estático no tiene mucha gracia, ya que debemos añadir cada nuevo contenido de forma manual y termina siendo mucho trabajo, o puede que en más de alguna ocasión se nos olvide actualizar. Debido a esto, si tenemos un sitio donde el contenido se obtiene de forma dinámica desde una base de datos, es posible adaptar eso a nuestro feed y que la nueva información se vaya agregando a medida que se genera. Para esto, trabajaremos tanto con XML como PHP, en una combinación rimbombante y circumbirúmbica que sacará chispas y nos convertirá en los chicos más populares de la secundaria.</p>
<p style="text-align: justify;">Para esto, consideraremos que tenemos una base de datos, la cual tiene una tabla de noticias con un campo título, un campo enlace, un campo detalle y un campo de fecha de las noticias, tal como vemos a continuación:</p>
<p style="text-align: justify;">
<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">titulo</th><th class="column-2">enlace</th><th class="column-3">detalle</th><th class="column-4">fecha</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">Dexter va a la luna</td><td class="column-2">http://www.ejemplo.com/1.php</td><td class="column-3">Dexter se fue a la luna ayer y aun no vuelve</td><td class="column-4">2010/01/01</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">Topher es Batman</td><td class="column-2">http://www.ejemplo.com/2.php</td><td class="column-3">Ciudad Gotica tuvo una sorpresa ayer cuando...</td><td class="column-4">2010/01/02</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">Jorge Nitales compra Google</td><td class="column-2">http://www.ejemplo.com/3.php</td><td class="column-3">Luego de interminables negociaciones se supo que...</td><td class="column-4">2010/01/03</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">Goten saca un disco de rancheras</td><td class="column-2">http://www.ejemplo.com/4.php</td><td class="column-3">Su sexto disco de estudio fue lanzado...</td><td class="column-4">2010/01/04</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">Locke3K sigue subiendo en las encuestas</td><td class="column-2">http://www.ejemplo.com/5.php</td><td class="column-3">De acuerdo al estudio realizado...</td><td class="column-4">2010/01/05</td>
	</tr>
</tbody>
</table>
</p>
<p style="text-align: justify;">Entonces, lo primero que debemos hacer es crear un archivo PHP en nuestro editor Web, el que tendrá una estructura como la que sigue:</p>
<pre class="php" title="code">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;rss version="2.0"&gt;
&lt;channel&gt;
    &lt;title&gt;Noticias de mi fantabulenial sitio Web&lt;/title&gt;
    &lt;link&gt;http://www.ejemplo.com&lt;/link&gt;
    &lt;description&gt;Las mejores noticias de Internet&lt;/description&gt;

&lt;?php
   ...
?&gt;

&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p style="text-align: justify;">Como podrán ver, en el código anterior dejamos una sección en blanco, entre las etiquetas &lt;?php y ?&gt;. Esta parte del código es donde nos conectaremos a la base de datos, rescataremos las noticias y las desplegaremos dinámicamente.</p>
<p style="text-align: justify;">Para esto, primero haremos la conexión a la base de datos. Como buena práctica utilizaremos <strong>DEFINE</strong> para, valga la redundancia, definir los datos de conexión, pero si quieren pueden saltarse esta parte y ejecutar la función directamente:</p>
<pre class="php" title="code">DEFINE ('USUARIO_BD', 'el nombre de usuario de la bd');
DEFINE ('CLAVE_BD', 'la clave de acceso a la bd');
DEFINE ('HOST_BD', 'el servidor de la bd');
DEFINE ('NOMBRE_BD', 'el nombre de la base de datos');</pre>
<p style="text-align: justify;">Y ahora hacemos la conexión:</p>
<pre class="php" title="code">$conexion = mysql_connect(HOST_BD, USUARIO_BD, CLAVE_BD) or
die ('No se pudo conectar a la BD');
mysql_select_db(NOMBRE_BD) or die ('No se pudo seleccionar
la BD');</pre>
<p style="text-align: justify;">Ejecutamos la consulta:</p>
<pre class="php" title="code">$consulta = "SELECT * FROM noticias ORDER BY fecha DESC";
$resultado = mysql_query($consulta) or die ('Error al
ejecutar la consulta');</pre>
<p style="text-align: justify;">Ahora que hemos recobrado todas las noticias desde la base de datos de forma ordenada por la fecha, obteniendo primero las más nuevas, las pasaremos a un array para escribirlas en el formato especificado de XML, de la siguiente forma:</p>
<pre class="php" title="code">while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC){
    echo '&lt;item&gt;
                 &lt;title&gt;'.$fila['titulo'].'&lt;/title&gt;
                 &lt;link&gt;'.$fila['enlace'].'&lt;/link&gt;
                 &lt;description&gt;'.$fila['detalle'].'&lt;/description&gt;
          &lt;/item&gt;';
}</pre>
<p style="text-align: justify;">Con lo anterior, ejecutamos un ciclo que pasará a un array de forma asociativa <em>(gracias al parámetro MYSQL_ASSOC, el cual nos permitirá acceder a los registros en el array con el mismo nombre que tienen en la tabla de la base de datos)</em> cada noticia hasta que se acaben y creará un nuevo ítem con los respectivos valores para incluir en el feed.</p>
<p style="text-align: justify;">Con eso estamos casi listos, el último detalle es añadir un pequeño encabezado al comienzo del documento, indicando que estamos ejecutando contenido XML para un mejor reconocimiento al momento de ejecutar el script completo, esto lo hacemos añadiendo al comienzo:</p>
<pre class="php" title="code">&lt;?php
      header("Content-Type: application/rss+xml; charset="utf-8");
?&gt;</pre>
<p style="text-align: justify;">Con esto, nuestro código completo queda de la siguiente forma:</p>
<pre class="php" title="code">&lt;?php
      header("Content-Type: application/rss+xml; charset=utf-8");
?&gt;

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;rss version="2.0"&gt;
&lt;channel&gt;
    &lt;title&gt;Noticias de mi fantabulenial sitio Web&lt;/title&gt;
    &lt;link&gt;http://www.ejemplo.com&lt;/link&gt;
    &lt;description&gt;Las mejores noticias de Internet&lt;/description&gt;

&lt;?php

    DEFINE ('USUARIO_BD', 'el nombre de usuario de la bd');
    DEFINE ('CLAVE_BD', 'la clave de acceso a la bd');
    DEFINE ('HOST_BD', 'el servidor de la bd');
    DEFINE ('NOMBRE_BD', 'el nombre de la base de datos');

    $conexion = mysql_connect(HOST_BD, USUARIO_BD, CLAVE_BD) or
    die ('No se pudo conectar a la BD');
    mysql_select_db(NOMBRE_BD) or die ('No se pudo seleccionar
    la BD');

    $consulta = "SELECT * FROM noticias ORDER BY fecha DESC";
    $resultado = mysql_query($consulta) or die ('Error al
    ejecutar la consulta');

    while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC){
        echo '&lt;item&gt;
                  &lt;title&gt;'.$fila['titulo'].'&lt;/title&gt;
                  &lt;link&gt;'.$fila['enlace'].'&lt;/link&gt;
                  &lt;description&gt;'.$fila['detalle'].'&lt;/description&gt;
             &lt;/item&gt;';
    }
?&gt;

&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p style="text-align: justify;">¡Y listo!. Tenemos nuestro feed RSS dinámico, el cual añadirá los resultados obtenidos desde la base de datos y cada vez que publiquemos contenido nuevo se actualizará automáticamente.</p>
<p style="text-align: justify;">Y ahora, ¿a conquistar el mundo?. Aún no. Antes de terminar:</p>
<h2 style="text-align: justify;">3.- Consejos útiles</h2>
<p style="text-align: justify;">Algunos tips que nunca están demás:</p>
<p style="text-align: justify;"><strong>Validar el feed</strong></p>
<p style="text-align: justify;">Antes de lanzar nuestro feed al público, es bueno asegurarnos que funcione de forma correcta y que no hayamos cometido errores de codificación. Para esto podemos validar mediante varios servicios, como por ejemplo:</p>
<ul style="text-align: justify;">
<li><a href="http://validator.w3.org/feed/" target="_blank">Validador de la W3C</a></li>
<li><a href="http://beta.feedvalidator.org/" target="_blank">Feed Validator</a></li>
</ul>
<p style="text-align: justify;">Solo añadimos la URL de nuestro feed y validamos.</p>
<p style="text-align: justify;"><strong>Publicar el feed</strong></p>
<p style="text-align: justify;">Existen servicios que nos permiten publicar nuestro feed y ofrecen una serie de funcionalidades bastante interesantes, como añadir publicidad o estadísticas sobre nuestros suscriptores. El más conocido y utilizado sin duda que es <a href="http://www.feedburner.com" target="_blank">Feedburner</a>, en el cual en solo instantes podremos publicar nuestro feed sin problemas.</p>
<p style="text-align: justify;"><strong>Mostrarle a los usuarios que existe un feed en el sitio</strong></p>
<p style="text-align: justify;">Si en este preciso instante miran la barra de direcciones de su navegador, podrán ver que hay un ícono de color naranjo:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2732/4252400114_18579ae1a2_o.png" alt="" width="600" height="19" /></p>
<p style="text-align: justify;">Este ícono indica que el sitio cuenta con un feed RSS al cual se pueden suscribir. ¿Cómo añadirlo? Muy sencillo, solo debemos agregar las siguientes líneas entre las etiquetas &lt;head&gt; y &lt;/head&gt; de cada página en la que queramos que aparezca, tal <a href="http://www.comolohago.cl/2009/07/25/como-crear-y-anadir-un-favicon-a-tus-sitios-web/" target="_blank">como si fuese un favicon</a>:</p>
<pre class="html" title="code">&lt;link rel="alternate" type="application/rss+xml" title="Mi feed RSS"
href="http://www.ejemplo.com/feed/"&gt;</pre>
<p style="text-align: justify;">Simple, ¿no?</p>
<p style="text-align: justify;"><strong>Personalizar el feed</strong></p>
<p style="text-align: justify;">Los detalles sin duda que marcan la diferencia en la mente de los usuarios. Entonces, ahora que aprendimos a hacer un feed desde cero, ¿por qué no jugar un poco y hacerlo más personalizado?. Solo con modificar pequeñas partes del código podemos desplegar cierto tipo de información en nuestro feed <em>(por ejemplo comentarios si existiesen)</em>, o bien limitar el número de artículos a mostrar, o hacer un feed independiente para cada persona que escriba en el sitio y así cada lector siga a su autor favorito.</p>
<p style="text-align: justify;">Las posibilidades son muchas, solo hay que experimentar.</p>
<p style="text-align: justify;">Y con esto damos por terminado este tutorial en el que hemos cubierto el proceso de creación de un feed RSS desde cero. Como pueden ver, solo toma unos breves minutos y la dificultad es baja, por lo que los animamos a que lo intenten y nos cuenten su experiencia.</p>
<p style="text-align: justify;">Antes de terminar, les recordamos que como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/01/06/como-crear-un-feed-rss-desde-cero/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Cómo implementar rating de comentarios en Wordpress</title>
		<link>http://www.comolohago.cl/2009/10/14/como-implementar-rating-de-comentarios-en-wordpress/</link>
		<comments>http://www.comolohago.cl/2009/10/14/como-implementar-rating-de-comentarios-en-wordpress/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 21:52:38 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[comentarios]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2261</guid>
		<description><![CDATA[
Este tutorial corresponde a una petición realizada via Twitter
Hace algún tiempo nos llegó una petición vía Twitter sobre como implementar una funcionalidad para poder votar, de forma positiva o negativa, los comentarios realizados por los lectores a un artículo en particular en Wordpress. En vista de que era algo que habíamos añadido cuando lanzamos la [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2612/4011789345_53f048d802.jpg" alt="" width="400" height="92" /><br />
<strong><em>Este tutorial corresponde a una petición realizada via <a href="http://twitter.com/comolohago" target="_blank">Twitter</a></em></strong></p>
<p style="text-align: justify;">Hace algún tiempo nos llegó una petición vía Twitter sobre como implementar una funcionalidad para poder votar, de forma positiva o negativa, los comentarios realizados por los lectores a un artículo en particular en Wordpress. En vista de que era algo que habíamos añadido cuando lanzamos la versión 2.0 de CLH, decidimos cubrir el proceso a partir de nuestra propia experiencia.</p>
<p style="text-align: justify;">Hoy se los presentamos, mediante un sencillo tutorial como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2261"></span></p>
<h1 style="text-align: center;">Cómo implementar rating de comentarios en Wordpress</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>Wordpress.</li>
<li>El plugin Comment Karma para Wordpress <em>(Pueden conseguirlo en el <a href="http://www.cyber-knowledge.net/blog/extras/ck-karma-2-0.zip" target="_blank">siguiente enlace</a>).</em></li>
</ol>
<h2 style="text-align: justify;">Procedimiento:</h2>
<p style="text-align: justify;">1.- Lo primero que haremos, una vez descargado el plugin, es descomprimirlo y subir su contenido al directorio de plugins en nuestro FTP. <em>(Usualmente dentro del directorio wp-content/plugins/)</em>.</p>
<p style="text-align: justify;">2.- A continuación, dentro de nuestro tablero en Wordpress, vamos a la sección <strong>Plugins </strong>y buscamos <strong>Comment Karma</strong> para hacer click en <strong>Activar</strong>.</p>
<p style="text-align: justify;">Hasta esta parte, todo muy bien y sencillo. Si hemos subido el plugin correctamente, no debiesemos tener problemas con la activación. Cualquier tipo de error o advertencia que aparezca, probablemente se deberá a que no hemos subido el contenido completo de este, por lo que recomendamos repetir los pasos 1 y 2.</p>
<p style="text-align: justify;">Sin embargo, aún no podemos cantar victoria, ya que solo hemos terminado la primera parte. La 2da, la cual es un poco más compleja, consta de realizar una edición en el loop de comentarios de Wordpress, lo cual intentaremos explicar de la forma más detallada posible, así que primero:</p>
<blockquote>
<h2 style="text-align: justify;">¿Qué es el loop?</h2>
<p style="text-align: justify;">Wordpress dentro de su estructura, trabaja con una serie de funciones y clases las cuales son llamadas desde las distintas partes de este CMS. Sin embargo, hay 1 que es esencial y que de cierta forma podría ser considerada como la columna vertebral de esta aplicación y que trabajan bajo un concepto conocido como el <strong>loop</strong>. Este, es el encargado de desplegar todos los artículos existentes en un sitio, así como sus comentarios relacionados mediante el llamado de una serie de funciones. Su nombre se debe a que trata de una ejecución repetitiva de las mismas funciones, la cual será equivalente al número de artículo que existan de forma sucesiva dependiendo de un parámetro en particular para ordenar <em>(por ej. fecha)</em></p>
</blockquote>
<p style="text-align: justify;">En el caso de los comentarios, también se ejecutan bajo el loop, el cual se encarga de desplegar toda la información concerniente a un comentario en particular, todas las veces según comentarios existan.</p>
<p style="text-align: justify;">Dependiendo de los ajustes que hayamos realizado, o que vengan dentro de la plantilla que hemos implementado, el loop de comentarios desplegará distintas cosas como por ejemplo:</p>
<ul>
<li>Autor del comentario.</li>
<li>Fecha del comentario.</li>
<li>Contenido del comentario.</li>
</ul>
<p style="text-align: justify;">Adicionalmente, de estar fijado así, es posible que desplieguen los famosos gravatars o numeración de los comentarios.</p>
<p style="text-align: justify;">Esta es la sección que debemos editar, preocupándonos de añadir una llamada a la función que se implementa mediante el plugin que activamos anteriormente.</p>
<p style="text-align: justify;">3.- Para esto, primero que todo, debemos editar el header de nuestra plantilla, lo cual podemos hacerlo a través de la sección <strong>Aspecto &gt; Editor</strong> en nuestro tablero de Wordpress y añadir la siguiente línea:</p>
<blockquote>
<p style="text-align: justify;">&lt;script type=”text/javascript” src=”http://www.nuestrodominio.com/wp-content/plugins/ck-karma/ck-karma.js”&gt;<br />
&lt;/script&gt;</p></blockquote>
<p style="text-align: justify;">Reemplazando obviamente www.nuestrodominio.com por el correspondiente a nuestro sitio. Guardamos la edición.</p>
<p style="text-align: justify;">4.- Luego, debemos ubicar el archivo correspondiente a los comentarios en nuestra plantilla. Dependiendo de la que estemos usando es donde estará. Por ejemplo, en el caso de la plantilla utilizada en CLH, se trata de un archivo incluido en el directorio wp-includes llamado <strong>comments-template.php</strong>. Sin embargo, como les indicamos, esto puede variar dependiendo de la plantilla que utilicen en su sitio.</p>
<p style="text-align: justify;">Una buena forma de ubicar el loop de comentarios, es buscar la siguiente función:</p>
<blockquote>
<p style="text-align: justify;">foreach ($comments as $comment)</p>
</blockquote>
<p style="text-align: justify;">Ahí es donde se da inicio a la serie de llamadas que formarán el despliegue de cada comentario.</p>
<p style="text-align: justify;">Así que una vez que la ubiquemos, debemos preocuparnos de insertar una llamada a una nueva función que corresponde a:</p>
<blockquote>
<p style="text-align: justify;">ck_display_karma();</p>
</blockquote>
<p style="text-align: justify;">El lugar de inserción de la función dependerá de la parte de los comentarios donde queramos desplegar la votación de estos. Por ej., en el caso de este sitio, decidimos hacerla a continuación de la llamada para desplegar el nombre del autor del comentario.</p>
<p style="text-align: justify;">Con eso, contamos con rating de comentarios en nuestros sitios en base a Wordpress, listo para utilizar, lo cual combinado con otras funcionalidades, puede volverse algo tremendamente útil para administrar los comentarios de los visitantes.</p>
<p style="text-align: justify;">Antes de terminar, les recordamos que, como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/10/14/como-implementar-rating-de-comentarios-en-wordpress/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cómo crear archivos Excel desde PHP &#8211; Parte 2</title>
		<link>http://www.comolohago.cl/2009/09/24/como-crear-archivos-excel-desde-php-parte-2/</link>
		<comments>http://www.comolohago.cl/2009/09/24/como-crear-archivos-excel-desde-php-parte-2/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 22:41:43 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Excel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Exportar]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2168</guid>
		<description><![CDATA[
Hace algún tiempo, Jorge Nitales nos enseñaba como exportar a Excel desde PHP, mediante un sencillo método en el que mediante el envío de cabeceras era posible formatear un documento para ser leído desde Excel.
Como en CLH estamos en constante investigación para presentar nuevos métodos y alternativas para hacer las cosas, hoy les traemos, mediante [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm4.static.flickr.com/3499/3949895910_148a4e23c2.jpg" alt="" width="400" height="96" /></p>
<p style="text-align: justify;">Hace algún tiempo, Jorge Nitales nos enseñaba <a href="http://www.comolohago.cl/2009/02/17/como-exportar-a-excel-desde-php/" target="_blank">como exportar a Excel desde PHP</a>, mediante un sencillo método en el que mediante el envío de cabeceras era posible formatear un documento para ser leído desde Excel.</p>
<p style="text-align: justify;">Como en CLH estamos en constante investigación para presentar nuevos métodos y alternativas para hacer las cosas, hoy les traemos, mediante un sencillo tutorial una nueva forma para que puedan generar archivos en formato Excel de forma rápida y con una flexibilidad increible en cuanto a la configuración del documento.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2168"></span></p>
<h1 style="text-align: center;">Cómo crear archivos Excel desde PHP</h1>
<p style="text-align: justify;">En el tutorial pasado,  Jorge Nitales nos enseñaba un proceso en el cual, mediante el uso de cabeceras, hacíamos una exportación directa de un archivo en formato HTML, el cual era convertido y enviado a quien ejecutaba el código en formato xls.</p>
<p style="text-align: justify;">Si bien ese método presenta ventajas notables, como principalmente su rapidez y facilidad de generación de los archivos, así como la sencillez de la organización de la información del documento <em>(ya que podíamos hacer usos de tablas para tabular los datos)</em>, por otro lado se presentan las desventajas de que el archivo creado no es realmente un formato propio de Excel y por ende presenta una pequeña advertencia al abrirlo <em>(aunque funciona sin problemas, puede presentar alguna mala experiencia para los usuarios)</em>, lo cual puede traer algunos problemas, especialmente si estamos trabajando con alguna clase en PHP para leer estos archivos generados.</p>
<p style="text-align: justify;">Hoy presentaremos un nuevo método, en el cual utilizaremos un paquete de <strong>PEAR</strong>, el cual está diseñado especialmente para crear archivos de este tipo y nos proveerá de una serie de métodos para darle formato hasta el más mínimo detalle del documento, permitiéndonos incluso bloquear y proteger las hojas y/o celdas.</p>
<p style="text-align: justify;">Antes de empezar:</p>
<blockquote>
<h2 style="text-align: justify;">¿Qué es PEAR?</h2>
<p style="text-align: justify;">PEAR es un conjunto de componentes reutilizables especialmente diseñado para el uso con PHP. Es posible descargar e instalar una serie de paquetes pertenecientes a el, los cuales a su vez nos proveen una serie de clases para realizar distintos tipos de operaciones, ya sea de manipulación de cierto tipo de archivos hasta procesos de imágenes, red e incluso integración de distintos servicios Web.</p>
<p style="text-align: justify;">Desde la versión 4.3.0 de PHP, PEAR viene incluido. De lo contrario es necesario instalarlo de forma manual.</p>
</blockquote>
<p style="text-align: justify;">Con esa explicación, vamos a lo que necesitamos:</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<ol style="text-align: justify;">
<li>Un servidor Web que ejecute archivos en PHP. Una buena opción es la instalación de XAMPP.</li>
<li>PEAR. Si nuestra versión de PHP es superior a la 4.3.0, lo tendremos instalado por defecto. De lo contrario cubriremos el proceso más adelante.</li>
<li>El paquete Spreadsheet Excel Writer de PEAR, que pueden encontrarlo <a href="http://pear.php.net/package/Spreadsheet_Excel_Writer" target="_blank">aqui</a>. Cubriremos su instalación más adelante.</li>
<li>Alguna versión de Excel para leer los archivos generados. Idealmente 2003 o superior.</li>
<li>Un editor Web o entorno de programación para PHP.</li>
</ol>
<p style="text-align: justify;"><strong>Nota:</strong> Si están trabajando en algún hosting y no están seguros de si está instalado PEAR o el paquete a utilizar, les recomendamos ponerse en contacto con su proveedor de servicios y ver la factibilidad de que lo instalen.</p>
<p>Con eso claro, manos a la obra:</p>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">1.- Si ya contamos con PEAR instalado en nuestro servidor, podemos adelantarnos estos pasos. De lo contrario, debemos ir al directorio donde tenemos la instalación de PHP <em>(Si instalamos Xampp, sería c:\xampp\php\)</em>.</p>
<p style="text-align: justify;">2.- Dentro de ese directorio encontraremos un archivo llamado <strong>go-pear.bat</strong></p>
<p style="text-align: justify;"><strong><img class="aligncenter" src="http://farm3.static.flickr.com/2668/3949895440_d91e249444.jpg" alt="" width="500" height="346" /></strong></p>
<p style="text-align: justify;">3.- Ejecutamos el archivo y se iniciará la instalación de PEAR. Si al iniciar nos aparece algún Warning o Error, es muy probable que ya contemos con PEAR instalado en nuestro sistema, por lo que no será necesario llevar a cabo el proceso.</p>
<p style="text-align: justify;">4.- Una vez que termine la instalación, debemos proceder a la instalación del paquete Spreadsheet Excel Writer. Para eso vamos a <strong>Menu Inicio &gt; Ejecutar</strong> y escribimos <strong>cmd</strong> para abrir Símbolo de sistema.</p>
<p style="text-align: justify;">5.- Con Símbolo de sistema abierto, nos trasladamos al directorio de PHP, el mismo donde hicimos la instalación de PEAR y escribimos el siguiente comando:</p>
<blockquote>
<p style="text-align: justify;">pear install Spreadsheet_Excel_Writer-0.9.1</p>
</blockquote>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2510/3949895546_9ced3d952e.jpg" alt="" width="500" height="43" /></p>
<p style="text-align: justify;">6.- Al ejecutar el comando anterior, se instalará el paquete:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2442/3949116653_24c6923972.jpg" alt="" width="500" height="35" /></p>
<p style="text-align: justify;">7.- Con esto ya tenemos nuestro paquete instalado y podemos empezar a programar. Para esto abrimos nuestro editor Web o entorno de programación para PHP y creamos un nuevo archivo al que llamaremos <strong>ejemplo.php</strong>.</p>
<p style="text-align: justify;">8.- Generaremos un código como el siguiente <em>(comentarios en negrita, cursiva y entre /* y */):</em></p>
<blockquote>
<p style="text-align: justify;">&lt;?php<br />
<em><strong>/* Llamamos a la clase que ejecutará la exportación a Excel. Esta clase está guardada en el directorio que tenemos habilitado por defecto en nuestro php.ini para los include y require. Si no hemos modificado el php.ini no debemos cambiar nada acá */</strong></em><br />
require_once &#8216;Spreadsheet/Excel/Writer.php&#8217;;</p>
<p><em><strong>/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Writer que refleja un nuevo libro de Excel */</strong></em><br />
$libro = new Spreadsheet_Excel_Writer();</p>
<p><em><strong>/* Definimos mediante el método send que el archivo debe enviarse al usuario al ejecutar el código y le damos el nombre que tendrá. En este caso ejemplo.xls */</strong></em><br />
$libro-&gt;send(&#8216;ejemplo.xls&#8217;);</p>
<p><em><strong>/* Definimos una variable y se la asignamos a nuestro objeto como una hoja del mismo mediante el método addWorksheet, el cual lleva como parámetro el nombre de la hoja. Tal como si crearamos una en un libro normal de Excel */ </strong></em><br />
$hoja =&amp; $libro-&gt;addWorksheet(&#8216;Hoja de prueba&#8217;);</p>
<p><em><strong>/* Escribimos los datos en la hoja mediante el método write, el cual toma como parámetros el número de fila, número de columna y el contenido. Si es texto debe ir entre comillas como una cadena. */</strong></em><br />
$hoja-&gt;write(0, 0, &#8216;Nombre&#8217;);<br />
$hoja-&gt;write(0, 1, &#8216;Apellido&#8217;);<br />
$hoja-&gt;write(1, 0, &#8216;Maria&#8217;);<br />
$hoja-&gt;write(1, 1, &#8216;Lopez&#8217;);<br />
$hoja-&gt;write(2, 0, &#8216;Eulalio&#8217;);<br />
$hoja-&gt;write(2, 1, &#8216;Ramirez&#8217;);<br />
$hoja-&gt;write(3, 0, &#8216;Lalo&#8217;);<br />
$hoja-&gt;write(3, 1, &#8216;Landas&#8217;);</p>
<p><em><strong>/* Mediante el método close cerramos y enviamos el archivo al usuario */</strong></em><br />
$libro-&gt;close();<br />
?&gt;</p></blockquote>
<p style="text-align: justify;">9.- Ahora si ejecutamos <strong>ejemplo.php</strong> nos lanzará un archivo en formato excel llamado <strong>ejemplo.xls</strong></p>
<p style="text-align: justify;">Fácil y bonito, ¿no?.  Complíquemoslo un poco, démosle un poco de formato a nuestro texto.</p>
<p style="text-align: justify;">10.- Con el mismo código como base, ahora añadiremos algunas cosas. El formato se crea definiendo una variable y adjuntándola como formato a un libro en particular. Luego, cada vez que queramos utilizar ese formato, lo añadimos como parámetro al momento de escribir datos. Esto quedará más claro en nuestro ejemplo:</p>
<blockquote>
<p style="text-align: justify;">&lt;?php<br />
<em><strong>/* Llamamos a la clase que ejecutará la exportación a Excel. Esta clase está guardada en el directorio que tenemos habilitado por defecto en nuestro php.ini para los include y require. Si no hemos modificado el php.ini no debemos cambiar nada acá */</strong></em><br />
require_once &#8216;Spreadsheet/Excel/Writer.php&#8217;;</p>
<p><em><strong>/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Writer que refleja un nuevo libro de Excel */</strong></em><br />
$libro = new Spreadsheet_Excel_Writer();</p>
<p><em><strong>/* Definimos mediante el método send que el archivo debe enviarse al usuario al ejecutar el código y le damos el nombre que tendrá. En este caso ejemplo.xls */</strong></em><br />
$libro-&gt;send(&#8216;ejemplo.xls&#8217;);</p>
<p><em><strong>/* Definimos una variable y se la asignamos a nuestro objeto como una hoja del mismo mediante el método addWorksheet, el cual lleva como parámetro el nombre de la hoja. Tal como si crearamos una en un libro normal de Excel */ </strong></em><br />
$hoja =&amp; $libro-&gt;addWorksheet(&#8216;Hoja de prueba&#8217;);</p>
<p><em><strong>/* Declaramos una variable llamada negrita y la adjuntamos a nuestro libro definiendola como formato mediante el método addFormat */</strong></em><br />
$negrita = &amp;$libro-&gt;addFormat();<br />
<em><strong>/* Luego con la variable negrita, llamamos al método setBold para definir que será negrita */</strong></em><br />
$negrita-&gt;setBold();</p>
<p><em><strong>/* Repetimos la operación con la variable cursiva pero ahora llamando al método setItalic */</strong></em><br />
$cursiva = &amp;$libro-&gt;addFormat();<br />
$cursiva-&gt;setItalic();</p>
<p><em><strong>/* Escribimos los datos en la hoja mediante el método write, el cual toma como parámetros el número de fila, número de columna, el contenido y la variable con el formato que le daremos a esa celda. Si es texto debe ir entre comillas como una cadena. */</strong></em><br />
$hoja-&gt;write(0, 0, &#8216;Nombre&#8217;, $negrita);<br />
$hoja-&gt;write(0, 1, &#8216;Apellido&#8217;, $negrita);<br />
$hoja-&gt;write(1, 0, &#8216;Maria&#8217;, $cursiva);<br />
$hoja-&gt;write(1, 1, &#8216;Lopez&#8217;, $cursiva);<br />
$hoja-&gt;write(2, 0, &#8216;Eulalio&#8217;, $cursiva);<br />
$hoja-&gt;write(2, 1, &#8216;Ramirez&#8217;, $cursiva);<br />
$hoja-&gt;write(3, 0, &#8216;Lalo&#8217;, $cursiva);<br />
$hoja-&gt;write(3, 1, &#8216;Landas&#8217;, $cursiva);</p>
<p><em><strong>/* Mediante el método close cerramos y enviamos el archivo al usuario */</strong></em><br />
$libro-&gt;close();<br />
?&gt;</p></blockquote>
<p style="text-align: justify;">11.- Ejecutamos el archivo y nos enviará ejemplo.xls como descarga, el cual si lo abrimos podremos ver que tiene los datos formateados, tal como definimos:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3499/3949231805_ba0bb0fbeb.jpg" alt="" width="216" height="96" /></p>
<p style="text-align: justify;">
<p style="text-align: justify;">El formato podemos manejarlo con muchos métodos, tanto de la hoja como de las celdas propiamente tal. Este paquete de PEAR nos permite personalizar todos los aspectos existentes de un libro de Excel, desde colores, codificación del texto, tamaños de letra, formatos de celda e incluso formulas. Lamentablemente son tantos métodos que necesitaríamos bastantes tutoriales para cubrirlos todos, por lo que hemos intentado cubrir su funcionamiento y enseñar la lógica de su uso para que puedan seguir experimentando y llegar al nivel de detalle que deseen.</p>
<p style="text-align: justify;">Pueden encontrar un detalle de los métodos para utilizar en la documentación de<a href="http://pear.php.net/package/Spreadsheet_Excel_Writer/docs" target="_blank"> Spreadsheet Excel Writer</a>.</p>
<p style="text-align: justify;">Ahora tenemos un método simple y seguro para exportar de PHP a Excel en caso de que necesiten mayor precisión o bien manipular los archivos después con alguna otra clase.</p>
<p style="text-align: justify;">Les recordamos que como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/09/24/como-crear-archivos-excel-desde-php-parte-2/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Cómo crear un listado dinamico en PHP</title>
		<link>http://www.comolohago.cl/2009/07/20/como-crear-un-listado-dinamico-en-php/</link>
		<comments>http://www.comolohago.cl/2009/07/20/como-crear-un-listado-dinamico-en-php/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 17:33:33 +0000</pubDate>
		<dc:creator>Jorge Nitales</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://comolohago.cl.s69263.gridserver.com/?p=1059</guid>
		<description><![CDATA[
Quizás alguna vez estuvieron programando algo y se dieron cuenta que necesitaban, en un formulario, crear un listado  o &#8220;select&#8221;, pero se dieron cuenta que la cantidad de elementos que tiene que aparecer viene de una base de datos y que además, si llegan a agregar algun elemento en la base de datos, automáticamente [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://farm4.static.flickr.com/3609/3514653212_bdbfcc0912.jpg?v=0" alt="" width="400" height="211" /></p>
<p style="text-align: justify;">Quizás alguna vez estuvieron programando algo y se dieron cuenta que necesitaban, en un formulario, crear un listado  o &#8220;select&#8221;, pero se dieron cuenta que la cantidad de elementos que tiene que aparecer viene de una base de datos y que además, si llegan a agregar algun elemento en la base de datos, automáticamente debe aparecer en este listado. Viéndose en este dilema pensaron &#8220;Y ahora ¿Quien podrá defenderme?&#8221;.</p>
<p style="text-align: justify;">Debido a que le Chapulin Colorado es un crá, pero no sabe programar, no los pudo ayudar y por eso aparece CLH al rescate.</p>
<p style="text-align: justify;">Para ver Cómo Lo Hago, vamos después del salto.</p>
<p style="text-align: justify;"><span id="more-1059"></span></p>
<h1 style="text-align: center;">Cómo crear un listado dinamico en PHP</h1>
<h3 style="text-align: justify;">¿Qué necesitamos?</h3>
<p style="text-align: justify;">- Un editor PHP, como Dreamweaver.</p>
<h3 style="text-align: justify;">¿Cómo Lo Hago?</h3>
<p style="text-align: justify;">1.- Ok, vamos a hacer lo siguiente, a continuación pondremos el código necesario y las explicaciones irán entre los simbolos /* y */ (esto va dentro de las etiquetas body):</p>
<blockquote style="text-align: justify;"><p>&lt;?<br />
$con=mysql_connect(&#8220;nombre_servidor&#8221;,&#8221;usuario&#8221;,&#8221;contraseña&#8221;) or die(&#8220;Error en la conexion al servidor&#8221;);<br />
<em><strong>/*Creamos la conexión con el servidor y esto lo asignamos a la variable $con, reemplazamos:</strong></em></p>
<p><em><strong>nombre_servidor: El nombre del servidor, por ejemplo Localhost<br />
</strong><strong>usuario: Ponen aquí el usuario con el que se conectan a su servidor, si trabajan en su pc, por lo general es root<br />
</strong><strong>contraseña: La contraseña del usuario anterior, si no tienen contraseña, se deja en blanco.</strong></em></p>
<p><em><strong>Luego de esto en la línea &#8220;or die&#8230;&#8221; significa que, en caso de que la conexión no se logra realizar, mostrará el mensaje &#8220;Error en&#8230;&#8221;<br />
*/</strong></em><br />
mysql_select_db(&#8220;nombre_bd&#8221;,$con) or die(&#8220;Error en la conexion a la base de datos&#8221;);<br />
<em><strong>/*<br />
Con esta línea, seleccionamos la base de datos en la que vamos a trabajar, reemplazamos:</strong></em></p>
<p><em><strong>nombre_bd: El nombre de la base de datos con la que van a trabajar</strong></em></p>
<p><em><strong>En la línea &#8220;or die&#8230;&#8221; se cumple lo mismo que en la línea anterior<br />
*/<br />
</strong></em>$consulta=mysql_query(&#8220;SELECT nombre_campo as lis FROM nombre_tabla&#8221;)<br />
<em><strong>/*<br />
Realizamos la consulta y el resultado lo asignamos a la variable $consulta, reemplazamos:</strong></em></p>
<p><em><strong>nombre_campo: Escriben el nombre del campo que van a seleccionar, por ejemplo &#8220;nombre&#8221;<br />
nombre_tabla: Aca el nombre de la tabla donde se encuentra ese campo, por ejemplo &#8220;usuario&#8221;</strong></em></p>
<p><em><strong>Además encontramos que luego de &#8220;nombre_campo&#8221; dice &#8220;as lis&#8221; con esto creamos un alias, ¿para qué sirve?<br />
en caso de que el nombre del campo sea &#8220;nombre_de_las_personas_entre_25_y_35_anios&#8221;, bueno ese es un pésimo nombre de campo, pero uno nunca sabe, lo que hace ese &#8220;as lis&#8221; es reemplazar ese nombre, ahora cuando quieran referirse a ese campo pueden hacerlo con &#8220;lis&#8221; y es importante acotar que &#8220;lis&#8221; lo elegí yo, puede poner lo que quieran.<br />
*/<br />
</strong></em>echo &#8220;&lt;table&gt;&#8221;;<br />
echo &#8220;&lt;tr&gt;&#8221;;<br />
echo &#8220;&lt;td&gt;&#8221;;<br />
echo &#8220;&lt;select name=&#8217;nombre&#8217;&gt;&#8221;;<br />
<strong><em>/*<br />
Con eso creamos una tabla y el select, tenemos que poner los &#8220;echo&#8221; para no cerrar el codigo php y además noten que lo que va dentro de las comillas dobles, por ejemplo el &#8220;name&#8221; del select, va dentro de comillas simples, si ponen comillas dobles, no funcionará.<br />
*/</em><br />
</strong>while($row=mysql_fetch_array($consulta))<br />
<em><strong>/*Acá creamos un ciclo, donde la condición es algo como &#8220;Mientras existan registros seleccionados&#8221; y ademas creamos un arreglo(array) con estos registros, con el nombre de $row*/<br />
</strong></em>{<br />
echo &#8220;&lt;option value=&#8217;$row[lis]&#8216;&gt;&#8221;.$row["lis"].&#8221;&lt;/option&gt;&#8221;;<br />
}<br />
<em><strong>/*Lo que sucederá dentro del ciclo es que creamos un elemento del listado que lleve por valor (value) el nombre recogido del registro y además mostraremos en la página este mismo nombre. Como notarán lo que mostraremos en pantalla está entre dos puntos, estos puntos sirven para concatenar o unir 2 cadenas de texto , en este caso el código de la tabla con la variable para mostrar. No es estrictamente necesario que se haga de esta manera, otra forma podría ser &#8220;&lt;option value=&#8217;$row[lis]&#8216;&gt;$row['lis']&lt;/option&gt;&#8221;, pero se recomienda la primera.*/<br />
</strong></em>echo        &#8220;&lt;/select&gt;&#8221;;<br />
echo      &#8220;&lt;/td&gt;&#8221;;<br />
echo    &#8220;&lt;/tr&gt;&#8221;;<br />
echo &#8220;&lt;/table&gt;&#8221;;<br />
<em><strong> /*Aca cerramos todo, el select, la celda, la columna y la tabla*/</strong></em><br />
?&gt;</p></blockquote>
<p style="text-align: justify;">Con esto ya tienen su listado dinámico.</p>
<p style="text-align: justify;">Cualquier duda, los invitamos a dejar un comentario a continuación.</p>
<p style="text-align: justify;">Y recuerden que este tutorial ha sido:</p>
<p style="text-align: center;"><img src="http://photos-g.ak.fbcdn.net/hphotos-ak-snc1/hs175.snc1/6572_212196145037_45442260037_7752790_7335915_n.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Por ahora,</p>
<p style="text-align: justify;">Me despido.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/07/20/como-crear-un-listado-dinamico-en-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cómo leer un archivo Excel desde PHP</title>
		<link>http://www.comolohago.cl/2009/07/16/como-leer-un-archivo-excel-desde-php/</link>
		<comments>http://www.comolohago.cl/2009/07/16/como-leer-un-archivo-excel-desde-php/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 17:16:52 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Excel]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://comolohago.cl.s69263.gridserver.com/?p=1040</guid>
		<description><![CDATA[
Hoy vamos a ver como lograr leer un archivo Excel, directamente desde PHP.


Cómo leer un archivo Excel desde PHP


Como siempre, lo primero:  Implementos necesarios:

Un      editor Web. (en este caso utilizamos y recomendamos Adobe Dreamweaver,      que pueden descargarlo desde su sitio oficial).
Un    [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://photos-c.ak.fbcdn.net/hphotos-ak-snc1/hs175.snc1/6572_215059200037_45442260037_7833146_2065013_n.jpg" alt="" width="400" height="106" /></p>
<p style="text-align: center;">Hoy vamos a ver como lograr leer un archivo Excel, directamente desde PHP.</p>
<p style="text-align: center;"><span id="more-1040"></span></p>
<p style="text-align: justify;">
<h1><strong>Cómo leer un archivo Excel desde PHP</strong></h1>
<p><strong><br />
</strong></p>
<p>Como siempre, lo primero:  <strong>Implementos necesarios:</strong></p>
<ol type="1">
<li>Un      editor Web. <em>(en este caso utilizamos y recomendamos Adobe Dreamweaver,      que pueden descargarlo desde su <a href="http://www.adobe.com/es/products/dreamweaver/" target="_blank">sitio oficial</a>).</em></li>
<li>Un      hosting que soporte PHP o un servidor Web local.</li>
<li>La      clase PHP Excel Reader, que pueden descargarla desde <a href="http://sourceforge.net/projects/phpexcelreader/files/Spreadsheet_Excel_Reader/phpExcelReader.zip/download" target="_blank">este enlace</a>.</li>
<li>Un      archivo Excel con datos.</li>
</ol>
<p><strong>Procedimiento:</strong></p>
<p style="text-align: justify;">1.- Lo primero que haremos será asegurarnos que tenemos un archivo Excel con datos. En nuestro caso, tenemos el siguiente:</p>
<p style="text-align: center;"><img src="http://photos-e.ak.fbcdn.net/hphotos-ak-snc1/hs175.snc1/6572_215195525037_45442260037_7835828_6749391_n.jpg" alt="" width="400" height="283" /></p>
<p style="text-align: justify;">
<p style="text-align: justify;">Una estructura básica con 2 columnas y 6 filas incluyendo el encabezado. Este archivo ahora lo cargaremos mediante un formulario y lo mostraremos en una tabla HTML.</p>
<p style="text-align: justify;">2.- En nuestro editor Web, partiremos por crear un archivo llamado <strong>excel.php</strong>, y en el añadiremos un formulario, el cual contendrá un campo de archivo, que llamaremos <strong>archivo</strong>. Si tienen dudas de como realizar esta operación, les recomiendo revisar <a href="http://www.comolohago.cl/2008/05/como-hacer-una-autentificacion-en-php" target="_blank">este tutorial</a> donde hemos cubierto el proceso por completo. Al terminar debiéramos tener algo como esto:</p>
<p style="text-align: center;"><img src="http://photos-d.ak.fbcdn.net/hphotos-ak-snc1/hs195.snc1/6572_215200160037_45442260037_7835923_5353966_n.jpg" alt="" width="400" height="64" /></p>
<p style="text-align: justify;">
<p style="text-align: justify;">Adicionalmente, debemos fijarnos que nuestro formulario que llame a la misma excel.php</p>
<p style="text-align: justify;">3.- Ahora, vamos a añadir un poco de código. Justo antes del comienzo de nuestro formulario <em>(es decir, antes de la etiqueta form&#8230;)</em>, añadiremos:</p>
<p style="text-align: center;"><img src="http://photos-b.ak.fbcdn.net/hphotos-ak-snc1/hs195.snc1/6572_215238275037_45442260037_7837049_4596938_n.jpg" alt="" width="102" height="69" /></p>
<p style="text-align: justify;">Con lo que acabamos de hacer, le estamos diciendo a nuestra página: <strong>&#8220;Si no se ha enviado el formulario, muestrelo, de lo contrario muestre&#8230; (lo que está dentro del else)&#8221;</strong></p>
<p style="text-align: justify;">4.- Ahora, dentro del else, haremos todo el proceso de lectura del archivo cargado y la muestra de datos por pantalla. Para eso primero descomprimimos la clases PHP Excel Reader que ya bajamos y debiéramos tener algunos archivos de ejemplo, un excel y un directorio llamado <strong>Excel</strong> el que contiene la clase en su interior: un archivo <strong>reader.php</strong> y un archivo <strong>oleread.inc</strong>, este último debemos renombrarlo a <strong>OLERead.php </strong><em>(respetando mayúsculas y minúsculas)</em> para que lo tome bien.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">5.- Luego, abrimos el archivo <strong>reader.php</strong> en nuestro editor Web y vamos a la línea 31, donde reemplazamos:</p>
<blockquote><p>require_once (&#8220;Spreadsheet/Excel/Reader/OLERead.php&#8221;);</p></blockquote>
<p>por esto:</p>
<blockquote><p>require_once &#8220;OLERead.php&#8221;;</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;">6.- A continuación, dentro de nuestro <strong>else</strong> que dejamos, debemos incluir el siguiente código. La explicación, como siempre, en negrita, cursiva y entre /* y */:</p>
<blockquote>
<p style="text-align: justify;"><strong><em>/* Cuando cargamos un archivo mediante un formulario, se mueve a una ubicación temporal dada por el servidor y desde ahí debemos moverlo manualmente a donde queremos que quede. Si no lo movemos, el archivo se eliminará al terminar la ejecución del archivo php. El movimiento lo hacemos mediante la función move uploaded file la cual utiliza como parámetros: el array del archivo, el nombre del campo, la propiedad de nombre temporal dada y luego el nombre y la ruta con el que lo guardaremos. Si solo incluimos el nombre en la última, se guardará en el mismo directorio donde está el archivo php que estamos ejecutando */ </em></strong></p>
<p style="text-align: justify;"><strong><em>/* Luego, mediante un include, llamamos a la clase PHP Excel Reader, mediante el archivo reader.php */</em></strong></p>
<p>include(&#8220;Excel/reader.php&#8221;);</p>
<p style="text-align: justify;"><strong><em>/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Reader que corresponde a la clase que incluimos recién */</em></strong></p>
<p>$datos = new Spreadsheet_Excel_Reader();</p>
<p style="text-align: justify;"><strong><em>/* Le decimos al objeto que &#8220;lea&#8221; el archivo cargado. Esto extraerá toda la información correspondiente al archivo y la almacenará en el objeto */</em></strong></p>
<p>$datos-&gt;read($nombre);</p>
<p style="text-align: justify;"><strong><em>/* Ahora, definimos una variable llamada celdas, en la cual guardaremos todos los datos de las celdas del archivo excel leído. Esto podemos hacerlo, llamando al método sheets sobre nuestro objeto datos, el cual contenía la información del archivo excel, e indicandole mediante los parámetros que nos pase los datos de la hoja 0 (primera hoja del archivo) y que queremos la información de sus celdas (cells) */</em></strong></p>
<p>$celdas = $datos-&gt;sheets[0]['cells'];</p>
<p><strong><em>/* Luego, mediante un echo, empezamos a construir una tabla en HTML */</em></strong></p>
<p>echo &#8220;&lt;table width=&#8217;300&#8242; align=&#8217;center&#8217;&gt;&#8221;;</p>
<p style="text-align: justify;"><strong><em>/* Luego, mediante un ciclo, seguiremos armando nuestra tabla y concatenamos con el contenido de las celdas. Estos valores se almacenan en la variable en una forma de array de 2 dimensiones. La primera corresponde a la fila y la segunda a la columna, siempre empezando de 1 , poniendo como condición que cuando lea una celda vacía se detenga */</em></strong></p>
<p>$i=1;<br />
while($celdas[$i][1]!=&#8221;)<br />
{<br />
echo &#8220;&lt;tr&gt;&lt;td width=&#8217;150&#8242; align=&#8217;center&#8217;&gt;&#8221;.$celdas[$i][1].&#8221;&lt;/td&gt;&lt;td width=&#8217;150&#8242; align=&#8217;center&#8217;&gt;&#8221;.$celdas[$i][2].&#8221;&lt;/td&gt;&lt;/tr&gt;&#8221;;<br />
$i++;<br />
}</p>
<p><strong><em>/* Cerramos la tabla */</em></strong></p>
<p>echo &#8220;&lt;/table&gt;&#8221;;</p></blockquote>
<p>7.- Veamos nuestro script en acción:</p>
<p style="text-align: center;"><img src="http://photos-d.ak.fbcdn.net/hphotos-ak-snc1/hs195.snc1/6572_215200160037_45442260037_7835923_5353966_n.jpg" alt="" width="400" height="64" /></p>
<p style="text-align: center;"><img src="http://photos-f.ak.fbcdn.net/hphotos-ak-snc1/hs195.snc1/6572_215225655037_45442260037_7836549_693965_n.jpg" alt="" width="400" height="169" /></p>
<p style="text-align: center;"><img src="http://photos-g.ak.fbcdn.net/hphotos-ak-snc1/hs175.snc1/6572_215225660037_45442260037_7836550_768362_n.jpg" alt="" width="400" height="42" /></p>
<p style="text-align: center;"><img src="http://photos-h.ak.fbcdn.net/hphotos-ak-snc1/hs175.snc1/6572_215225665037_45442260037_7836551_1934005_n.jpg" alt="" width="400" height="210" /></p>
<p style="text-align: justify;">
<p style="text-align: justify;">Como pueden ver, el procedimiento es bastante fácil y rápido. La clases PHP Excel Reader es muy simple de utilizar y bastante poderosa en su alcance, por lo que les recomendamos explorar a fondo y ver todos los beneficios que nos puede presentar.</p>
<p style="text-align: justify;">Como siempre, recuerden que este tutorial ha sido:</p>
<p style="text-align: center;"><img src="http://photos-g.ak.fbcdn.net/hphotos-ak-snc1/hs175.snc1/6572_212196145037_45442260037_7752790_7335915_n.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>Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p>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/07/16/como-leer-un-archivo-excel-desde-php/feed/</wfw:commentRss>
		<slash:comments>61</slash:comments>
		</item>
	</channel>
</rss>

