<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Germán Ferrari</title>
	
	<link>http://germanferrari.com</link>
	<description />
	<lastBuildDate>Mon, 29 Aug 2011 21:31:26 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/germanferrari" /><feedburner:info uri="germanferrari" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>germanferrari</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Subtítulos automáticos y en constante actualización sin moverte de tu reproductor</title>
		<link>http://feedproxy.google.com/~r/germanferrari/~3/pNmNv81kTlc/</link>
		<comments>http://germanferrari.com/archivos/subtitulos-automaticos-y-en-constante-actualizacion-sin-moverte-de-tu-reproductor/#comments</comments>
		<pubDate>Mon, 10 May 2010 15:06:29 +0000</pubDate>
		<dc:creator>Germán Ferrari</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Funcionalidad]]></category>
		<category><![CDATA[Series]]></category>
		<category><![CDATA[Subtitulos]]></category>
		<category><![CDATA[Usabilidad]]></category>

		<guid isPermaLink="false">http://germanferrari.com/?p=215</guid>
		<description><![CDATA[Hace unos días &#8212;mientras estaba en la duchaba-, me puse a pensar en que cada vez veo más series, junto a ese pensamiento llegó el de lo molesto que se vuelve a veces el bajar los subtítulos, la mala calidad de algunos, la des-sincronización, etc. Y como una gota más de agua saliendo de la regadera, la idea cayó en mi cabeza.]]></description>
			<content:encoded><![CDATA[<div class="post_image"><img class="alignnone size-full wp-image-224" title="himym" src="http://germanferrari.com/wp-content/uploads/2010/05/himym.jpg" alt="" width="500" height="320" /></div>
<p>Más allá de no actualizar el blog con frecuencia, existe un dilema aún mayor: no logro definir la temática del mismo. Del tema del cual les voy a hablar, lo podría haber puesto en mi blog personal; o peor, lo que hago con muchas de mis ideas, reducirlas a 140 caracteres y compartirlas en Twitter. Esto último no es malo, pero seguramente no se habría entendido y hubiese pasado al olvido 10 <em>tweets</em> más tarde.</p>
<p>Hoy no les voy a hablar ni de jQuery, CSS, ni presentarles un WordPress theme; quiero regalarles una idea que me surgió, que aunque posiblemente —como la mayoría de las ideas-, alguien ya la haya realizado, quiero compartir.</p>
<p>Hace unos días —mientras estaba en la duchaba-, me puse a pensar en que cada vez veo más series, junto a ese pensamiento llegó el de lo molesto que se vuelve a veces el bajar los subtítulos, la mala calidad de algunos, la des-sincronización, etc. Y como una gota más de agua saliendo de la regadera, <strong>la idea cayó en mi cabeza</strong>.</p>
<p>Imagínense un sitio web de subtítulos, bastante parecido a los que actualmente deben visitar. Ahora, piensen en Wikipedia y su comunidad escribiendo y editando artículos hasta lograr lo más cercano a la perfección. Juntemoslo. Obtendríamos subtítulos categorizados, subcategorizados y etiquetados en nombre de serie o película, numero de episodio, etc.; pero lo más importante, con <strong>una comunidad corrigiéndolos en vivo</strong>.</p>
<p>Ahora bien, en mi sueño de ducha existía un reproductor de multimedia adecuado para funcionar en conjunto con este sitio. Llamemosle VLC, porque me encanta VLC y si mi sueño fuera real ellos harían un update con mis modificaciones. Este reproductor tendría en la sección <em>configuración</em> una opción de <strong>rellenar un campo para conectarse al sitio</strong> e ingresaríamos en él una URL, o DNS, o IP&#8230; o lo que exista en ese futuro —esperemos- no tan distante.</p>
<p>Actualmente, los nombres de los archivos de las series tienen una nomenclatura del estilo <em>Lost.S06E11.HDTV.XviD-NoTV</em>: nombre, número de temporada, número de episodio, calidad y grupo que lo ripeo. No estoy seguro de estar en lo correcto, pero tampoco es un punto fundamental en la idea. A lo que quiero llegar es que los subtítulos en el sitio deberían cargarse con el nombre del .<em>avi</em> con el que están sincronizados, de esta forma, el reproductor previamente configurado debería buscar en el sitio su equivalente .<em>srt</em>. La magia está, no solo en la comodidad de no bajar subtítulos, sino principalmente en <strong>la actualización constante de los mismos por parte de la comunidad para corregirlos y dejarlos impecables.</strong></p>
<p>La idea básicamente es esa. Ahora, soñando un poco más en grande, podríamos también en las preferencias de nuestro reproductor seleccionar el idioma del subtítulo y así obtener el deseado. La comunidad del sitio podría ser el mundo, <strong>creando y actualizando traducciones en todas las lenguas</strong>.</p>
<p>Dicen que al ser humano se le ocurre en su vida más de una idea millonaria, pero que muy pocos las realizan. También dicen que el dinero no hace la felicidad. Pues yo no sé si mi idea vale un millón, pero se las regalo, mientras en un futuro cercano exista algo similar, yo voy a ser —probablemente- <strong>más pobre, pero más feliz</strong>.</p>
<img src="http://feeds.feedburner.com/~r/germanferrari/~4/pNmNv81kTlc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://germanferrari.com/archivos/subtitulos-automaticos-y-en-constante-actualizacion-sin-moverte-de-tu-reproductor/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://germanferrari.com/archivos/subtitulos-automaticos-y-en-constante-actualizacion-sin-moverte-de-tu-reproductor/</feedburner:origLink></item>
		<item>
		<title>Free WordPress Theme: Sábados Blancos</title>
		<link>http://feedproxy.google.com/~r/germanferrari/~3/oy3GUNP_ru8/</link>
		<comments>http://germanferrari.com/archivos/sabados-blancos/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 23:44:52 +0000</pubDate>
		<dc:creator>Germán Ferrari</dc:creator>
				<category><![CDATA[Destacado]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress theme]]></category>

		<guid isPermaLink="false">http://germanferrari.com/?p=181</guid>
		<description><![CDATA[Multilevel Dropdown menu - Widget ready sidebar - 960.gs Grid System - SEO optimization - Author page - Threaded-comments - Related posts - Separated Pingbacks and Trackbacks from comments - Internationalization (.po and .mo files) - Unobtrusive Javascript, Fallback scenarios if Javascript is turned OFF by the user - Compatible Browsers: FireFox  2, FireFox  3, IE6, IE7, IE8, Safari, Chrome, Opera - Users with a CSS3 compatible browser will appreciate more visual enhancements such as rounded corners and drop shadow.]]></description>
			<content:encoded><![CDATA[<div class="post_image"><a href="http://germanferrari.com/wp-content/uploads/2010/03/sabados-blancos.png"><img class="alignnone size-full wp-image-194" title="sabados-blancos-500" src="http://germanferrari.com/wp-content/uploads/2010/03/sabados-blancos-500.png" alt="" width="500" height="320" /></a></div>
<p style="text-align: center;"><strong><a href="http://germanferrari.com/wp-content/plugins/download-monitor/download.php?id=4">Download</a> | <a href="http://germanferrari.com/demos/sabados-blancos/">Demo</a></strong></p>
<h3>Key features of the template:</h3>
<ul>
<li>2 columns</li>
<li>Fixed width</li>
<li>Multilevel Dropdown menu</li>
<li>Widget ready sidebar</li>
<li>960.gs Grid System</li>
<li>SEO optimization</li>
<li>Author page.</li>
<li>Threaded-comments</li>
<li>Related posts</li>
<li>Separated Pingbacks and Trackbacks from comments</li>
<li>Internationalization (.po and .mo files)</li>
<li>Unobtrusive Javascript, Fallback scenarios if Javascript is turned OFF by the user</li>
<li>Compatible Browsers: FireFox 2, FireFox 3, IE6, IE7, IE8, Safari, Chrome, Opera</li>
<li>Users with a CSS3 compatible browser will appreciate more visual enhancements such as rounded corners and drop shadow.</li>
</ul>
<h3>Languages:</h3>
<ul>
<li>English</li>
<li>Spanish</li>
<li><em>Another language (by you!)</em></li>
</ul>
<p>If this theme is not available in your language, you can contribute your translation and I will mention it in this post with a link to your site. <a href="http://germanferrari.com/wordpress-themes/theme-localizations/">Read more.</a></p>
<h4>Share!</h4>
<p>If you like this theme, feel free to share it in your blog, twitter or anywhere else! And please, don&#8217;t link to the file (.zip), link to this post instead. Thank you!</p>
<h4>Bugs?</h4>
<p>If you find a bug, can report it through the contact form, I try to fix it as soon as possible :)</p>
<h4>Changelog</h4>
<ul>
<li><a href="http://germanferrari.com/demos/sabados-blancos/wp-content/themes/sabadosblancos/changelog.txt">changelog.txt</a></li>
</ul>
<h4>License</h4>
<p>This theme is released under <a href="http://www.gnu.org/licenses/gpl.html">GPL</a></p>
<p>If you remix, convert, translate, modify, or distribute a copy of this theme, please keep the links/credit in the footer.</p>
<img src="http://feeds.feedburner.com/~r/germanferrari/~4/oy3GUNP_ru8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://germanferrari.com/archivos/sabados-blancos/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		<feedburner:origLink>http://germanferrari.com/archivos/sabados-blancos/</feedburner:origLink></item>
		<item>
		<title>Somos lo que ejercemos</title>
		<link>http://feedproxy.google.com/~r/germanferrari/~3/bOcrQ2nSHpw/</link>
		<comments>http://germanferrari.com/archivos/somos-lo-que-ejercemos/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 18:29:18 +0000</pubDate>
		<dc:creator>Germán Ferrari</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Carrera]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[Estudio]]></category>
		<category><![CDATA[Reflexiones]]></category>

		<guid isPermaLink="false">http://germanferrari.com/?p=172</guid>
		<description><![CDATA[Muchas personas —cómo en mi caso-, somos jóvenes de veintitantos que nos encontramos ejerciendo una profesión sin haber conseguido un título académico que la avale. En el contexto en el que me rodeo, la mayoría somos diseñadores, programadores, o por qué no, ambos. Cuando te preguntan qué sos, ¿qué respondes?. Hace un tiempo atrás, cuando [...]]]></description>
			<content:encoded><![CDATA[<div class="post_image"><img src="http://germanferrari.com/wp-content/uploads/2009/12/adjectives.jpg" alt="adjectives" title="adjectives" width="500" height="320" class="alignnone size-full wp-image-174" /></div>
<p>Muchas personas —cómo en mi caso-, somos jóvenes de veintitantos que nos encontramos ejerciendo una profesión sin haber conseguido un título académico que la avale. En el contexto en el que me rodeo, la mayoría somos diseñadores, programadores, o por qué no, ambos.</p>
<p>Cuando te preguntan qué sos, ¿qué respondes?.</p>
<p>Hace un tiempo atrás, cuando aún era la época en donde iba a la facultad y la gente me preguntaba de qué trabajaba,  les respondía qué era un <em>diseñador en proceso</em>. Me sentía mal si decía que era un diseñador, era una sensación rara ya que aún me encontraba cursando la carrera. Pero un día reaccioné: Nunca iba a dejar de ser un diseñador en proceso, nadie jamás deja de aprender aunque finalice una carrera. Todos vamos a estar en proceso de <em>algo</em> hasta el fin de nuestros días.</p>
<p><strong>Somos lo que ejercemos, lo que dice que tan buenos somos no es el título, sino el adjetivo que nos califica.</strong> En otras palabras:</p>
<blockquote><p>«Todos somos sustantivos, la cuestión es qué adjetivos nos acompañan»</p></blockquote>
<p>Me considero diseñador y programador <strong>simplemente porque diseño y programo.</strong> ¡Vamos, si hasta en este momento me estoy considerando escritor por el simple hecho de estar realizando la acción de escribir!. Ahora bien, <strong>califica qué tan buen diseñador, programador y escritor soy, los adjetivos que me acompañen</strong>; tanto los que me atribuya yo mismo como los que la gente me otorgue.</p>
<p>Yo mismo me considero un buen diseñador, un programador básico y un escritor regular. Pero aquí está la magia, el calificativo que uno se atribuya no es el definitivo. Por mas que yo no me considerase una buen diseñador, ¡la gente si podría hacerlo!</p>
<p>Por eso el boca en boca siempre ha sido la mejor publicidad, no importa el título que tengas, no importa que tan bueno te consideres, si a la gente le gusta el resultado final sin dudas te recomendará.</p>
<p>Foto por: <a href="http://www.flickr.com/photos/procsilas/">Procsilas</a></p>
<img src="http://feeds.feedburner.com/~r/germanferrari/~4/bOcrQ2nSHpw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://germanferrari.com/archivos/somos-lo-que-ejercemos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://germanferrari.com/archivos/somos-lo-que-ejercemos/</feedburner:origLink></item>
		<item>
		<title>[Sneak peek] WordPress Theme: Sábados Blancos</title>
		<link>http://feedproxy.google.com/~r/germanferrari/~3/kfeangf9BKk/</link>
		<comments>http://germanferrari.com/archivos/sneak-peek-wordpress-theme-sabados-blancos/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 19:47:11 +0000</pubDate>
		<dc:creator>Germán Ferrari</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Sneak peek]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://germanferrari.com/?p=167</guid>
		<description><![CDATA[Ando muy ocupado últimamente como para seguir escribiendo al ritmo que empecé. Me encuentro armando un theme para WordPress, no puedo prometer fechas, pero les aseguro que les va a gustar!]]></description>
			<content:encoded><![CDATA[<div class="post_image"><img src="http://germanferrari.com/wp-content/uploads/2009/12/Sneak-peek-SabadosBlancos.jpg" alt="" title="Sneak-peek-SabadosBlancos" width="500" height="656" class="alignnone size-full wp-image-244" /></a></div>
<p>Ando muy ocupado últimamente como para seguir escribiendo al ritmo que empecé. Me encuentro armando un theme para WordPress, no puedo prometer fechas, pero les aseguro que les va a gustar!</p>
<img src="http://feeds.feedburner.com/~r/germanferrari/~4/kfeangf9BKk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://germanferrari.com/archivos/sneak-peek-wordpress-theme-sabados-blancos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://germanferrari.com/archivos/sneak-peek-wordpress-theme-sabados-blancos/</feedburner:origLink></item>
		<item>
		<title>Cebreado con PHP o jQuery</title>
		<link>http://feedproxy.google.com/~r/germanferrari/~3/-70RxF-PVjQ/</link>
		<comments>http://germanferrari.com/archivos/cebreado-php-jquery/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 15:15:18 +0000</pubDate>
		<dc:creator>Germán Ferrari</dc:creator>
				<category><![CDATA[Destacado]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tablas]]></category>

		<guid isPermaLink="false">http://germanferrari.com/?p=149</guid>
		<description><![CDATA[Los cebreados son usados en diseño web para realizar listados en donde cada una línea se aplica un estilo diferente. El término proviene del animal Cebra, claramente por su piel. Éste tipo de detalle no solo condimenta al diseño sino además le proporciona una característica muy importante, la legibilidad. A la hora de tabular datos [...]]]></description>
			<content:encoded><![CDATA[<div class="post_image"><a href="http://germanferrari.com/wp-content/uploads/2009/11/cebreado-php-jquery-big.png"><img src="http://germanferrari.com/wp-content/uploads/2009/11/cebreado-php-jquery-500.png" alt="cebreado-php-jquery-500" title="cebreado-php-jquery-500" width="500" height="320" class="alignnone size-full wp-image-152" /></a></div>
<p>Los cebreados son usados en diseño web para realizar listados en donde cada una línea se aplica un estilo diferente. El término proviene del animal Cebra, claramente por su piel.</p>
<p><strong>Éste tipo de detalle no solo condimenta al diseño sino además le proporciona una característica muy importante, la legibilidad</strong>. A la hora de tabular datos a veces nos encontramos con listas muy largas en donde paginamos cada 25 o 50 registros, al igual que las líneas punteadas que encontramos en los índices de los libros, <strong>intercalar un estilo en un listado nos facilita la lectura y evita que nos perdamos de línea</strong>.</p>
<p>Hay diferentes manera de realizar un cebreado, en este tutorial vamos a aprender como hacerlo con el lenguaje PHP y también con jQuery. </p>
<h3>Nuestra hoja de estilos</h3>
<p>No vamos a profundizar en este aspecto, si quieren ver los estilos pueden <a href="http://germanferrari.com/wp-content/plugins/download-monitor/download.php?id=3">descargar el ejemplo</a>. Solamente quiero hacer hincapié en que vamos a tener que <strong>definir una clase llamada &#8220;alt&#8221;</strong>, la cual en nuestro caso será aplicada a un <code>&lt;tr&gt;</code> de una tabla.</p>
<p>Entonces, y a modo de ejemplo, el color de fondo de la tabla o del <code>&lt;tr&gt;</code> será por defecto #FFF, y cuando le apliquemos la clase &#8220;alt&#8221; al <code>&lt;tr&gt;</code> será #CCC.</p>
<h3>Cebreado con PHP</h3>
<p>Para el cebreado vamos a necesitar primero crear la función que se encargue de devolvernos la clase &#8220;alt&#8221; cada un registro.</p>
<h4>Creando la función</h4>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Funcion para el cebreado cada 1 registro.</span>
<span style="color: #000000; font-weight: bold;">function</span> alt <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cebra</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cebra</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">==</span> <span style="color: #990000;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cebra</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">' class=&quot;alt&quot;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$cebra</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>La clave está en lo que evaluamos en el <code>if</code>, decimos:</p>
<blockquote><p>&#8220;Si $cebra dividido 2 es igual al valor entero inferior más cercano al resultado de $cebra dividido 2, entonces imprimí la clase alt, sino no.&#8221;</p></blockquote>
<p>Para comprender mejor esto pueden leer más de la <a href="http://php.net/manual/en/function.floor.php">función floor</a>.</p>
<p>Terminada la función, le atribuimos valor 1 a la variable $cebra.</p>
<h4>Devolviendo los datos</h4>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;table&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;ID&lt;/th&gt;
            &lt;th&gt;Nombre&lt;/th&gt;
            &lt;th&gt;Comentario&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&lt;=</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        &lt;tr<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> alt<span style="color: #009900;">&#40;</span><span style="color: #000088;">$zebra</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$zebra</span><span style="color: #339933;">++;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;
            &lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$i</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
            &lt;td&gt;&lt;p&gt;Juan Perez&lt;/p&gt;&lt;/td&gt;
            &lt;td&gt;&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus  imperdiet vestibulum volutpat.&lt;/p&gt;&lt;/td&gt;
        &lt;/tr&gt;
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    &lt;/tbody&gt;
&lt;/table&gt;</pre></div></div>

<p>Una vez que tenemos la función vamos a ejecutarla, para eso primero tenemos que crear un bucle que genere registros.</p>
<p>En este caso creé un <code>for()</code> que nos devolverá 6 <code>&lt;tr&gt;</code>, en cada uno se imprimirá el <code>class="alt"</code> o no dependiendo si es par o impar. Para esto en el <code>&lt;tr&gt;</code> hacemos un <code>echo</code> del resultado de la función y luego le sumamos 1 para que dentro del bucle <code>for()</code> $cebra vaya cambiando:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;tr<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> alt<span style="color: #009900;">&#40;</span><span style="color: #000088;">$zebra</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$zebra</span><span style="color: #339933;">++;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;</pre></div></div>

<h3>Cebreado con jQuery</h3>
<p>En este caso usaremos menos código. Antes de cerrar la etiqueta <code>&lt;head&gt;</code> ponemos:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #009966; font-style: italic;">/* Cebreado con jQuery */</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#cebreado-jquery tbody tr:even&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;alt&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Lo que estamos diciendo acá es lo siguiente:</p>
<blockquote><p>&#8220;A los <code>&lt;tr&gt;</code> pares que esten dentro de <code>&lt;tbody&gt;</code> de la tabla con el id cebreado-jquery agregarle la clase alt&#8221;</p></blockquote>
<p>Recuerden que pueden usar <code>:even</code> para los registros pares y <code>:odd</code> para los impares.</p>
<p>En la estructura html hacemos un <code>for()</code> en php igual que en el caso anterior, solo que esta vez no vamos a tener que imprimir el resultado de la función. En este caso recuerden agregarle a la tabla el id &#8220;cebreado-jquery&#8221;.</p>
<h3>Conclusión</h3>
<p>Si bien es apenas más trabajoso, <strong>recomiendo hacer el cebreado en PHP</strong>. Este lenguaje, a diferencia de javascript que puede ser desactivado, funcionara siempre del lado del usuario.</p>
<img src="http://feeds.feedburner.com/~r/germanferrari/~4/-70RxF-PVjQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://germanferrari.com/archivos/cebreado-php-jquery/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://germanferrari.com/archivos/cebreado-php-jquery/</feedburner:origLink></item>
		<item>
		<title>Seleccionar múltiples checkbox a la vez con jQuery</title>
		<link>http://feedproxy.google.com/~r/germanferrari/~3/htbV9AxMCSE/</link>
		<comments>http://germanferrari.com/archivos/seleccionar-multiples-checkbox-jquery/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 05:02:20 +0000</pubDate>
		<dc:creator>Germán Ferrari</dc:creator>
				<category><![CDATA[Destacado]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[checkbox]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://germanferrari.com/?p=122</guid>
		<description><![CDATA[Cuando desarrollamos aplicaciones web, la funcionalidad es un aspecto muy importante. El usuario no tiene ni quiere perder el tiempo y cada click innecesario es un punto en contra hacia nosotros, los desarrolladores. La edición por lote es un complemento muy funcional. Imagino que muchos de ustedes usan WordPress, piensen qué molesta sería la tarea [...]]]></description>
			<content:encoded><![CDATA[<div class="post_image"><a href="http://germanferrari.com/wp-content/uploads/2009/10/multiples-checkbox-big.png"><img class="alignnone size-full wp-image-125" title="multiples-checkbox-500" src="http://germanferrari.com/wp-content/uploads/2009/10/multiples-checkbox-500.png" alt="multiples-checkbox-500" width="500" height="320" /></a></div>
<p>Cuando desarrollamos aplicaciones web, la funcionalidad es un aspecto muy importante. El usuario no tiene ni quiere perder el tiempo y <strong>cada click innecesario es un punto en contra hacia nosotros, los desarrolladores</strong>.</p>
<p>La edición por lote es un complemento muy funcional. Imagino que muchos de ustedes usan <a href="http://wordpress.org">WordPress</a>, piensen qué molesta sería la tarea de tener que borrar una cantidad considerada de comentarios si no pudieran seleccionar todos con un solo click para luego borrarlos, marcarlos como spam, etc.</p>
<p>Y eso es precisamente lo que vamos a construir: un <strong>listado de checkboxs con uno &#8220;padre&#8221; que será el encargado de seleccionar o deseleccionar todos</strong>. Para que se aprecie mejor, en el <a href="http://germanferrari.com/demos/checkbox-multiples-jquery/">ejemplo</a> simulé la edición masiva de comentarios de un panel de administración.</p>
<h3>Estructura HTML</h3>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;table&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;&lt;input name=&quot;checktodos&quot; type=&quot;checkbox&quot; /&gt;&lt;/th&gt;
            &lt;th&gt;ID&lt;/th&gt;
            &lt;th&gt;Nombre&lt;/th&gt;
            &lt;th&gt;Comentario&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;input name=&quot;comment-1&quot; type=&quot;checkbox&quot; /&gt;&lt;/td&gt;
            &lt;td&gt;1&lt;/td&gt;
            &lt;td&gt;Juan Perez&lt;/td&gt;
            &lt;td&gt;Texto de comentario&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;input name=&quot;comment-2&quot; type=&quot;checkbox&quot; /&gt;&lt;/td&gt;
            &lt;td&gt;2&lt;/td&gt;
            &lt;td&gt;Juan Perez&lt;/td&gt;
            &lt;td&gt;Texto de comentario&lt;/td&gt;
    	&lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;</pre></div></div>

<p>Del código anterior nos tenemos que concentrar en el <code>&lt;input name="checktodos" type="checkbox" /&gt;</code>. Este checkbox servirá para controlar los demás. Lo más importante aquí es el atributo <code>name="checktodos"</code>, dato que utilizaremos como referencia al escribir nuestro código jQuery.</p>
<p>Además, tenemos los otros checkboxs que seguramente iremos generando de forma dinámica, lo más seguro es que utilicen un <code>for</code> o <code>while</code>, pero eso no lo vamos a profundizar en este tutorial.</p>
<h3>Código jQuery para el control de los checkboxs</h3>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//Checkbox</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input[name=checktodos]&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">change</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input[type=checkbox]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>			
			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input[name=checktodos]:checked&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">checked</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">checked</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>En la primer línea llamamos a la librería jQuery alojada en el servidor de Google, luego con un <code>$(document).ready(function(){</code> decimos que cuando el documento esté listo, realice lo que sigue.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input[name=checktodos]&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">change</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></pre></div></div>

<p>Empezamos diciendo que cuando el input (en este caso, de tipo checkbox) que contenga &#8220;checktodos&#8221; en su atributo name cambie (<code>change()</code>) ejecute una función.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input[type=checkbox]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>Ahora lo que decimos es que por cada uno (<code>each()</code>) de los checkboxs ejecute otra función.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input[name=checktodos]:checked&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">checked</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">checked</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Los checkboxs devuelven un booleano, es decir, un 1 (si es &#8220;verdadero&#8221; y el checkbox está activo) o un 0 (&#8220;falso&#8221;, checkbox deseleccionado). Entonces lo que preguntamos en el if es:</p>
<p>&#8220;Si el checkbox <em>padre</em> (de name checktodos) que está seleccionado es igual a 1, entonces a <code>this</code> (el checkbox que estamos recorriendo por el <code>each</code>) lo seleccionamos (<code>this.checked = true;</code>), sino lo deseleccionamos  (<code>this.checked = false;</code>).&#8221;</p>
<p>De esta manera abarcamos todas las posibilidades:</p>
<p><em><strong>Sí al hacer click en &#8220;checktodos&#8221; mientras&#8230;</strong></em></p>
<ol>
<li><strong>No</strong> está seleccionado y <strong>todos</strong> los demás <strong>tampoco</strong>, entonces selecciona <strong>todos</strong>.</li>
<li><strong>No</strong> está seleccionado y los demás <strong>algunos si algunos no</strong>, entonces selecciona <strong>todos</strong>.</li>
<li><strong>No</strong> está seleccionado y <strong>todos</strong> los demás <strong>si</strong>, entonces selecciona <strong>todos</strong>.</li>
<li><strong>Si</strong> está seleccionado y  <strong>todos</strong> los demás <strong>no</strong>, entonces selecciona <strong>ninguno</strong>.</li>
<li><strong>Si</strong> está seleccionado y los demás <strong>algunos si algunos no</strong>, entonces selecciona <strong>ninguno</strong>.</li>
<li><strong>Si</strong> está seleccionado y  <strong>todos</strong> los demás <strong>también</strong>, entonces selecciona <strong>ninguno</strong>.</li>
</ol>
<p>Un buen ejercicio para terminar de entender esto es abrir el <a href="http://germanferrari.com/demos/checkbox-multiples-jquery/">demo</a> en una nueva pestaña y realizar cada ejemplo, luego volver al <code>if</code> y analizarlo.</p>
<p>Si quedan dudas, no duden en preguntar!</p>
<img src="http://feeds.feedburner.com/~r/germanferrari/~4/htbV9AxMCSE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://germanferrari.com/archivos/seleccionar-multiples-checkbox-jquery/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://germanferrari.com/archivos/seleccionar-multiples-checkbox-jquery/</feedburner:origLink></item>
		<item>
		<title>Crear un menú estilo acordeón con jQuery</title>
		<link>http://feedproxy.google.com/~r/germanferrari/~3/DlF8uUrYnxk/</link>
		<comments>http://germanferrari.com/archivos/menu-acordeon-jquery/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 14:46:55 +0000</pubDate>
		<dc:creator>Germán Ferrari</dc:creator>
				<category><![CDATA[Destacado]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Menú]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://germanferrari.com/?p=81</guid>
		<description><![CDATA[Antes de arrancar, quiero mostrarles lo que vamos a construir. Para ello nada mejor que ver el demo haciendo click en el link de la derecha o bien descargar los archivos (deberán contar con un servidor local para probarlo). En el siguiente tutorial me voy a enfocar principalmente en el código javascript del framework jQuery, [...]]]></description>
			<content:encoded><![CDATA[<div class="post_image"><a href="http://germanferrari.com/wp-content/uploads/2009/10/menu-acordeon-jquery-big.png"><img class="alignnone size-full wp-image-83" title="menu-acordeon-jquery-500" src="http://germanferrari.com/wp-content/uploads/2009/10/menu-acordeon-jquery-500.png" alt="menu-acordeon-jquery-500" width="500" height="320" /></a></div>
<p>Antes de arrancar, quiero mostrarles lo que vamos a construir. Para ello nada mejor que ver el demo haciendo click en el link de la derecha o bien descargar los archivos (deberán contar con un servidor local para probarlo).</p>
<p>En el siguiente tutorial me voy a enfocar principalmente en el código javascript del framework jQuery, dejando de lado la explicación PHP.</p>
<p>El menú que vamos a desarrollar tiene la ventaja de dejar abierta la sub botonera cuando nos encontramos dentro del mismo grupo de links. Para entender esto mejor, vayan al demo, ingresen en <em>Posts » Agregar Post</em> y vean que al recargar la página, la sección Posts queda desplegada.</p>
<h3>Estructura de carpetas y archivos</h3>
<div class="post_image"><img src="http://germanferrari.com/wp-content/uploads/2009/10/estructura-carpetas.png" alt="estructura-carpetas" title="estructura-carpetas" width="374" height="442" class="alignnone size-full wp-image-111" /></div>
<p>Tenemos un index.php en donde vamos a llamar a la hoja de estilos, al framework jQuery y escribir nuestro menú en HTML. Allí también incluiremos a través de PHP las distintas secciones del sitio utilizando los parametros &#8220;p&#8221; (de página) y &#8220;sec&#8221; (de sección) por el método GET.</p>
<p>Las páginas, que las llamaremos &#8220;p&#8221; (<code>posts.php</code>, <code>categorias.php</code>, <code>multimedia.php</code>, etc.) las colocaremos en el raíz del sitio; las secciones, &#8220;sec&#8221; (<code>agregar-post.php</code>, <code>listar-posts.php</code>, etc.) estarán guardadas dentro una carpeta llamada &#8220;paginas&#8221; y bajo otra llamada como el &#8220;p&#8221; que le corresponde.</p>
<p>Para comprender mejor veamos el siguiente ejemplo: <code>agregar-post.php</code> es el &#8220;sec&#8221; que pertenece al &#8220;p&#8221; <code>posts.php</code>, entonces estará alojado en <code>/paginas/posts/agregar-post.php</code>. Ésto lo pueden observar en la imagen superior.</p>
<h3>Escribiendo el menú en HTML y PHP</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;div id=&quot;menu&quot;&gt;
    &lt;h3&gt;Administrar&lt;/h3&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;span <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;posts&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'class=&quot;current&quot;'</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;&lt;a href=&quot;javascript:void(0);&quot; id=&quot;link-posts&quot;&gt;Posts&lt;/a&gt;&lt;/span&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;?p=posts&amp;amp;sec=agregar-post&quot; class=&quot;add&quot;&gt;Agregar&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=posts&amp;amp;sec=listar-posts&quot; class=&quot;list&quot;&gt;Listar&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;span <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;categorias&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'class=&quot;current&quot;'</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;&lt;a href=&quot;javascript:void(0);&quot; id=&quot;link-categorias&quot;&gt;Cateogr&amp;iacute;as&lt;/a&gt;&lt;/span&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;?p=categorias&amp;amp;sec=agregar-categoria&quot; class=&quot;add&quot;&gt;Agregar&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=categorias&amp;amp;sec=listar-categorias&quot; class=&quot;list&quot;&gt;Listar&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;span <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;multimedia&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'class=&quot;current&quot;'</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;&lt;a href=&quot;javascript:void(0);&quot; id=&quot;link-multimedia&quot;&gt;Multimedia&lt;/a&gt;&lt;/span&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;?p=multimedia&amp;amp;sec=agregar-galeria-imagenes&quot; class=&quot;add&quot;&gt;Agregar galer&amp;iacute;a de im&amp;aacute;genes&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=multimedia&amp;amp;sec=listar-galeria-imagenes&quot; class=&quot;list&quot;&gt;Listar galer&amp;iacute;a de im&amp;aacute;genes&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=multimedia&amp;amp;sec=agregar-galeria-video&quot; class=&quot;add&quot;&gt;Agregar galer&amp;iacute;a de video&lt;/a&gt;&lt;/li&gt;            
                &lt;li&gt;&lt;a href=&quot;?p=multimedia&amp;amp;sec=listar-galeria-video&quot; class=&quot;list&quot;&gt;Listar galer&amp;iacute;a de video&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;span <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;usuarios&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'class=&quot;current&quot;'</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;&lt;a href=&quot;javascript:void(0);&quot; id=&quot;link-usuarios&quot;&gt;Usuarios&lt;/a&gt;&lt;/span&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;?p=usuarios&amp;amp;sec=agregar-usuario&quot; class=&quot;add&quot;&gt;Agregar&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=usuarios&amp;amp;sec=listar-usuarios&quot; class=&quot;list&quot;&gt;Listar&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;span <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;opciones&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'class=&quot;current&quot;'</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;&lt;a href=&quot;javascript:void(0);&quot; id=&quot;link-opciones&quot;&gt;Opciones&lt;/a&gt;&lt;/span&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;?p=opciones&amp;amp;sec=opcion-lectura&quot; class=&quot;bullet&quot;&gt;Lectura&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=opciones&amp;amp;sec=opcion-escritura&quot; class=&quot;bullet&quot;&gt;Escritura&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=opciones&amp;amp;sec=opcion-discusion&quot; class=&quot;bullet&quot;&gt;Discusi&amp;oacute;n&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;?p=opciones&amp;amp;sec=opcion-permalinks&quot; class=&quot;bullet&quot;&gt;Permalinks&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;</pre></div></div>

<p>Vamos a seguir está lógica:</p>
<p>Dentro de un div con el id &#8220;menu&#8221; (referencia para CSS y jQuery) tendremos una lista desordenada. Dentro de cada <code>&lt;li&gt;</code> vamos a tener un <code>&lt;span&gt;</code> que contendrá el nombre de la página, y seguido a éste otra lista desordenada con las subpaginas.</p>
<p>Podrán observar que dentro de cada <code>&lt;span&gt;</code> comparo si $p (url en la que estoy) es igual a la página principal de ese <code>&lt;li&gt;</code>, si lo es imprimo la clase &#8220;current&#8221;.</p>
<h3>Escribiendo el menú jQuery</h3>
<p>El siguiente código lo vamos a encontrar antes de cerrar la etiqueta html <code>&lt;head&gt;</code>. En la primer línea llamamos al framework jQuery alojado en Google y luego escribiremos el menú, el cual iré explicando paso a paso más abajo.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//Menu desplegable</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#menu ul li ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#menu ul li span.current&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;open&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#menu ul li span&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>	
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">siblings</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul:visible&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;open&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">siblings</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;span&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;open&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Primero escribimos:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></pre></div></div>

<p>Estamos diciendo que cuando el documento este listo, ejecutemos todo lo siguiente.</p>
<p>Luego tenemos estas dos líneas:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#menu ul li ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#menu ul li span.current&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;open&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>La primera es la que se encarga de esconder todos los <code>&lt;ul&gt;</code> childrens, estos son los que están a continuación de cada <code>&lt;span&gt;</code> en nuestra estructura HTML.</p>
<p>La segunda línea dice: A todos los <code>&lt;span&gt;</code> que están dentro del <code>&lt;div id="menu"&gt;&lt;ul&gt;&lt;li&gt;</code> y tengan la clase &#8220;current&#8221; agregales la clase &#8220;open&#8221;, busca el <code>&lt;ul&gt;</code> que le sigue y abrilo. Ésta línea nos sirve para que cuando estemos en la sección &#8220;Agregar Post&#8221; el menú &#8220;Posts&#8221; quede abierto mostrandonos las demás opciones que tenemos.</p>
<p>Ahora vamos a analizar el extracto de código que se encarga del acordeón.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#menu ul li span&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>	
	$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">siblings</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul:visible&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#menu ul li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;span&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;open&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;open&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Lo que estamos diciendo básicamente es que cuando se hace click en un <code>&lt;span&gt;</code> se ejecuta una función que hace:</p>
<ol>
<li>A ésto (el <code>&lt;span&gt;</code> que hicimos click), buscale el siguiente <code>&lt;ul&gt;</code>, a éste hacele un slideToggle() (es decir, si está abierto cerralo y si esta cerrado abrilo, todo con una bonita transición del estilo slideUp/slideDown); luego subimos un nivel hasta el elemento padre del <code>&lt;ul&gt;</code>: el <code>&lt;li&gt;</code>, buscamos los hermanos (siblings) del <code>&lt;li&gt;</code> y los cerramos a todos.</li>
<li>Buscamos todos los <code>&lt;span&gt;</code>que existan dentro de <code>&lt;div id="menu"&gt;&lt;ul&gt;&lt;li&gt;</code> y les sacamos la clase &#8220;Open&#8221;.</li>
<li>A ésto (el <code>&lt;span&gt;</code> que hicimos click) le agregamos la clase &#8220;Open&#8221;.</li>
</ol>
<p>Y eso es todo.</p>
<h3>Conclusión</h3>
<p>Como verán, jQuery es una librería muy flexible que nos permite sin saber mucho de javascript, realizar complementos muy interesantes.</p>
<p>Para éste ejemplo, y más si son nuevos con jQuery, les recomiendo que presten mucha atención al funcionamiento de <code>parent()</code> y <code>siblings()</code> y traten de entender bien cuales son sus funciones. Relean el listado en donde explico con palabras lo que más arriba escribo en jQuery ( la función que realiza el acordeón) las veces necesarias hasta entenderla del todo.</p>
<p>Por otro lado, si bien lo he probado en varios navegadores, no lo hice en todos. Si ven algo raro me avisan en los comentarios. Y cualquier duda también!</p>
<img src="http://feeds.feedburner.com/~r/germanferrari/~4/DlF8uUrYnxk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://germanferrari.com/archivos/menu-acordeon-jquery/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://germanferrari.com/archivos/menu-acordeon-jquery/</feedburner:origLink></item>
	</channel>
</rss>
