<?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>Quenerapú</title>
	<atom:link href="http://quenerapu.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://quenerapu.com</link>
	<description>Sentado delante de un ordenador desde 1982. ¿De qué voy a hablar, si no?</description>
	<lastBuildDate>Tue, 09 Mar 2010 23:42:20 +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>Logo Imperial Stormtroopers</title>
		<link>http://quenerapu.com/vector/logo-imperial-stormtroopers/</link>
		<comments>http://quenerapu.com/vector/logo-imperial-stormtroopers/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 14:21:24 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[Vector]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[cdr]]></category>
		<category><![CDATA[fh9]]></category>
		<category><![CDATA[imperial stormtroopers]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[svg]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=138</guid>
		<description><![CDATA[Logo vectorizado de Imperial Stormtroopers, para quien lo pueda necesitar. En versiones .svg, .ai, .fh9 y .cdr.]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-141" title="Logo Imperial Stormtroopers" src="http://quenerapu.com/wp-content/uploads/2010/03/logoimperial.gif" alt="Logo Imperial Stormtroopers" width="503" height="482" /></p>
<p>Logo vectorizado de <a href="http://imperialstormtroopers.com/" target="_blank">Imperial Stormtroopers</a> (en sus dos versiones válidas), para quien lo pueda necesitar.</p>
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/es/"><img class="alignnone" style="border-width: 0;" src="http://i.creativecommons.org/l/by-nc-nd/3.0/es/88x31.png" alt="Creative Commons License" /></a></p>
<p>Si quieres crear un elemento promocional del Imperial Stormtroopers (un cartel, una pegatina, un diseño de camiseta, etc, etc) ya puedes incluir el logo oficial. Tienes permiso para usarlo, siempre que no lo modifiques, no te lucres por ello y sólo lo uses para promocionar el evento Imperial Stormtroopers. No es necesario que menciones al autor del logo, pues el propio logo es una URL y con eso ya queda todo dicho. <img src='http://quenerapu.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Ah! Si creas algún elemento promocional para el Imperial Stormtroopers, acuérdate de sacarle una foto y colgarla de Internet para que lo veamos todos.</p>
<p><a href="http://quenerapu.com/logoteca/imperialstormtroopers.svg"><img style="float: left; margin-right: 5px;" title="Download SVG" src="http://quenerapu.com/images/download-svg.gif" alt="" width="48" height="60" /></a><a href="http://quenerapu.com/logoteca/imperialstormtroopers.ai"><img style="float: left; margin-right: 5px;" title="Download Illustrator" src="http://quenerapu.com/images/download-ai.gif" alt="" width="48" height="60" /></a><a href="http://quenerapu.com/logoteca/imperialstormtroopers.fh9"><img style="float: left; margin-right: 5px;" title="Download FreeHand" src="http://quenerapu.com/images/download-fh9.gif" alt="" width="48" height="60" /></a><a href="http://quenerapu.com/logoteca/imperialstormtroopers.cdr"><img style="float: left; margin-right: 5px;" title="Download CorelDraw" src="http://quenerapu.com/images/download-cdr.gif" alt="" width="48" height="60" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/vector/logo-imperial-stormtroopers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Directorios virtuales en Ubuntu</title>
		<link>http://quenerapu.com/linux/directorios-virtuales-en-ubuntu/</link>
		<comments>http://quenerapu.com/linux/directorios-virtuales-en-ubuntu/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 16:46:33 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[consola]]></category>
		<category><![CDATA[directorio virtual]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=137</guid>
		<description><![CDATA[Crear directorios virtuales es muy cómodo y práctico cuando desarrollas sitios web sobre Apache. Lo hago a menudo y por eso lo recomiendo.]]></description>
			<content:encoded><![CDATA[<p>Digo Ubuntu sólo porque es la distro que uso, pero esto vale para cualquier distribución Linux.</p>
<p>Los directorios virtuales son comodísimos a la hora de desarrollar sitios web sobre Apache. Lo hago a menudo y por eso lo recomiendo. Doy por hecho que <strong>Apache</strong> está correctamente instalado y configurado.</p>
<p>En mi directorio de usuario creo un directorio llamado <strong>http</strong> (donde pongo <em>username</em> has de poner tu nombre de usuario, obviamente)</p>
<pre class="brush: bash; gutter: false;">
$ mkdir /home/username/http
</pre>
<p>En ese directorio voy a construir mis proyectos web. Creo el directorio de mi primer proyecto web (donde pongo <em>proyecto1</em> has de poner el nombre de tu proyecto, obviamente).</p>
<pre class="brush: bash; gutter: false;">
$ mkdir /home/username/http/proyecto1
</pre>
<p>Recomiendo, para no complicarnos la vida, dar a este tipo de directorios nombres sin eñes, tildes ni espacios.</p>
<p>Y sólo por tener algo, creo el clásico <strong>index.html</strong> conteniendo el típico saludo:</p>
<pre class="brush: bash; gutter: false;">
$ echo &quot;&lt;h1&gt;Hola mundo&lt;/h1&gt;&quot; &gt; /home/username/http/proyecto1/index.html
</pre>
<p>Bueno. Como este directorio no está donde Apache espera que estén sus directorios web, lo primero que tengo que hacer es notificar a Apache esta situación especial. Le diré a Apache que no es el típico directorio web sino un directorio virtual: Un directorio web creado donde me dió la gana <img src='http://quenerapu.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Doy de alta <strong>proyecto1</strong> como directorio virtual:</p>
<pre class="brush: bash; gutter: false;">
$ cd /etc/apache2/sites-available
$ sudo cp default proyecto1
$ sudo gedit proyecto1
</pre>
<p>En el documento que se abre, para no complicarnos, sustituyo el texto por este otro (adáptalo según tus necesidades, claro):</p>
<pre class="brush: bash;">
&lt;VirtualHost *:80&gt;
ServerAdmin aqui.tu@email.com
ServerName proyecto1
DocumentRoot /home/username/http/proyecto1
  &lt;Directory /&gt;
  Options FollowSymLinks
  AllowOverride None
  &lt;/Directory&gt;
  &lt;Directory /home/username/http/proyecto1 &gt;
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order deny,allow
    Allow from all
  &lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p>Y activo este directorio virtual:</p>
<pre class="brush: bash; gutter: false;">
$ sudo a2ensite proyecto1
</pre>
<p>Edito el archivo <strong>hosts</strong> en conformidad:</p>
<pre class="brush: bash; gutter: false;">
$ sudo gedit /etc/hosts
</pre>
<p>añadiendo esta línea:</p>
<pre class="brush: bash; gutter: false;">
127.0.0.1 proyecto1
</pre>
<p>Reinicio Apache</p>
<pre class="brush: bash; gutter: false;">
$ sudo /etc/init.d/apache2 reload
</pre>
<p>Y ya está. En <a href="http://proyecto1">http://proyecto1</a> puedo ver mi página <strong>Hola mundo</strong>. Ahora, <strong>¡a trabajar!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/linux/directorios-virtuales-en-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manifiesto “En defensa de los derechos fundamentales en Internet”</title>
		<link>http://quenerapu.com/general/manifiesto-%e2%80%9cen-defensa-de-los-derechos-fundamentales-en-internet%e2%80%9d/</link>
		<comments>http://quenerapu.com/general/manifiesto-%e2%80%9cen-defensa-de-los-derechos-fundamentales-en-internet%e2%80%9d/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 23:49:50 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[En red]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[democracia]]></category>
		<category><![CDATA[derechos fundamentales]]></category>
		<category><![CDATA[España]]></category>
		<category><![CDATA[manifesto]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=130</guid>
		<description><![CDATA[Manifiesto ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones que afectan al libre ejercicio de las libertades de expresión.]]></description>
			<content:encoded><![CDATA[<p>Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, <em>bloggers</em>, usuarios, profesionales y creadores de Internet manifestamos nuestra firme oposición al proyecto, y declaramos que:</p>
<ol>
<li><strong>Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos</strong>, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.</li>
<li><strong>La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial</strong>. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.</li>
<li><strong>La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español</strong>, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.</li>
<li><strong>La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural.</strong> Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.</li>
<li><strong>Los autores</strong>, como todos los trabajadores,<strong> tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades</strong> asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.</li>
<li>Consideramos que <strong>las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales,</strong> en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.</li>
<li><strong>Internet debe funcionar de forma libre y sin interferencias políticas</strong> auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.</li>
<li><strong>Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España,</strong> ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.</li>
<li><strong>Proponemos una verdadera reforma del derecho de propiedad intelectual</strong> orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.</li>
<li><strong>En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público</strong> y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/general/manifiesto-%e2%80%9cen-defensa-de-los-derechos-fundamentales-en-internet%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Construir formularios (casi) automáticamente con PHP</title>
		<link>http://quenerapu.com/php/construir-formularios-casi-automaticamente-con-php/</link>
		<comments>http://quenerapu.com/php/construir-formularios-casi-automaticamente-con-php/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 09:49:22 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[función]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[label]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[textarea]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=129</guid>
		<description><![CDATA[Una función sencilla (y fácilmente escalable) para construir formularios html con php, basándose en simples arrays.]]></description>
			<content:encoded><![CDATA[<p>Construir formularios <strong>html</strong> es una tarea bastante monótona y en la que es fácil cometer algún error tonto y puñetero así que tenía que haber una forma de hacerlos automáticamente (o casi).</p>
<p>Como tengo la costumbre de convertir en <strong>arrays</strong> todo lo que saco de las bases de datos antes de combinarlo con el <strong>html</strong>, una buena parte del camino ya la tenía hecha.</p>
<p>El método que voy a proponer a continuación no es nada del otro mundo y sólo pretende ser un punto de partida para que cada cual lo adapte y complique a su gusto.</p>
<p>Cuando me di cuenta de que un array como este:</p>
<pre class="brush: php;">
$a = array(
	type=&gt;&quot;text&quot;,
	name=&gt;&quot;nombre&quot;,
	value=&gt;&quot;Pepe&quot;,
	)
</pre>
<p>era fácilmente convertible, vía <strong>php</strong>, en un <strong>html</strong> como este:</p>
<pre class="brush: php;">
&lt;input
	type=&quot;&lt;?=$a[type];?&gt;&quot;
	name=&quot;&lt;?=$a[name];?&gt;&quot;
	value=&quot;&lt;?=$a[value];?&gt;&quot;
/&gt;
</pre>
<p>Decidí hacer una función que resolviera la construcción de cualquier formulario simplemente recibiendo los datos necesarios en forma de arrays.</p>
<p>Antes de nada traté de agrupar más o menos los diferentes elementos que componen un formulario: Los <strong>&lt;input&gt;</strong> tipo text, password y hidden tienen una sintaxis muy parecida. A <strong>&lt;textarea&gt;</strong> hay que darle de comer aparte y lo mismo con los <strong>&lt;select&gt;</strong>. Los <strong>&lt;input&gt;</strong> tipo radio y checkbox se portan de una manera muy similar, y luego quedan los <strong>&lt;input&gt;</strong> tipo submit.</p>
<p>En el ejemplo de este artículo presento la <strong>función f</strong>, que resuelve los <strong>&lt;input&gt;</strong> tipo text, password, hidden y submit, los <strong>&lt;textarea&gt;</strong> y los <strong>&lt;select&gt;</strong> y los botones de submit. El resto lo dejo para una pŕoxima ocasión.</p>
<p>El ejemplo resuelve de paso los <strong>&lt;label&gt;</strong> y permite aplicar <strong>class</strong> o <strong>style</strong> particulares a cada elemento. Por cierto: Tengo la costumbre en los formularios de utilizar siempre el mismo valor en <strong>name</strong> y en <strong>id</strong>. No sé si eso es bueno o malo (al menos el validador del W3C no protesta), pero si a alguien no le gusta eso no tiene más que crear una nueva variable para uno de ellos.</p>
<p>Ah! La parte en la que se construye el menú desplegable tipo <strong>&lt;select&gt;</strong> es la que ya presenté en el artículo <a href="http://quenerapu.com/php/construir-un-menu-select/">Construir un menú Select con PHP</a> publicado el 25|09|2009.</p>
<p>Bueno, probadlo y a ver qué os parece. <a href="http://quenerapu.com/ejemplos/f.php">En este link he colgado una demo con CSS y todo</a>.</p>
<pre class="brush: php;">
&lt;?php
$colores = array( // Array de valores para el select
		1=&gt;Azul,
		2=&gt;Negro,
		3=&gt;Naranja,
		4=&gt;Violeta,
		5=&gt;Granate,
		);

$qq=array(
	f=&gt;array( // Datos generales del formulario
		fN=&gt;&quot;loginForm&quot;, // name
		fM=&gt;&quot;post&quot;, // method
		fA=&gt;&quot;form.php&quot;, // action
		fB=&gt;&quot;Enviar&quot;, // texto del botón submit
		),
	ff=&gt;array(
			array( // Datos del input id
				fN=&gt;&quot;id&quot;,
				fV=&gt;123,
				fT=&gt;&quot;hidden&quot;, // Tipo hidden
				),
			array( // Datos del input nombre
				fN=&gt;&quot;nombre&quot;, // Variable
				fV=&gt;&quot;Perico&quot;, // Valor
				fL=&gt;&quot;Nombre&quot;, // Texto para el label
				fT=&gt;&quot;text&quot;, // Tipo text
				fC=&gt;&quot;special&quot;, // Class CSS (dato opcional)
				fS=&gt;&quot;width:100px;&quot;, // Style CSS (dato opcional)
				),
			array( // Datos del input apellidos
				fN=&gt;&quot;apellidos&quot;,
				fV=&gt;&quot;Los Palotes&quot;,
				fL=&gt;&quot;Apellidos&quot;,
				fT=&gt;&quot;text&quot;,
				fC=&gt;&quot;readonly&quot;, // Class CSS (dato opcional)
				fS=&gt;&quot;width:200px;&quot;,
				rO=&gt;true, // queremos que sea 'readonly'
				),
			array( // Datos del input contrasena
				fN=&gt;&quot;contrasena&quot;,
				fV=&gt;&quot;123456&quot;,
				fL=&gt;&quot;Contraseña&quot;,
				fT=&gt;&quot;password&quot;, // Tipo password
				),
			array( // Datos del textarea direccion
				fN=&gt;&quot;direccion&quot;,
				fV=&gt;&quot;Calle de Los Desamparados s/n&quot;,
				fL=&gt;&quot;Dirección&quot;,
				fT=&gt;&quot;textarea&quot;, // Tipo textarea
				fC=&gt;&quot;login&quot;,
				fW=&gt;&quot;10|3&quot;, // Width | Height
				fS=&gt;&quot;width:200px;height:100px;&quot;,
				),
			array( // Datos del select desplegable color
				fN=&gt;&quot;color&quot;,
				fV=&gt;3, // Valor (numérico en este caso)
				fL=&gt;&quot;Color favorito&quot;,
				fT=&gt;&quot;select&quot;, // Tipo select (desplegable)
				fC=&gt;&quot;login&quot;,
				fZ=&gt;$colores, // Array de valores
				),
		),
	);

function f($x)
	{
	extract($x);
	$r=&quot;&lt;form name=\&quot;{$f[fN]}\&quot; id=\&quot;{$f[fN]}\&quot; method=\&quot;{$f[fM]}\&quot; action=\&quot;{$f[fA]}\&quot;&gt;\n&quot;;
	for($i=0;$i&lt;count($ff);++$i)
		{
		if(in_array($ff[$i][fT],array(&quot;text&quot;,&quot;password&quot;,&quot;hidden&quot;,))){$r.=&quot;\t&quot;.($ff[$i][fT]!=&quot;hidden&quot;?&quot;&lt;label for=\&quot;{$ff[$i][fN]}\&quot;&gt;{$ff[$i][fL]}&lt;/label&gt;&quot;:&quot;&quot;).&quot;&lt;input type=\&quot;{$ff[$i][fT]}\&quot; name=\&quot;{$ff[$i][fN]}\&quot; id=\&quot;{$ff[$i][fN]}\&quot; value=\&quot;{$ff[$i][fV]}\&quot;&quot;.($ff[$i][fT]!=&quot;hidden&quot;?($ff[$i][fC]?&quot; class=\&quot;{$ff[$i][fC]}\&quot;&quot;:&quot;&quot;).($ff[$i][fS]?&quot; style=\&quot;{$ff[$i][fS]}\&quot;&quot;:&quot;&quot;):&quot;&quot;).($ff[$i][rO]?&quot; readonly=\&quot;readonly\&quot;&quot;:&quot;&quot;).&quot; /&gt;&quot;.($ff[$i][fT]!=&quot;hidden&quot;?&quot;&lt;br /&gt;&quot;:&quot;&quot;).&quot;\n&quot;;}
		if(in_array($ff[$i][fT],array(&quot;textarea&quot;,))){$r.=&quot;\t&lt;label for=\&quot;{$ff[$i][fN]}\&quot;&gt;{$ff[$i][fL]}&lt;/label&gt;&lt;textarea name=\&quot;{$ff[$i][fN]}\&quot; id=\&quot;{$ff[$i][fN]}\&quot;&quot;;$w=explode('|',$ff[$i][fW]);$r.=&quot; cols=\&quot;{$w[0]}\&quot; rows=\&quot;{$w[1]}\&quot;&quot;.($ff[$i][fC]?&quot; class=\&quot;{$ff[$i][fC]}\&quot;&quot;:&quot;&quot;).($ff[$i][fS]?&quot; style=\&quot;{$ff[$i][fS]}\&quot;&quot;:&quot;&quot;).&quot;&gt;{$ff[$i][fV]}&lt;/textarea&gt;&lt;br /&gt;\n&quot;;}
		if(in_array($ff[$i][fT],array(&quot;select&quot;,))){$r.=&quot;\t&lt;label for=\&quot;{$ff[$i][fN]}\&quot;&gt;{$ff[$i][fL]}&lt;/label&gt;&lt;select name=\&quot;{$ff[$i][fN]}\&quot; id=\&quot;{$ff[$i][fN]}\&quot;&gt;&quot;;foreach($ff[$i][fZ] as $x=&gt;$v){$r.=&quot;&lt;option value=\&quot;$i\&quot;&quot;;$r.=$ff[$i][fV]==$x?&quot; selected=\&quot;selected\&quot;&quot;:&quot;&quot;;$r.=&quot;&gt;&quot;.$v.&quot;&lt;/option&gt;&quot;;}$r.=&quot;&lt;/select&gt;&lt;br /&gt;\n&quot;;}
		}
	$r.=&quot;&lt;input type=\&quot;submit\&quot; value=\&quot;{$f[fB]}\&quot; /&gt;&quot;;
	$r.=&quot;&lt;/form&gt;&quot;;
	return $r;
	}

echo f($qq);
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/php/construir-formularios-casi-automaticamente-con-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usa el jQuery de Google, anda</title>
		<link>http://quenerapu.com/javascript/usa-el-jquery-de-google-anda/</link>
		<comments>http://quenerapu.com/javascript/usa-el-jquery-de-google-anda/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 02:11:11 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[javaScript]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=127</guid>
		<description><![CDATA[Usar la misma librería jQuery que usa Google tiene muchas ventajas. Por eso recomiendo hacerlo.]]></description>
			<content:encoded><![CDATA[<p>Al programar usando <a href="http://jquery.com/">jQuery</a> es lo común colgarlo de un directorio del proyecto e invocarlo con el clásico:</p>
<pre class="brush: xml; gutter: false;">
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.min.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Sin embargo <a href="http://encosia.com/2008/12/10/3-reasons-why-you-should-let-google-host-jquery-for-you/">un artículo que leí hace algún tiempo</a> [Encosia.com] recomienda evitar esa práctica, y utilizar el jQuery que Google cuelga de sus servidores y usa para sus propios sitios web. De esta manera:</p>
<pre class="brush: xml; gutter: false;">
&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;
</pre>
<p><strong>Dave Ward</strong>, el autor, lo razonaba con tres sólidos argumentos:</p>
<ul>
<li><strong>Tu página cargará antes.</strong> jQuery es una librería pesada y, asúmelo, siempre se cargará antes desde un servidor de Google (un señor servidor) que desde el tuyo.</li>
<li><strong>¿He dicho ya que tu página cargará antes?</strong> Mientras el navegador lee jQuery desde el servidor de Google, puede ir cargando el resto de la web que sí están en tu servidor. Simultáneamente. Eso es un gran ahorro de tiempo.</li>
<li><strong>Tu página (y todas nuestras páginas) cargarán antes.</strong> Cuando forzamos la carga de un jQuery nuevo en cada web, estamos llenando la caché de los navegadores de material redundante. Pero si en vez de eso llamamos siempre al mismo jQuery de Google, si todos los hiciéramos, los navegadores no necesitarían cargar jQuery <strong>porque ya lo tienen.</strong></li>
</ul>
<p>Me convenció aquel artículo así que de un tiempo a esta parte procuro no apuntar hacia un jQuery en mi servidor, sino al que alberga Google en sus servidor de APIs.</p>
<p>No obstante, con un proyecto web en el que uso esta técnica me pasó una cosa curiosa el otro día. Durante un viaje en tren aproveché para programar un rato y al no tener acceso a Internet el jQuery de Google, claro, no cargaba y por consiguiente no podía trabajar.</p>
<p>La solución fue obvia: Temporalmente cambié esa línea, dejando de apuntar al servidor de Google para apuntar a un jQuery local.<br />
Y viendo que esto podía sucederme de nuevo en el futuro, opté por algo también obvio, que es mantener ambas líneas en el código de la página y comentar la que sobra según la situación. Nada del otro mundo.</p>
<p>Pero luego me empeñé en perfeccionar un poco la cosa y salió esto:</p>
<pre class="brush: xml; gutter: false;">
&lt;script type=&quot;text/javascript&quot; src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;if(typeof jQuery==='undefined'){document.write(unescape(&quot;&lt;scri&quot;+&quot;pt src='js/jquery-1.3.2.min.js' type='text/javascript'&gt;&lt;/scri&quot;+&quot;pt&gt;&quot;));}&lt;/script&gt;
</pre>
<p>Utilizando este código <strong>me despreocupo totalmente del tema</strong>. ¿Que encuentra el jQuery de Google? Lo usa. ¿Que no? Pues usa el jQuery local.</p>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/javascript/usa-el-jquery-de-google-anda/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>El layout con columnas más simple del mundo (probablemente)</title>
		<link>http://quenerapu.com/css/el-layout-con-columnas-mas-simple-del-mundo-probablemente/</link>
		<comments>http://quenerapu.com/css/el-layout-con-columnas-mas-simple-del-mundo-probablemente/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 16:19:54 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[crossbrowser]]></category>
		<category><![CDATA[minimal]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=125</guid>
		<description><![CDATA[Hace tiempo que deseaba terminar con mis quebraderos de cabeza al diseñar sitios web con columnas. Y creo que al fin lo he conseguido.]]></description>
			<content:encoded><![CDATA[<p>Hace mucho tiempo que deseaba dar definitivamente por cerrados mis quebraderos de cabeza al diseñar sitios web con columnas. Y creo que al fin lo he conseguido.</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
 &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
&lt;title&gt;TinyCSS&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
*{margin:0;padding:0;}
h1{font-size:1em;}
.header{border-bottom:1px solid #aaa;}
.container{overflow:hidden;height:100% !important;}
.main{width:500px;margin-bottom:-1000px;padding-bottom:1000px;float:left;}
.sideBar{margin-bottom:-1000px;padding-bottom:1000px;float:right;}
.s1{width:160px;border-left:1px solid #aaa;}
.s2{width:300px;border-left:1px solid #aaa;}
.footer{border-top:1px solid #aaa;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;header&quot;&gt;&lt;h1&gt;Header&lt;/h1&gt;&lt;/div&gt;
&lt;div class=&quot;container&quot;&gt;
	&lt;div class=&quot;sideBar s2&quot;&gt;&lt;h1&gt;Sidebar 2&lt;/h1&gt;&lt;/div&gt;
	&lt;div class=&quot;sideBar s1&quot;&gt;&lt;h1&gt;Sidebar 1&lt;/h1&gt;&lt;/div&gt;
	&lt;div class=&quot;main&quot;&gt;&lt;h1&gt;Main&lt;/h1&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;footer&quot;&gt;&lt;h1&gt;Footer&lt;/h1&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Si bien el resultado final es bastante feo (<a href="http://quenerapu.com/ejemplos/tinycss/01/">puedes ver una demo aquí</a>) el peso de este documento es de menos de 1Kb. y es compatible con <strong>Internet Explorer</strong> (versión 6 incluída), <strong>Firefox</strong>, <strong>Chrome</strong>, <strong>Opera</strong> y <strong>Safari</strong> (<a href="http://browsershots.org/http://quenerapu.com/ejemplos/tinycss/02/">Browsershots.org</a>).</p>
<p>No será difícil para un diseñador hábil con las CSS partir de este esqueleto para crear algo mucho más agradable a la vista.</p>
<p>Lo que más me gusta es que los <strong>&lt;div&gt;</strong> de las columnas pueden crecer al alto tanto como quieras sin preocuparte por sus vecinas, que se prolongarán en lo vertical para que todas sean iguales (<a href="http://quenerapu.com/ejemplos/tinycss/02/">con unos ejemplos me explico mejor</a>). Para ello no he usado ni javaScript ni el conocido método <a href="http://www.alistapart.com/articles/fauxcolumns/">Faux Columns</a>, sino un truco CSS que consiste en atribuir</p>
<pre class="brush: css; gutter: false;">
margin-bottom:-1000px; padding-bottom:1000px;
</pre>
<p>a cada una de las columnas, y</p>
<pre class="brush: css; gutter: false;">
overflow:hidden;
</pre>
<p>al <strong>&lt;div&gt;</strong> que las contiene.</p>
<p>Y para terminar, es importante recordar que en la línea</p>
<pre class="brush: css; gutter: false;">
.container{overflow:hidden;height:100% !important;}
</pre>
<p><strong>height:100% !important;</strong> son necesarios para que el sistema sea compatible con IE6. <a href="http://ie6update.com">El glorioso día en que IE6 sea desterrado</a> ya no será necesario incluir ese código.</p>
<p>Me ha ayudado mucho un viejo post de <a href="http://www.ejeliot.com/blog/61">Ed Elliot</a>. Gracias Ed!</p>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/css/el-layout-con-columnas-mas-simple-del-mundo-probablemente/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Construir un menú Select con PHP</title>
		<link>http://quenerapu.com/php/construir-un-menu-select/</link>
		<comments>http://quenerapu.com/php/construir-un-menu-select/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 01:42:44 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[función]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=123</guid>
		<description><![CDATA[Función PHP que permite construir dinámicamente un menú desplegable tipo select partiendo de un array.]]></description>
			<content:encoded><![CDATA[<p>Esta sencilla función PHP permite construir dinámicamente un menú desplegable tipo select, partiendo de un array con los datos del desplegable.</p>
<p>la función permite que uno de los elementos del desplegable ya esté seleccionado previamente.</p>
<pre class="brush: php;">
&lt;?php
$dias = array(
		1=&gt;Lunes,
		2=&gt;Martes,
		3=&gt;Miércoles,
		4=&gt;Jueves,
		5=&gt;Viernes,
		6=&gt;Sábado,
		7=&gt;Domingo
		);

function doSelect($n,$d,$s=null)
	{
	$doSelect = &quot;&lt;select name=\&quot;$n\&quot;&gt;\n&quot;;
	foreach($d as $i=&gt;$v)
		{
		$doSelect.=&quot;\t&lt;option value=\&quot;$i\&quot;&quot;;
		$doSelect.=$s==$i?&quot; selected&quot;:&quot;&quot;;
		$doSelect.=&quot;&gt;&quot;.$v.&quot;&lt;/option&gt;\n&quot;;
		}
	$doSelect.=&quot;&lt;/select&gt;&quot;;
	return $doSelect;
	}

// El miércoles, pre-seleccionado
echo doSelect(&quot;dias&quot;,$dias,3);
?&gt;
</pre>
<p>La función devuelve el siguiente html:</p>
<pre class="brush: xml;">
&lt;select name=&quot;dias&quot;&gt;
	&lt;option value=&quot;1&quot;&gt;Lunes&lt;/option&gt;
	&lt;option value=&quot;2&quot;&gt;Martes&lt;/option&gt;
	&lt;option value=&quot;3&quot; selected&gt;Miércoles&lt;/option&gt;
	&lt;option value=&quot;4&quot;&gt;Jueves&lt;/option&gt;
	&lt;option value=&quot;5&quot;&gt;Viernes&lt;/option&gt;
	&lt;option value=&quot;6&quot;&gt;Sábado&lt;/option&gt;
	&lt;option value=&quot;7&quot;&gt;Domingo&lt;/option&gt;
&lt;/select&gt;
</pre>
<p>Si no quisiéramos ningún elemento pre-seleccionado en el desplegable, sólo tenemos que omitir el tercer parámetro de la función.</p>
<pre class="brush: php;">
&lt;?php
// Ningún día pre-seleccionado
echo doSelect(&quot;dias&quot;,$dias);
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/php/construir-un-menu-select/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Logo Coren</title>
		<link>http://quenerapu.com/vector/logo-coren/</link>
		<comments>http://quenerapu.com/vector/logo-coren/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 18:12:17 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[Vector]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[cdr]]></category>
		<category><![CDATA[coren]]></category>
		<category><![CDATA[fh9]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[svg]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=119</guid>
		<description><![CDATA[Logo vectorizado de Coren, para quien lo pueda necesitar.<br />En versiones .svg, .ai, .fh9 y .cdr.]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-120" title="Logo Coren" src="http://quenerapu.com/wp-content/uploads/2009/07/logocoren.gif" alt="Logo Coren" width="400" height="220" /></p>
<p>Logo vectorizado de <a href="http://coren.es/" target="_blank">Coren</a>, para quien lo pueda necesitar:</p>
<p><a href="http://quenerapu.com/logoteca/coren.svg"><img style="float:left;margin-right:5px;" title="Download SVG" src="http://quenerapu.com/images/download-svg.gif" alt="" width="48" height="60" /></a><a href="http://quenerapu.com/logoteca/coren.ai"><img style="float:left;margin-right:5px;" title="Download Illustrator" src="http://quenerapu.com/images/download-ai.gif" alt="" width="48" height="60" /></a><a href="http://quenerapu.com/logoteca/coren.fh9"><img style="float:left;margin-right:5px;" title="Download FreeHand" src="http://quenerapu.com/images/download-fh9.gif" alt="" width="48" height="60" /></a><a href="http://quenerapu.com/logoteca/coren.cdr"><img style="float:left;margin-right:5px;" title="Download CorelDraw" src="http://quenerapu.com/images/download-cdr.gif" alt="" width="48" height="60" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/vector/logo-coren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Constantes dentro de una cadena de texto</title>
		<link>http://quenerapu.com/php/constantes-dentro-de-una-cadena-de-texto/</link>
		<comments>http://quenerapu.com/php/constantes-dentro-de-una-cadena-de-texto/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 14:13:31 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[constantes]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=117</guid>
		<description><![CDATA[Del mismo modo que puedo utilizar variables dentro de una cadena de texto, he buscado la manera de hacer lo mismo con las constantes.]]></description>
			<content:encoded><![CDATA[<p>Buscaba hoy la manera de resolver esto:</p>
<p>Del mismo modo que puedo utilizar variables <strong>dentro</strong> de una cadena de texto:</p>
<pre class="brush: php;">
&lt;?php
	$nombre = &quot;Manolo&quot;;
	$alias = &quot;El del bombo&quot;;
	echo &quot;Me llamo $nombre ($alias)&quot;;

//	Bien: Devuelve 'Me llamo Manolo (El del bombo)'
?&gt;
</pre>
<p>Hasta donde yo sé, no es posible hacer nada parecido con las constantes:</p>
<pre class="brush: php;">
&lt;?php
	define(&quot;NOMBRE&quot;, &quot;Manolo&quot;);
	define(&quot;ALIAS&quot;, &quot;El del bombo&quot;);
	echo &quot;Me llamo NOMBRE (ALIAS)&quot;;

//	Mal: Devuelve 'Me llamo NOMBRE (ALIAS)'
?&gt;
</pre>
<p>El único modo posible sería este:</p>
<pre class="brush: php;">
&lt;?php
	echo &quot;Me llamo &quot;.NOMBRE .&quot;(&quot;.ALIAS.&quot;)&quot;;

//	Bien: Devuelve 'Me llamo Manolo (El del bombo)'
?&gt;
</pre>
<p>Pero a mi siempre me resultó bastante incómoda esta sintaxis:</p>
<p><strong>&#8221;texto &#8221;.$variable_o_CONSTANTE.&#8221; siguiente texto&#8221;</strong></p>
<p>Así que hoy decidí apartar un poco de tiempo para buscar un modo de incluir constantes <strong>dentro</strong> de una cadena de texto con misma libertad que tengo cuando uso variables. Y creo que lo encontré <img src='http://quenerapu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Para empezar, <strong>define()</strong> no es la única manera de definir una constante. En <a href="http://php.net/manual/en/function.constant.php">php.net</a> he visto que las constantes se pueden definir dentro de clases, y que lo hacen con una sintaxis un poco diferente:</p>
<pre class="brush: php;">
&lt;?php
	class constantes
	{
	const NOMBRE = &quot;Manolo&quot;;
	const ALIAS = &quot;El del bombo&quot;;
	}
?&gt;
</pre>
<p>Y a estas constantes puedes llamarlas así:</p>
<pre class="brush: php;">
&lt;?php echo constantes::NOMBRE; ?&gt;
</pre>
<p>Hasta ahí, estupendo, pero el problema viene cuando quiero llamar a la constante desde una instancia:</p>
<pre class="brush: php;">
&lt;?php
	$c = new constantes();
	echo &quot;Me llamo $c::NOMBRE ($c::ALIAS)&quot;;

//	Mal: Devuelve 'Me llamo ()'
?&gt;
</pre>
<p>Tirando de Google, encontré en <a href="http://www.cristalab.com/">cristalab.com</a> una solución que me ha parecido elegante. Ellos publicaron en marzo de 2007 el artículo <strong><a href="http://www.cristalab.com/tips/como-usar-y-acceder-a-constantes-en-clases-de-php-c35762l/">Cómo usar y acceder a constantes en clases de PHP</a></strong> y en él proponían añadir una función privada que permitiera llamar a cualquiera de esas constantes. La cosa queda así</p>
<pre class="brush: php;">
&lt;?php
	class constantes
	{
	const NOMBRE = &quot;Manolo&quot;;
	const ALIAS = &quot;El del bombo&quot;;

	private function __get($name)
		{
		if(defined(&quot;self::$name&quot;))
			{
			return constant(&quot;self::$name&quot;);
			}
		trigger_error(&quot;$name isn't defined&quot;);
		}
	}
?&gt;
</pre>
<p>De modo que ahora ya puedo hacer esto:</p>
<pre class="brush: php;">
&lt;?php
	$c = new constantes();
	echo &quot;Me llamo $c-&gt;NOMBRE ($c-&gt;ALIAS)&quot;;

//	Bien: Devuelve 'Me llamo Manolo (El del bombo)'
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/php/constantes-dentro-de-una-cadena-de-texto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Me encanta SELECT FOUND_ROWS()</title>
		<link>http://quenerapu.com/mysql/me-encanta-select-found_rows/</link>
		<comments>http://quenerapu.com/mysql/me-encanta-select-found_rows/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 10:51:17 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[found_rows()]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[sql_calc_found_rows]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=116</guid>
		<description><![CDATA[La mejor forma de obtener el total de registros resultado de un SELECT sin tener que hacer un SELECT COUNT() previo.]]></description>
			<content:encoded><![CDATA[<p>Muchas veces necesito paginar el resultado de una consulta mySQL.</p>
<pre class="brush: sql;">
SELECT * FROM tapas WHERE meGusta=true
</pre>
<p>Esto daría más de 200 resultados (soy un goloso)</p>
<p>Tengo una función para paginar (ya escribiré sobre ella más adelante) pero hoy quiero rendir homenaje a la imprescindible función de mySQL <strong>SELECT FOUND_ROWS()</strong>.</p>
<p>Supongamos que quiero paginar un listado de más de 200 resultados. Ya tengo claro que quiero mostrar 25 registros por página así que añado a la consulta SELECT la cláusula LIMIT</p>
<pre class="brush: sql;">
SELECT * FROM tapas WHERE meGusta=true ORDER BY importancia LIMIT 0,25
</pre>
<p>Y así, vale, listo los 25 primeros y luego con</p>
<pre class="brush: sql;">
SELECT * FROM tapas WHERE meGusta=true ORDER BY importancia LIMIT 25,25
</pre>
<p>listo los 25 siguientes y así consecutivamente, pero: ¡quiero paginarlo! Quiero saber de antemano cuántos van a ser en total y poder calcular así cuántas páginas necesitaré.</p>
<p>A priori parece inevitable hacer antes de nada una consulta con SELECT COUNT para hacer el recuento y luego la consulta SELECT &#8216;oficial&#8217;, pero advierto: *este no es el camino*.</p>
<pre class="brush: php;">
&lt;?php
// Primer SELECT sólo para contar el total
$q = mysql_query(&quot;SELECT COUNT(*) AS rt FROM tapas WHERE meGusta=true&quot;);
$r = mysql_fetch_array($q);
$rp = 25; // Resultados por página
$rt = $r[rt]; // Total de registros
$tp = $rt/$rp; // Total de páginas

// Segundo SELECT para generar el listado
$p = isset($_GET['p'] &amp;&amp; $_GET['p']&lt;=$tp)?$_GET['p']:0; // A qué página vamos
$q = mysql_query(&quot;SELECT * FROM tapas WHERE meGusta=true ORDER BY importancia LIMIT &quot;.$p*$rp.&quot;,&quot;.$rp);
while($r=mysql_fetch_array($q))
	{
//	bla, bla, bla...
	}
?&gt;
</pre>
<p><strong>Pero NO. No debemos hacerlo así</strong>. Estaríamos consumiendo recursos inútilmente. Para esto tenemos el dúo <strong>SELECT SQL_CALC_FOUND_ROWS</strong> y <strong>SELECT FOUND_ROWS()</strong></p>
<p>Este SÍ es el camino</p>
<pre class="brush: php;">
&lt;?php
// Todo con un único SELECT
$rp = 25; // Resultados por página
$p = (isset($_GET['p']) &amp;&amp; $_GET['p']&lt;=$tp)?$_GET['p']:0; // A qué página vamos
$q = mysql_query(&quot;SELECT SQL_CALC_FOUND_ROWS * FROM tapas WHERE meGusta=true ORDER BY importancia LIMIT &quot;.$p*$rp.&quot;,&quot;.$rp);
$rt = mysql_fetch_row(mysql_query(&quot;SELECT FOUND_ROWS()&quot;)); // Total de registros
$tp = $rt[0]/$rp; // Total de páginas
echo &quot;&lt;ul&gt;&quot;;
while($r=mysql_fetch_array($q))
	{
	echo &quot;&lt;li&gt;$r[tapa]&lt;/li&gt;;
	}
echo &quot;&lt;/ul&gt;&quot;;
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/mysql/me-encanta-select-found_rows/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
