<?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"
	>

<channel>
	<title>QuarkBlog &#187; CakePHP</title>
	<atom:link href="http://quarkblog.org/category/programacin/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://quarkblog.org</link>
	<description>If you can read this, you need another beer.</description>
	<pubDate>Thu, 07 Aug 2008 07:20:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Cook up websites fast with CakePHP, V</title>
		<link>http://quarkblog.org/2007/01/18/cook-up-websites-fast-with-cakephp-v/</link>
		<comments>http://quarkblog.org/2007/01/18/cook-up-websites-fast-with-cakephp-v/#comments</comments>
		<pubDate>Thu, 18 Jan 2007 21:08:15 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.org/2007/01/18/cook-up-websites-fast-with-cakephp-v/</guid>
		<description><![CDATA[IBM llega al final de la serie de artículos dedicados al framework CakePHP con esta entrega:
 Generally, caching happens anytime a request is made, and the responding application says, &#8220;I don&#8217;t have to go get that. I&#8217;ve already got one.&#8221; Most of the time, when a computer user hears the word &#8220;cache,&#8221; he thinks of [...]]]></description>
			<content:encoded><![CDATA[<p>IBM llega al final de la serie de artículos dedicados al framework CakePHP con esta entrega:</p>
<blockquote><p> Generally, caching happens anytime a request is made, and the responding application says, &#8220;I don&#8217;t have to go get that. I&#8217;ve already got one.&#8221; Most of the time, when a computer user hears the word &#8220;cache,&#8221; he thinks of a browser&#8217;s cache. Typically, in order to speed up the user experience, your browser will keep copies of what it believes are static files &#8212; generally images, stylesheets, static HTML, and script files. While this type of caching can sometimes cause problems for developers of Web applications, this type of caching is not our focus here.</p></blockquote>
<p>El link al artículo <a href="http://www-128.ibm.com/developerworks/library/os-php-cake5/index.html">online</a>, sin necesidad de registro.</p>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2007/01/18/cook-up-websites-fast-with-cakephp-v/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cook up websites fast with CakePHP, IV</title>
		<link>http://quarkblog.org/2007/01/10/cook-up-websites-fast-with-cakephp-iv/</link>
		<comments>http://quarkblog.org/2007/01/10/cook-up-websites-fast-with-cakephp-iv/#comments</comments>
		<pubDate>Wed, 10 Jan 2007 19:33:33 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.org/2007/01/10/cook-up-websites-fast-with-cakephp-iv/</guid>
		<description><![CDATA[IBM publica otra entrega del curso sobre CakePHP:
 There are multiple ways of saving session data using CakePHP’s Session component, and each method has its advantages. In this tutorial, you’ll learn how to use the Session component by incorporating all three ways into your application, so you’ll be able to pick the best one that [...]]]></description>
			<content:encoded><![CDATA[<p>IBM publica otra entrega del curso sobre CakePHP:</p>
<blockquote><p> There are multiple ways of saving session data using CakePHP’s Session component, and each method has its advantages. In this tutorial, you’ll learn how to use the Session component by incorporating all three ways into your application, so you’ll be able to pick the best one that works for you. You’ll also learn how to use the Request Handler component to aid you in your handling of various HTTP requests, including requests from mobile browsers, or requests containing XML or HTML content.</p></blockquote>
<p>Versión <a href="http://www-128.ibm.com/developerworks/edu/os-dw-os-php-cake4.html">online</a> o versión <a href="https://www6.software.ibm.com/developerworks/education/os-php-cake4/os-php-cake4-a4.pdf">PDF</a>, a gusto del consumidor.</p>
<p>Happy baking!!</p>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2007/01/10/cook-up-websites-fast-with-cakephp-iv/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Primera technical preview de CakePHP 1.2</title>
		<link>http://quarkblog.org/2006/12/25/primera-technical-preview-de-cakephp-12/</link>
		<comments>http://quarkblog.org/2006/12/25/primera-technical-preview-de-cakephp-12/#comments</comments>
		<pubDate>Mon, 25 Dec 2006 18:47:33 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.org/2006/12/25/primera-technical-preview-de-cakephp-12/</guid>
		<description><![CDATA[Estas navidades nos dejan un regalito a los desarrolladores de PHP: CakePHP 1.2.0.4206_dev es la próxima versión de este framework e incorpora jugosas novedades. Es una versión de desarrollo así que no todas las novedades están finalizadas y es posible que todavía se incorporen algunas funcionalidades sorpresa antes de cerrar la rama.
Esto es lo nuevo [...]]]></description>
			<content:encoded><![CDATA[<p>Estas navidades nos dejan un regalito a los desarrolladores de PHP: <a href="http://cakeforge.org/frs/?group_id=23&amp;release_id=171"><strong>CakePHP 1.2.0.4206_dev</strong></a> es la próxima versión de este framework e incorpora jugosas novedades. Es una versión de desarrollo así que no todas las novedades están finalizadas y es posible que todavía se incorporen algunas funcionalidades sorpresa antes de cerrar la rama.</p>
<p>Esto es lo nuevo en <strong>CakePHP 1.2</strong>:</p>
<ul>
<li><strong>Validación:</strong> Se ha ncorporado una nueva clase de validación de datos que reemplaza a los antiguos y escasos validadores, ya no habrá que implementar hacks para controlar en detalle la validación de formularios.</li>
<li><strong>FormHelper</strong>: Ha sido mejorado y extendido notablemente. El nuevo modelo está completamente orientado a objetos y permite simplificar y reducir la cantidad de código que escribimos para crear un formulario.</li>
<li><strong>EmailComponent</strong>: Por fín un método unificado para enviar correo electrónico en texto plano, HTML o ambos. Otro hack menos que tenemos que implementar.</li>
<li><strong>SecurityComponent</strong>: Ahora con soporte para <code>HTTP_AUTH</code> a través de la variable <code>$requireLogin</code>.</li>
<li><strong>CTP</strong>: El antiguo formato <code>".thtml"</code> se desaconseja en favor del nuevo <code>".ctp"</code>. Este servirá de plantilla para cualquier tipo de contenido, sin importar que sea XHTML, XML, RSS, etc.</li>
<li><strong>Paginación</strong>: la paginación de datos finalmente se integra en el diseño del framework. Se encuenta en el método <code>paginate</code> en la clase <code>Controller</code> y en <code>PaginatorHelper</code>. La operación de paginado es bastante simple. Ahora se utiliza <code>$this-&gt;paginate();</code> en lugar de <code>$this-&gt;Model-&gt;findAll();</code>, después en las vistas <code>$paginator-&gt;next()</code>. <code>PaginatorHelper</code> se añade automáticamente al utilizar <code>paginate()</code>.</li>
<li><strong>Extensiones Url</strong>: especificar el contenido del recurso solicitado es ahora más sencillo con <code>Router::parseExtensions()</code> y <code>RequestHandler</code>. Cosas como XML y RSS pueden añadirse sin cambiar el código del controlador. Las vistas se mapean a <code>/app/views/&lt;controller&gt;/&lt;contenttype&gt;/&lt;viewfilename&gt;.ctp</code></li>
<li><strong>Model Behaviors</strong>: Un comportamiento es algo que ayuda a manejar los datos del modelo. De manera similar a como un componente echa una mano al controlador, ahora se pueden utilizar comportamientos para extender la funcionalidad de la capa del modelo. Los comportamientos se almacenan en <code>/app/models/behaviors</code>. Uno de los comportamientos en los que se esta trabajando actualmente es <code>ListBehavior</code>.</li>
<li><strong>Datasources</strong>: La base de datos no es el único sitio donde se pueden almacenar los datos. Ahora se pueden definir DataSources personalizados para utilizar a través de los métodos de los modelos.</li>
<li><strong>i18N y l10N</strong>: Una de las mejoras más demandadas. Permite desplegar aplicaciones en varios idiomas sin necesidad de modificar el código mediante la función <code>__()</code>,  <code>getText</code> se encarga del resto.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2006/12/25/primera-technical-preview-de-cakephp-12/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cook up websites fast with CakePHP, III</title>
		<link>http://quarkblog.org/2006/12/20/cook-up-websites-fast-with-cakephp-iii/</link>
		<comments>http://quarkblog.org/2006/12/20/cook-up-websites-fast-with-cakephp-iii/#comments</comments>
		<pubDate>Wed, 20 Dec 2006 10:49:18 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.org/2006/12/20/cook-up-websites-fast-with-cakephp-iii/</guid>
		<description><![CDATA[IBM publica otra entrega del curso sobre CakePHP:
In this article, you will learn how to use CakePHP’s Sanitize and Security components to help secure your user-submitted data. You will also learn how to handle invalid requests.
En este caso no hace falta registro.
Happy baking!!
]]></description>
			<content:encoded><![CDATA[<p>IBM <a href="http://www-128.ibm.com/developerworks/library/os-php-cake3/index.html">publica otra entrega</a> del curso sobre CakePHP:</p>
<blockquote><p>In this article, you will learn how to use CakePHP’s Sanitize and Security components to help secure your user-submitted data. You will also learn how to handle invalid requests.</p></blockquote>
<p>En este caso no hace falta registro.</p>
<p>Happy baking!!</p>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2006/12/20/cook-up-websites-fast-with-cakephp-iii/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cook up websites fast with CakePHP, II</title>
		<link>http://quarkblog.org/2006/12/13/cook-up-websites-fast-with-cakephp-ii/</link>
		<comments>http://quarkblog.org/2006/12/13/cook-up-websites-fast-with-cakephp-ii/#comments</comments>
		<pubDate>Wed, 13 Dec 2006 21:41:50 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.org/2006/12/13/cook-up-websites-fast-with-cakephp-ii/</guid>
		<description><![CDATA[IBM acaba de publicar la segunda parte de su serie de artículos dedicados al framework CakePHP. En esta ocasión se cubren los temas de scaffolding, el script Bake y las listas de control de acceso:
 This tutorial shows you how to jumpstart your CakePHP application using scaffolding and Bake. You will also learn the ins [...]]]></description>
			<content:encoded><![CDATA[<p>IBM acaba de publicar la <a href="http://www-128.ibm.com/developerworks/edu/os-dw-os-php-cake2.html">segunda parte</a> de su serie de artículos dedicados al framework <a href="http://cakephp.org">CakePHP</a>. En esta ocasión se cubren los temas de <em>scaffolding</em>, el script <em>Bake</em> y las listas de control de acceso:</p>
<blockquote><p> This tutorial shows you how to jumpstart your CakePHP application using scaffolding and Bake. You will also learn the ins and outs of using CakePHP’s Access Control Lists (ACLs). You’ll get a look at what scaffolding is and what it provides. Then you’ll learn how to use Bake to generate the code for a scaffold, letting you tweak it as you go. Finally, you will learn about ACLs: what they are, how to create them, and how to use them in your application.</p></blockquote>
<p>De nuevo vuelve a ser necesario el registro para acceder a él. La primera parte se puede descargar (sin necesidad de registro) en formato PDF de <a href="https://www6.software.ibm.com/developerworks/education/os-php-cake1/os-php-cake1-a4.pdf">aquí</a>.</p>
<p>Happy baking!!</p>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2006/12/13/cook-up-websites-fast-with-cakephp-ii/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Paginado de datos</title>
		<link>http://quarkblog.org/2006/12/08/paginado-de-datos/</link>
		<comments>http://quarkblog.org/2006/12/08/paginado-de-datos/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 17:13:09 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.org/2006/12/08/paginado-de-datos/</guid>
		<description><![CDATA[Después del tsunami menéame de ayer (en un par de horas tuve el tráfico de casi un mes) vamos a retomar un poco la temática habitual hablando de varios trucos para paginar datos en MySQL.
¿Qué es el paginado?
El paginado de datos consiste en trocear una salida de datos muy larga en paquetes mas pequeños y [...]]]></description>
			<content:encoded><![CDATA[<p>Después del tsunami menéame de <a href="http://quarkblog.org/2006/12/07/lo-que-el-codigo-no-hace-en-la-vida-real-y-si-hace-en-las-peliculas/">ayer</a> (en un par de horas tuve el tráfico de casi un mes) vamos a retomar un poco la temática habitual hablando de varios trucos para paginar datos en MySQL.</p>
<h4>¿Qué es el paginado?</h4>
<p>El paginado de datos consiste en trocear una salida de datos muy larga en paquetes mas pequeños y digeribles para el usuario. Hay ejemplos de paginados en la inmensa mayoría de aplicaciones, especialmente en las de Internet. Por ejemplo:</p>
<p>Paginado de <a href="http://www.google.com">Google</a>:</p>
<p class="center"><img src="http://quarkblog.org/wp-content/uploads/2006/12/google-paging.png" id="image426" alt="Paginado de Google" /></p>
<p>Paginado de <a href="http://www.flickr.com">Flickr</a>:</p>
<p class="center"><img src="http://quarkblog.org/wp-content/uploads/2006/12/flickr-paging.png" id="image427" alt="Paginado en Flickr" /></p>
<p>Paginado de <a href="http://www.digg.com">Digg</a>:</p>
<p class="center"><img src="http://quarkblog.org/wp-content/uploads/2006/12/digg-paging.png" id="image428" alt="Paginado en Digg" /></p>
<h4>¿Por qué debo paginar?</h4>
<ul>
<li>Para el usuario es más sencillo ver 10 paquetes de 10 resultados que 100 de golpe.</li>
<li>Probablemente al usuario sólo le interesen los resultados más relevantes que son los que aparecen en la primera o segunda página.</li>
<li>Para la base de datos es más sencillo y rápido traer 10 resultados que 100.</li>
<li>Para el servidor HTTP es más sencillo y rápido servir 10 resultados que pesan 20Kb en lugar de 100 resultados que pesan 200Kb.</li>
</ul>
<h4>¿Cómo paginar datos?</h4>
<p>Para paginar los datos necesitamos de antemano dos cosas: <strong>el tamaño de la pagina</strong> y el <strong>total de filas que tenemos de datos</strong>.</p>
<p>Contamos el total de filas:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">SELECT</span> COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> <span class="kw1">AS</span> total <span class="kw1">FROM</span> employees;</div>
</li>
</ol>
</div>
<pre>
total
---------------
63</pre>
<p>Mediante la instrucción SQL <code>LIMIT <em>n,m</em></code> podemos trocear los datos de salida y mostrar la pagina que nos interese. <code>LIMIT</code> acepta dos parámetros: el primero es el <strong><em>offset</em> de la pagina</strong> y el segundo la <strong>cantidad de filas que devuelve</strong>.</p>
<p>Devolvemos 10 resultados de la pagina 3:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">SELECT</span> id,name <span class="kw1">FROM</span> employees <span class="kw1">LIMIT</span> <span class="nu0">3</span>,<span class="nu0">10</span>;</div>
</li>
</ol>
</div>
<pre>
id      name
------------------------
13     Pepe
22     Manolo
34     Jose
...</pre>
<p>Necesitamos el total de filas para calcular cuantos paquetes de datos (paginas) necesitamos. En este caso tenemos un total de 63 filas paginadas de 10 en 10. Veamos un script PHP muy simple que nos devuelve las paginas:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$pagging</span> = <span class="nu0">10</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;page&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> ? <span class="re0">$current</span> = <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;page&#8217;</span><span class="br0">&#93;</span> : <span class="re0">$current</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$q</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT COUNT(*) FROM employees;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$row</span> = <a href="http://www.php.net/mysql_fetch_assoc"><span class="kw3">mysql_fetch_assoc</span></a><span class="br0">&#40;</span><span class="re0">$q</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$total_pages</span> = <span class="br0">&#40;</span>int<span class="br0">&#41;</span><a href="http://www.php.net/ceil"><span class="kw3">ceil</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">&#8216;total&#8217;</span><span class="br0">&#93;</span>/<span class="re0">$pagging</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//header pagging</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Pagina $current de $total_pages ({$row['total']} resultados)nn&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//body pagging</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$q</span> = msql_query<span class="br0">&#40;</span><span class="st0">&quot;SELECT id,name FROM employees LIMIT {$current-1},$pagging;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <a href="http://www.php.net/mysql_fetch_assoc"><span class="kw3">mysql_fetch_assoc</span></a><span class="br0">&#40;</span><span class="re0">$q</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <a href="http://www.php.net/vsprintf"><span class="kw3">vsprintf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%dt%sn&quot;</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>, <span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">&#8216;name&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//footer pagging</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;«t&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span>=<span class="nu0">0</span>;<span class="re0">$i</span> &lt; <span class="re0">$total_pages</span>;<span class="re0">$i</span>++<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$i</span> === <span class="br0">&#40;</span><span class="re0">$current</span><span class="nu0">-1</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot; [$i] &quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot; $i &quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;t»&quot;</span>;</div>
</li>
</ol>
</div>
<pre>
Pagina  1 de 7 (63 resultados)

13     Pepe
22     Manolo
34     Jose
...

«   [1] 2 3 4 5 6 7   »</pre>
<h4>Consideraciones para MySQL</h4>
<p>Para calcular el paginado debemos utilizar obligatoriamente dos consultas como mínimo, si las consultas son complejas podemos tener un problema de rendimiento importante pero existen maneras de atajar el camino. Si la base de datos que utilizamos es MySQL existe un hack para devolver el resultado paginado y el total de filas en un solo paso.</p>
<p>Seleccionamos la pagina que nos interesa:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">SELECT</span> SQL_CALC_FOUND_ROWS id,name <span class="kw1">FROM</span> employees <span class="kw1">LIMIT</span> <span class="nu0">0</span>,<span class="nu0">10</span>;</div>
</li>
</ol>
</div>
<p>Miramos cuantas filas tiene en total:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">SELECT</span> FOUND_ROWS<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Siguen siendo dos consultas pero a efectos prácticos rinde como <em>&#8220;una y media&#8221;</em>, en cualquier caso nunca será tan lento como hacerlo con las dos consultas anteriores.</p>
<p><code>SQL_CALC_FOUND_ROWS</code> funciona a partir de la versión 4 de MySQL si no recuerdo mal.</p>
<p>Las instrucciones <code>SQL_CALC_FOUND_ROWS</code> y <code>FOUND_ROWS()</code> deben ir una detrás de otra, si hacemos consultas por en medio es muy probable que nos encontremos con resultados imprecisos.</p>
<p>Me consta que <a href="http://www.oracle.com">Oracle</a> tiene una instrucción equivalente pero no sabría explicaros, no tengo suficiente experiencia con esa base de datos. <a href="http://www.postgresql.org/">PostgreSQL</a> y <a href="http://www.sqlite.org/">SQLite</a> si que sé seguro que no pueden hacer uso de este hack, al menos en sus versiones actuales.</p>
<h4>Paginado deluxe en CakePHP</h4>
<p>Los usuarios de <a href="http://cakephp.org">CakePHP</a> estamos de suerte, <a href="http://noswad.me.uk/">Andy Dawson</a> escribió un helper que permite realizar paginados de cualquier tipo de datos con muy poco esfuerzo. Permite ordenar datos tabulados por columnas y el interfaz de control funciona completamente en AJAX (si el cliente lo permite o nosotros lo forzamos).</p>
<p>Encontrareis todo lo referente al paginado en <a href="http://bakery.cakephp.org/articles/view/65">Bakery</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2006/12/08/paginado-de-datos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IBM recomienda CakePHP</title>
		<link>http://quarkblog.org/2006/11/22/ibm-recomienda-cakephp/</link>
		<comments>http://quarkblog.org/2006/11/22/ibm-recomienda-cakephp/#comments</comments>
		<pubDate>Tue, 21 Nov 2006 23:19:20 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.org/2006/11/22/ibm-recomienda-cakephp/</guid>
		<description><![CDATA[Vaya lujazo, IBM ha dedicado nada menos que 5 artículos al desarrollo de aplicaciones con CakePHP en su portal IBM’s developerWorks, un framework en el que llevo colaborando algún tiempo (aunque todavía no he ganado el privilegio necesario para subir cosas directamente al SVN).
Los artículos de la serie son:

Parte 1: configuración, puesta en marcha de [...]]]></description>
			<content:encoded><![CDATA[<p>Vaya lujazo, IBM ha dedicado nada menos que 5 artículos al desarrollo de aplicaciones con <a href="http://cakephp.org">CakePHP</a> en su portal <strong>IBM’s developerWorks</strong>, un framework en el que llevo colaborando algún tiempo (aunque todavía no he ganado el privilegio necesario para subir cosas directamente al SVN).</p>
<p>Los artículos de la serie son:</p>
<ul>
<li><a href="https://www6.software.ibm.com/developerworks/education/os-php-cake1/os-php-cake1-a4.pdf">Parte 1</a>: configuración, puesta en marcha de CakePHP y una pequeña aplicación de login.</li>
<li>Parte 2: cubre el scaffolding, la herramienta Bake y las listas de control de acceso (ACL).</li>
<li><a href="http://www-128.ibm.com/developerworks/library/os-php-cake3/index.html">Parte 3</a>: sobre Sanitize y cómo crear aplicaciones seguras filtrando los datos de entrada, el componente Security y cómo manejar peticiones mal formadas y temas avanzados de validación.</li>
<li><a href="https://www6.software.ibm.com/developerworks/education/os-php-cake4/os-php-cake4-a4.pdf">Parte 4</a>: cubre el componente Session, mostrando tres mecanismos para guardar datos de estado, así como el componente Request Handler para manejar multiples tipos de peticiones (navegadores embebidos, peticiones XML, peticiones HTML, etc).</li>
<li><a href="http://www-128.ibm.com/developerworks/library/os-php-cake5/index.html">Parte 5</a>: cacheado de vistas y layouts.</li>
</ul>
<p>Los artículos se encuentran <a href="http://www-128.ibm.com/developerworks/edu/os-dw-os-php-cake1.html">aquí</a> (de momento sólo el primero). Hace falta registrarse para verlos (el registro es incomodo pero gratuito).</p>
<p>Tiembla Rails <img src='http://quarkblog.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2006/11/22/ibm-recomienda-cakephp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CakePHP 1.0</title>
		<link>http://quarkblog.org/2006/05/02/cakephp-10/</link>
		<comments>http://quarkblog.org/2006/05/02/cakephp-10/#comments</comments>
		<pubDate>Tue, 02 May 2006 08:48:38 +0000</pubDate>
		<dc:creator>Moisés Maciá</dc:creator>
		
		<category><![CDATA[CakePHP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://quarkblog.blogdns.org/wordpress/2006/05/02/cakephp-10/</guid>
		<description><![CDATA[Genial, justo acaba de salir la última versión estable de CakePHP; la 1.0, todo un logro.
Cake es un framework que aplica los patrones de diseño MVC y scaffolding en PHP, y lo deberías utilizar si piensas que tus programas en PHP son una enorme bola de mierda porque una de cada tres lineas de XHTML [...]]]></description>
			<content:encoded><![CDATA[<p>Genial, justo acaba de salir la última versión estable de <a href="http://cakephp.org/">CakePHP</a>; la 1.0, todo un logro.</p>
<p>Cake es un framework que aplica los <strong>patrones de diseño MVC</strong> y <strong>scaffolding</strong> en PHP, y lo deberías utilizar si piensas que tus programas en PHP son una enorme bola de mierda porque una de cada tres lineas de XHTML empieza y termina con <code>&lt;?php ?&gt;</code>.</p>
<blockquote>
<ol>
<li><strong>Flexible License</strong> - Cake is distributed under the MIT License</li>
<li><strong>Clean IP</strong> - Every line of code was written by the CakePHP development team</li>
<li><strong>Extremely Simple</strong> - Just look at the name&#8230;It&#8217;s Cake</li>
<li><strong>Rapid Development</strong> - Build apps faster than ever before (check out the <a href="http://www.zzine.org/articles/cakephp">zZine article</a>)</li>
<li><strong>Best Practices</strong> - Cake is easy to understand and sets the industry standard in security authentication, and session handling, among other features.</li>
<li><strong>OO</strong> - Whether you are a seasoned object-oriented programmer or a beginner, you&#8217;ll feel comfortable</li>
<li><strong>No Configuration</strong> - Set-up the database and watch the magic begin</li>
</ol>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://quarkblog.org/2006/05/02/cakephp-10/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 3.030 seconds -->
<!-- Cached page served by WP-Cache -->
