<?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ú &#187; arrays</title>
	<atom:link href="http://quenerapu.com/etiquetas/arrays/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>Thu, 19 Jan 2012 13:02:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<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; title: ; notranslate">
$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; title: ; notranslate">
&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; title: ; notranslate">
&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>3</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; title: ; notranslate">
&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; title: ; notranslate">
&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; title: ; notranslate">
&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>3</slash:comments>
		</item>
		<item>
		<title>Web multilingüe</title>
		<link>http://quenerapu.com/php/web-multingue/</link>
		<comments>http://quenerapu.com/php/web-multingue/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 16:48:15 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[función]]></category>
		<category><![CDATA[i18n]]></category>

		<guid isPermaLink="false">http://quenerapu.local/?p=96</guid>
		<description><![CDATA[Una función PHP pequeña y sencilla (nada del otro mundo, está basada en arrays) que facilita el desarrollo de páginas web multingües.]]></description>
			<content:encoded><![CDATA[<p>Me planteo hacer una web en 3 idiomas: Supongamos español, inglés y alemán.</p>
<p>Todo en esta web es exactamente igual en los tres idiomas salvo naturalmente, los textos. Así que vamos a ser organizados desde el principio y no caeremos en aquello de &#8216;hacer la misma web tres veces&#8217;.</p>
<p>Esta simple función devuelve el texto en el idioma correspondiente para cada palabra o cadena de texto solicitada.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
function l($t,$i=&quot;es&quot;)
	{
	$l = array();
	$l['enviar'] =	array(
					&quot;es&quot;=&gt;&quot;Enviar&quot;,
					&quot;en&quot;=&gt;&quot;Send&quot;,
					&quot;de&quot;=&gt;&quot;Senden&quot;,
					);
	$l['cancelar'] = array(
					&quot;es&quot;=&gt;&quot;Cancelar&quot;,
					&quot;en&quot;=&gt;&quot;Cancel&quot;,
					&quot;de&quot;=&gt;&quot;Abbrechen&quot;,
					);
	$l['despedida'] = array(
					&quot;es&quot;=&gt;&quot;Hasta luego&quot;,
					&quot;en&quot;=&gt;&quot;See you later&quot;,
					&quot;de&quot;=&gt;&quot;Tschüs&quot;,
					);
	return $l[$t][$i];
	}

$i = &quot;de&quot;; // El idioma elegido.
?&gt;
&lt;p&gt;&lt;?=l(&quot;despedida&quot;,$i);?&gt;&lt;/p&gt;
&lt;input type=&quot;submit&quot; value=&quot;&lt;?=l(&quot;enviar&quot;,$i);?&gt;&quot;&gt;
&lt;input type=&quot;button&quot; value=&quot;&lt;?=l(&quot;cancelar&quot;,$i);?&gt;&quot;&gt;
</pre>
<p>La <strong>función l($t,$i)</strong> es muy fácil de manejar. Sin complicación podemos incorporar palabras o frases nuevas, o añadir un idioma más. Lo de dar en la función un valor predeterminado a <strong>$i</strong> es simplemente para tener un idioma por defecto, mientras el usuario no elige el suyo.</p>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/php/web-multingue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>El sistema de plantillas más simple del mundo (probablemente)</title>
		<link>http://quenerapu.com/php/el-sistema-de-plantillas-mas-simple-del-mundo-probablemente/</link>
		<comments>http://quenerapu.com/php/el-sistema-de-plantillas-mas-simple-del-mundo-probablemente/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 04:23:11 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[función]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://quenerapu.local/?p=42</guid>
		<description><![CDATA[Un método muy sencillo de separar forma de contenido, con lo que el diseñador web y el programador podrán trabajar simultáneamente.]]></description>
			<content:encoded><![CDATA[<p>Supongamos que acabo de diseñar en HTML una ficha tipo (voy a hacer algo muy básico, sólo para ilustrar):</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;[NOMBRE] [APELLIDO]&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Ficha número    [ID]&lt;/h1&gt;
	&lt;p&gt;&lt;b&gt;Nombre:&lt;/b&gt;   [NOMBRE] [APELLIDO]&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;Edad:&lt;/b&gt;     [EDAD] años&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;Teléfono:&lt;/b&gt; [TELÉFONO]&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;eMail:&lt;/b&gt;    &lt;a href=&quot;mailto:[EMAIL]&quot;&gt;[EMAIL]&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Y ahora convierto las variables a sintaxis PHP básica, manteniendo el HTML intacto:</p>
<pre class="brush: php; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;&lt;?=$nombre.' '.$apellido;?&gt;&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Ficha número    &lt;?=$id;?&gt;&lt;/h1&gt;
	&lt;p&gt;&lt;b&gt;Nombre:&lt;/b&gt;   &lt;?=$nombre.' '.$apellido;?&gt;&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;Edad:&lt;/b&gt;     &lt;?=$edad;?&gt; años&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;Teléfono:&lt;/b&gt; &lt;?=$telefono;?&gt;&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;eMail:&lt;/b&gt;    &lt;a href=&quot;mailto:&lt;?=$eMail;?&gt;&quot;&gt;&lt;?=$eMail;?&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>LLamo a esta plantilla «ficha.php» y la guardo en una carpeta «plantillas», por ejemplo. A continuación, en un documento nuevo (que llamaré «index.php», para ser original) declaro la función que sirve para crear contenidos en base a plantillas.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
function tpl($p,$d=array())
	{
	extract($d);
	ob_start();
	require('plantillas/'.$p.'.php');
	return ob_get_clean();
	}
?&gt;
</pre>
<p>Y ya está: No tengo más que llamar a esa función con la info obtenida de la base de datos cada vez que quiera volcarla en pantalla utilizando esa plantilla.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
echo tpl('ficha',
			array(
				'id'=&gt;      123,
				'nombre'=&gt;  'Juan',
				'apellido'=&gt;'Gómez',
				'edad'=&gt;    33,
				'telefono'=&gt;'987654321',
				'eMail'=&gt;   'foo@bar.es'
				)
		);
?&gt;
</pre>
<p>Con ese PHP generamos este HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;Juan Gómez&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Ficha número    123&lt;/h1&gt;
	&lt;p&gt;&lt;b&gt;Nombre:&lt;/b&gt;   Juan Gómez&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;Edad:&lt;/b&gt;     33 años&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;Teléfono:&lt;/b&gt; 987654321&lt;/p&gt;
	&lt;p&gt;&lt;b&gt;eMail:&lt;/b&gt;    &lt;a href=&quot;mailto:foo@bar.es&quot;&gt;foo@bar.es&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>La principal ventaja que presenta este método es que estoy separando en la medida de lo posible la forma del contenido. El documento «ficha.php» es fácilmente editable por un diseñador web sin conocimientos de programación PHP (Tan sólo ha de comprender la sintaxis <strong>&lt;?=$variable;?&gt;</strong>, que no es mucho pedir), mientras que el documento «index.php» sólo contiene programación PHP, sin una sola etiqueta HTML molestando por medio, de modo que el programador se centra exclusivamente en la programación.</p>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/php/el-sistema-de-plantillas-mas-simple-del-mundo-probablemente/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

