<?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>Mariuzzo</title> <atom:link href="http://mariuzzo.com/feed/" rel="self" type="application/rss+xml" /><link>http://mariuzzo.com</link> <description>Desarrollo Web</description> <lastBuildDate>Wed, 06 Jan 2010 18:40:26 +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>¿Qué pasa con los artículos de Mariuzzo.com?</title><link>http://mariuzzo.com/2010/01/06/%c2%bfque-pasa-con-los-articulos-de-mariuzzo-com/</link> <comments>http://mariuzzo.com/2010/01/06/%c2%bfque-pasa-con-los-articulos-de-mariuzzo-com/#comments</comments> <pubDate>Wed, 06 Jan 2010 18:37:21 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[Otros]]></category> <category><![CDATA[Anuncio]]></category><guid
isPermaLink="false">http://mariuzzo.com/2010/01/06/%c2%bfque-pasa-con-los-articulos-de-mariuzzo-com/</guid> <description><![CDATA[Esto sería una interesante interrogante. La respuesta es simple, y pidiendo disculpa, les expreso que estoy trabajando arduamente en la próxima versión de esta página web lo cual la convertirá a una página con artículos mejores elaborados, más detallados y evitando repetir lo que otros sitios web ya han publicado.
Espero que todos me comprendan. Sin [...]]]></description> <content:encoded><![CDATA[<p>Esto sería una interesante interrogante. La respuesta es simple, y pidiendo disculpa, les expreso que estoy trabajando arduamente en la próxima versión de esta página web lo cual la convertirá a una página con artículos mejores elaborados, más detallados y evitando repetir lo que otros sitios web ya han publicado.</p><p>Espero que todos me comprendan. Sin embargo pueden seguirme en Twitter para estar al tanto de cosas interesante sobre el desarrollo web: <a
title="Rubens Mariuzzo en Twitter" href="http://twitter.com/rmariuzzo" target="_self">http://twitter.com/rmariuzzo</a></p><p>¡Hasta pronto!</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2010/01/06/%c2%bfque-pasa-con-los-articulos-de-mariuzzo-com/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>&#8220;MT table&#8221; un plugin de jQuery para mejorar las tablas</title><link>http://mariuzzo.com/2009/11/26/mt-table-un-plugin-de-jquery-para-mejorar-las-tablas/</link> <comments>http://mariuzzo.com/2009/11/26/mt-table-un-plugin-de-jquery-para-mejorar-las-tablas/#comments</comments> <pubDate>Thu, 26 Nov 2009 21:14:53 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[Web]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[jQuery plugin]]></category> <category><![CDATA[Tablas]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=541</guid> <description><![CDATA[
Hace unos días que creé un plugin de jQuery llamado MT table (Mariuzzo Tools Table). El objetivo principal es poder ofrecer funcionalidades y características a las tradicionales tablas HTML.
Hoy en día, existen muchos plugins maduros que hacen muchas cosas interesante como DataTables y Tablesorter. Sin embargo, estoy creando un plugin similar el cual llamo MT [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignnone size-full wp-image-542" title="Table Hover" src="http://mariuzzo.com/wp-content/uploads/2009/11/table-hover.jpg" alt="Table Hover" width="480" height="100" /></p><p>Hace unos días que creé un plugin de jQuery llamado <a
title="Mariuzzo Tools Table" href="http://code.google.com/p/mariuzzo-tools/" target="_blank">MT table (Mariuzzo Tools Table)</a>. El objetivo principal es poder ofrecer funcionalidades y características a las tradicionales tablas HTML.</p><p>Hoy en día, existen muchos plugins maduros que hacen muchas cosas interesante como <a
title="DataTables" href="http://www.datatables.net/" target="_blank">DataTables</a> y <a
href="http://tablesorter.com/docs/" target="_blank">Tablesorter</a>. Sin embargo, estoy creando un plugin similar el cual llamo <a
title="Mariuzzo Tools Table" href="http://code.google.com/p/mariuzzo-tools/" target="_blank">MT table</a> que hará algunas funciones ya existentes, pero, agregaré nuevas funcionalidades que considero útil para muchos como para mi.</p><p>El plugin lo tengo sub-dividido en <em>features</em> (características), de las cuales solo <em>hoverable</em> está terminado en fase <em>beta</em>, las demás son propuestas que están desarrollo:</p><ul><li><strong>Hoverable</strong>. Esta característica nos permite agregar el efecto de <em>hover</em> a cualquier elemento de una tabla como la tabla misma, las filas, las columnas, ambas (formando un cruz), o una simple celda.</li><li><strong>Selectable</strong>. Esto nos permitirá hacer que cualquier elemento de una tabla sea <em>seleccionable</em> como las filas, columnas o celdas. También nos permitirá configurar la selección para que esta sea múltiple o única.</li><li><strong>Sortable</strong>. Sí, esta es una rueda que reinventaré. Es la típica funcionalidad de poder <em>ordenar</em> las columnas. Pienso eventualmente permitir el <em>ordenamiento</em> de filas también.</li><li><strong>Paginable</strong>. Esta es otra rueda a reinventar. Esto hará que tablas con muchas filas sean vistas por <em>páginas</em>. No pasaré por alto agregar la funcionalidad de solicitar las siguientes páginas o anteriores por AJAX.</li><li><strong>Decorable</strong>. Esta característica la haré por pura diversión. Mi intención es poder agregar <em>coloridos especiales</em> a las tablas como <em>gradientes líneales</em>, <em>gradientes circulares</em> entre otras cosas.</li></ul><p>También hay otras características que me han pasado por la mente como: <em>ajaxable</em>, <em>editable</em> y <em>pluggable</em>. Pero hasta ahora me limitaré a las ya mencionadas.</p><p>Si quieres, puedes visitar <a
title="Mariuzzo Tools Table" href="http://code.google.com/p/mariuzzo-tools/" target="_blank">la página del proyecto MT table</a>, leer la documentación y <a
title="Mariuzzo Tools Table" href="http://code.google.com/p/mariuzzo-tools/downloads/list" target="_blank">descargar la demo interactivar de <em>hoverable</em></a>.</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/11/26/mt-table-un-plugin-de-jquery-para-mejorar-las-tablas/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Zen Coding para escribir HTML/CSS a la velocidad de la luz</title><link>http://mariuzzo.com/2009/11/26/zen-coding-para-escribir-htmlcss-a-la-velocidad-de-la-luz/</link> <comments>http://mariuzzo.com/2009/11/26/zen-coding-para-escribir-htmlcss-a-la-velocidad-de-la-luz/#comments</comments> <pubDate>Thu, 26 Nov 2009 10:00:44 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[html]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=525</guid> <description><![CDATA[
Zen Coding es un conjunto de plugins para programar en HTML o CSS a la velocidad de la luz (casi literalmente). Estas magníficas herramientas te permiten escribir un selector de CSS y expandirlo en su representación del DOM y mucho más.
Un ejemplo básico
Si queremos crear la estructura más básica de un documento XHTML transicional. Solo [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignnone size-full wp-image-527" title="html-light-speed" src="http://mariuzzo.com/wp-content/uploads/2009/11/html-light-speed.jpg" alt="html-light-speed" width="480" height="100" /></p><p><a
title="zen-coding" href="http://code.google.com/p/zen-coding/" target="_blank">Zen Coding</a> es un conjunto de plugins para programar en HTML o CSS a la velocidad de la luz (casi literalmente). Estas magníficas herramientas te permiten escribir un selector de CSS y expandirlo en su representación del DOM y mucho más.</p><h2>Un ejemplo básico</h2><p>Si queremos crear la estructura más básica de un documento XHTML transicional. Solo tenemos que poner lo siguiente.</p><pre><code>html:xt</code></pre><p>Y al presionar un <em>shortcut</em> o un <em>click</em> tendremos esto:</p><pre><code class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"&gt;
&lt;head&gt;
&lt;title&gt;&lt;/title&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre><p>Y eso es solo el comienzo de la magia de Zen Coding.</p><h2>Un segundo ejemplo</h2><p>Si queremos crear un elemento cualquiera, digamos un DIV con un ID header, entonces escribimos lo que sería un selector CSS:</p><pre><code>div#header</code></pre><p>Y esto se convertiría en:</p><pre><code class="html">&lt;div id="header"&gt;&lt;/div&gt;</code></pre><p>Sencillo y útil ¿verdad?</p><h2>Un ejemplo complejo</h2><p>Supongamos que queremos crear un documento HTML con varios DIVs, un menu de UL con varios LI con IDs diferente. Esto también podemos hacerlos en una sola línea:</p><pre><code>html:xt&gt;div#header+div#content&gt;ul#menu&gt;li.opcion-$*10</code></pre><p>Esto sería igual a:</p><pre><code class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"&gt;
  &lt;head&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id="header"&gt;&lt;/div&gt;
    &lt;div id="content"&gt;
      &lt;ul id="menu"&gt;
        &lt;li id="item-1"&gt;&lt;/li&gt;
        &lt;li id="item-2"&gt;&lt;/li&gt;
        &lt;li id="item-3"&gt;&lt;/li&gt;
        &lt;li id="item-4"&gt;&lt;/li&gt;
        &lt;li id="item-5"&gt;&lt;/li&gt;
        &lt;li id="item-6"&gt;&lt;/li&gt;
        &lt;li id="item-7"&gt;&lt;/li&gt;
        &lt;li id="item-8"&gt;&lt;/li&gt;
        &lt;li id="item-9"&gt;&lt;/li&gt;
        &lt;li id="item-10"&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>De seguro esto nos ahorrará bastante la creación de documentos HTML, les dejo <a
href="http://code.google.com/p/zen-coding/" target="_blank">el enlace para que puedan descargarlo</a> y prueben las demás extensiones fabulosas.</p><p>Nota, esta extensión está disponible para Aptana, TextMate, NetBeans entre otros IDEs. Espero que lo disfruten y me den su opinión.</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/11/26/zen-coding-para-escribir-htmlcss-a-la-velocidad-de-la-luz/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Instalando CakePHP</title><link>http://mariuzzo.com/2009/11/22/instalando-cakephp/</link> <comments>http://mariuzzo.com/2009/11/22/instalando-cakephp/#comments</comments> <pubDate>Sun, 22 Nov 2009 20:03:48 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[Guía]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=500</guid> <description><![CDATA[Artículo detallado de la instalación de CakePHP en Linux con imágenes y en en español (aplicación similar para otros sistemas operativos).]]></description> <content:encoded><![CDATA[<p><a
href="http://mariuzzo.com/wp-content/uploads/2009/04/cakephp.jpg"><img
class="alignnone size-full wp-image-50" title="Instalando CakePHP" src="http://mariuzzo.com/wp-content/uploads/2009/04/cakephp.jpg" alt="Instalando CakePHP" width="480" height="100" /></a></p><p>Este artículo es para quien por una razón u otra no ha podido instalar CakePHP o para recomendar a otras personas que necesitan una guía para iniciarse en esta excelente plataforma de desarrollo. Cabe destacar que los pasos descritos son aplicables para usuario de Linux (en mi caso Ubuntu).</p><h2>Prerequisitos</h2><p>Asegúrate que tengas&#8230;</p><ul><li>&#8230; una conexión a Internet (para descargar CakePHP).</li><li>&#8230; y una instalación fresca de XAMPP (LAMPP).</li></ul><h2><span
id="more-500"></span></h2><h3>1. Descargar CakePHP</h3><p><img
class="alignnone size-full wp-image-501" title="CakePHP downloads" src="http://mariuzzo.com/wp-content/uploads/2009/11/CakePHP-downloads.png" alt="CakePHP downloads" width="233" height="323" /></p><p>En tu navegador favorito dirígete a http://cakephp.org y descarga el archivo de CakePHP. Es posible que veas una lista de archivos y no sepas cual elegir, entonces busca la última versión <strong>estable</strong> con la extensión <strong>.tar.gz</strong>.</p><p>Luego de elegir el archivo CakePHP a descargar, es posible que te pregunten por dar alguna donación monetaria a favor del proyecto. Este paso es opcional. Puedes continuar descargando el archivo haciendo click en &#8220;No Thanks&#8221;.</p><h3>2. Descomprime el archivo CakePHP</h3><p>Dependiendo del lugar donde esté el archivo descargado de CakePHP, procederemos a descomprimirlo en el directorio <code>htdocs</code> de nuestra instalación de LAMPP. Para esto, asumiremos que LAMPP está instalado en el directorio <code>/opt</code>. Entonces ejecutamos el siguiente comando.</p><pre><code>sudo tar -xvzf cake_1.2.5.tar.gz -C /opt/lampp/htdocs/</code></pre><h3>3. Probamos la pre-instalación</h3><div><img
class="alignnone size-full wp-image-505" title="CakePHP pre installation" src="http://mariuzzo.com/wp-content/uploads/2009/11/CakePHP-pre-installation.png" alt="CakePHP pre installation" width="231" height="284" /></p><p>Hasta este punto podemos ver si lo que hemos hecho esta bien. Tan solo necesitamos subir a LAMPP con un simple <code>sudo /opt/lampp/lampp start</code>. Luego accedemos con nuestro navegador web a la dirección <a
title="http://localhost/cake_1.2.5/" href="http://localhost/cake_1.2.5/" target="_blank">http://localhost/cake_1.2.5/</a>. Si ves algo similar a la imagen de la izquierda todo está bien, no hay mayores complicaciones.</div><h3>4. Configuracion inicial</h3><p>Este es el último paso, el cual consiste en configurar las dependencias básicas de CakePHP. Estas configuraciones son mínimas y las podemos realizar siguiendo cada alerta que se nos presentaron al acceder a <a
title="http://localhost/cake_1.2.5/" href="http://localhost/cake_1.2.5/" target="_blank">http://localhost/cake_1.2.5/</a>.</p><ul><li><code>Warning (512): /opt/lampp/htdocs/cake_1.2.5/app/tmp/cache/ is not writable [CORE/cake/libs/cache/file.php, line 262]</code><p>Esto es un problema de permisos, para resolverlo daremos todos los permisos al directorio tmp y sus descendientes. Ejecutamos lo siguiente.</p><pre><code>sudo chmod 777 -R /opt/lampp/htdocs/cake_1.2.5/app/tmp/</code></pre></li><li><code>Notice (1024): Please change the value of 'Security.salt' in app/config/core.php to a salt value specific to your application [CORE/cake/libs/debugger.php, line 557]</code><p>Esto es una advertencia de seguridad donde se nos aconseja de cambiar el valor por defecto. Para modificarlo, tan solo necesitamos editar el archivo que se encuentra en <code>/opt/lampp/htdocs/cake_1.2.5/app/config/core.php</code>. En dicho archivo editaremos una línea parecida a esta.</p><pre><code class="php">Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubi');</code></pre><p>Y cambiamos el valor (garabato) puesto por otro.</li><li><code>Your database configuration file is NOT present.<br
/> Rename config/database.php.default to config/database.php</code></p><p>Tal como se describe en inglés tenemos que renombrar el archivo <code>config/database.php.default</code> a <code>config/database.php</code>. Al hacer solamente esto tendremos otro problema &#8220;Cake is NOT able to connect to the database.&#8221; que quiere decir que CakePHP no pudo conectarse a nuestra base de datos. Entonces, aparte de renombrar el archivo <code>database.php</code>, debemos editarlo para que apunte a nuestra base de datos. Pero primero necesitamos crear nuestra base de datos.<br
/> No te preocupes, eso es bien sencillo <a
href="http://localhost/phpmyadmin" target="_blank">http://localhost/phpmyadmin</a> y crear nuestra base de datos con cualquier que nos pase por la cabeza, para este artículo creamos una con nombre &#8216;bd_prueba&#8217;. Como se muestra en la siguiente imagen y presionamos el botón &#8220;Create&#8221; y listo.<br
/> <img
class="alignnone size-full wp-image-513" title="Creando una base de datos" src="http://mariuzzo.com/wp-content/uploads/2009/11/Creando-una-base-de-datos.png" alt="Creando una base de datos" width="502" height="119" /><br
/> Entonces, lo restante sería terminar de configurar nuestro archivo <code>database.php</code>. Para esto lo editamos y ponemos lo siguiente.</p><pre><code class="php">var $default = array(
  'driver' =&gt; 'mysql',
  'persistent' =&gt; false,
  'host' =&gt; 'localhost',
  'login' =&gt; 'root', // El usuario por defecto de mysql es root.
  'password' =&gt; '', // El usuario root no tiene contraseña.
  'database' =&gt; 'bd_prueba',
  'prefix' =&gt; '',
);</code></pre></li><h3>¡Listo a <span
style="text-decoration: line-through;">punchar</span> programar!</h3><p>A este punto verás que no habrán más alertas en <a
href="http://localhost/phpmyadmin" target="_blank">http://localhost/phpmyadmin</a>, todo estará verde, indicando que todo anda bien.</p><p>Como has visto son tan solo 4 pasos bien sencillo para instalar la plataforma de desarrollo CakePHP. A partir de ahí si sigues teniendo problemas, déjame saberlo en los comentarios. Y si no tienes ningún problemas no dejes de visitar para ver otro artículos similares.</ul> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/11/22/instalando-cakephp/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Preguntas frecuentes sobre jQuery y los INPUTs</title><link>http://mariuzzo.com/2009/10/01/preguntas-frecuentes-sobre-jquery-y-los-inputs/</link> <comments>http://mariuzzo.com/2009/10/01/preguntas-frecuentes-sobre-jquery-y-los-inputs/#comments</comments> <pubDate>Thu, 01 Oct 2009 20:02:58 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[html]]></category> <category><![CDATA[jQuery]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=471</guid> <description><![CDATA[
Me encontré con varias preguntas concernientes a jQuery y los elementos INPUTs. Entonces decidí escribir este artículo para aquellos que les sirva el zapato.
¿Cómo seleccionar elementos INPUTs por tipo?
La primera frase de la pregunta nos dice la mitad de como deberíamos de escribir el selector. Primero, sabemos que nuestra elementos a seleccionar son INPUTs, por [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://mariuzzo.com/wp-content/uploads/2009/09/html-input.jpg"><img
class="alignnone size-full wp-image-472" title="jQuery y los INPUTs" src="http://mariuzzo.com/wp-content/uploads/2009/09/html-input.jpg" alt="jQuery y los INPUTs" width="480" height="100" /></a></p><p>Me encontré con varias preguntas concernientes a jQuery y los elementos INPUTs. Entonces decidí escribir este artículo para aquellos que les sirva el zapato.</p><h2>¿Cómo seleccionar elementos INPUTs por tipo?</h2><p>La primera frase de la pregunta nos dice la mitad de como deberíamos de escribir el selector. Primero, sabemos que nuestra elementos a seleccionar son INPUTs, por lo cual deberíamos de comenzar a escribir algo así:</p><pre><code class="javascript">var elementos = $('input');</code></pre><p>Sin embargo, si queremos filtrar nuestros INPUTs por algún tipo tan solo debemos de agregar el siguiente filtro y ¡listo!</p><pre><code class="javascript">var submits = $('input[type="submit"]');
var checkboxes = $('input[type="checkbox"]');
var texts = $('input[type="text"]'); </code></pre><p>Y así sucesivamente para cada tipo, solo necesitas cambiar el valor de <code>type</code> para cada selector.</p><h2>¿Cómo saber el tipo de un elemento INPUT?</h2><p>La respuesta a esta pregunta es muy sencilla por lo cual no se necesita dar muchas explicaciones. Como el tipo de un elemento INPUT se almacena en el atributo TYPE tan solo necesitamos escribir los siguiente:</p><pre><code class="javascript">var tipo = $('#elemento14').attr('type');</code></pre><p>Este código seleccionará el elemento con ID elemento14 y devolverá su tipo.</p><h2>¿Cómo obtengo el valor de un elemento INPUT?</h2><p>Esta pregunta suele surgir cuando uno aprende a sacar el texto de un elemento con .text() o el html con .html(). Sin embargo, para los INPUTs es diferente, debemos de utilizar el método .val(). Por ejemplo, si queremos sacar el username puesto en un INPUT text podemos hacerlo así:</p><pre><code class="javascript">var username = $('#username').val();</code></pre><p>Este código seleccionará el elemento con ID &#8216;username&#8217; y devolver su valor.</p><h2>¿Cómo seleccionar &#8216;todos&#8217; los INPUTs, incluido los SELECTs, BUTTONs, TEXTAREAs&#8230;?</h2><p>Esto es bien sencillo, tan solo necesitas utilizar un filtro  prediseñado para esto.</p><pre><code class="javascript">var username = $(':input');</code></pre><p>Al ejecutar este selector obtendrás todo los tipos de INPUTs diferentes, y todos los SELECTs, BUTTONs y TEXTAREAs.</p><p>¿Has tenido otras dudas o preguntas sobre INPUTs y formularios? ¡Utiliza los comentarios para expresarte!</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/10/01/preguntas-frecuentes-sobre-jquery-y-los-inputs/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Sigue el Phishing con nuestros Bancos</title><link>http://mariuzzo.com/2009/09/23/sigue-el-phishing-con-nuestros-bancos/</link> <comments>http://mariuzzo.com/2009/09/23/sigue-el-phishing-con-nuestros-bancos/#comments</comments> <pubDate>Wed, 23 Sep 2009 21:03:37 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[Seguridad]]></category> <category><![CDATA[Web]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=464</guid> <description><![CDATA[
Ya hace tres meses que publiqué un artículo que detallaba un ataque de phishing utilizando como anzuelo al Banco Popular Dominicano. Aunque éste no fue el primer de los ataques, el BPD tomó serias medidas de seguridad implementado el uso de una tarjeta de códigos para cada uno de sus clientes, de esta manera aumentarían [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignnone size-full wp-image-119" title="Phishing al Banco Popular Dominicano" src="http://mariuzzo.com/wp-content/uploads/2009/05/bpd.jpg" alt="Phishing al Banco Popular Dominicano" width="480" height="100" /></p><p>Ya hace tres meses que publiqué <a
title="Copian el Banco Popular Dominicano para robarte" href="http://mariuzzo.com/2009/05/08/copian-el-banco-popular-dominicano-para-robarte/" target="_blank">un artículo</a> que detallaba un ataque de phishing utilizando como anzuelo al Banco Popular Dominicano. Aunque éste no fue el primer de los ataques, el BPD tomó serias medidas de seguridad implementado el uso de una tarjeta de códigos para cada uno de sus clientes, de esta manera aumentarían significativamente la seguridad y la confianza en su empresa.</p><p>Pues esta mañana recibí un nuevo correo <a
href="http://es.wikipedia.org/wiki/Phishing">phishing</a> animándome a &#8220;sincronizar mi tarjeta de claves digitales&#8221;. Por supuesto, el correo parece sin lugar a dudas del BPD, pero al mirar detenidamenete nos damos cuentas que no proviene de dicho banco, sino, de un mal intencionado y aprovechado de la tecnología para cometer un crimen cibernético.</p><p>Puedes ver <a
title="Imagen del correo electrónico de phishing con el Banco Popular Dominicano" href="http://mariuzzo.com/wp-content/uploads/2009/09/bpd-phishing-mail.jpg" target="_blank">la imagen del correo electrónico que supuestamente recibí del BPD</a>. Note que al ver los detalles del encabezado del correo se nos aclara diciendo que viene desde HI5, obviamente, quien quieres robar nuestros credenciales, nuestras tarjetas de códigos y por consiguiente nuestro dinero no es HI5, ya que esto es una técnica común y muy fácil de hacerse pasar por otra persona o dirección electrónica.</p><ul></ul> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/09/23/sigue-el-phishing-con-nuestros-bancos/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Leyendo XML desde CakePHP</title><link>http://mariuzzo.com/2009/09/20/leyendo-xml-desde-cakephp/</link> <comments>http://mariuzzo.com/2009/09/20/leyendo-xml-desde-cakephp/#comments</comments> <pubDate>Mon, 21 Sep 2009 02:02:14 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[Problemas]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=456</guid> <description><![CDATA[Si te ves en la necesidad de leer un archivo XML desde CakePHP lo puedes lograr fácilmente a través de una clase provista. Si estás desde un Controlador o Helper puedes utilizar el siguiente código para leer un archivo XML.
&#60;?php
class SampleHelper extends AppHelper {
function readXML() {
// Cargamos la clase [...]]]></description> <content:encoded><![CDATA[<p>Si te ves en la necesidad de leer un archivo XML desde CakePHP lo puedes lograr fácilmente a través de una clase provista. Si estás desde un <strong>Controlador</strong> o <strong>Helper</strong> puedes utilizar el siguiente código para leer un archivo XML.</p><pre><code class="php">&lt;?php
class SampleHelper extends AppHelper {
  function readXML() {
    // Cargamos la clase XML de CakePHP.
    App::import('Xml');
    // Leemos nuestro archivo XML.
    $xml_content =&amp; new XML('sample.xml');
    // Para facilidad de uso convertimos nuestro archivo XML en un
    // arreglo legible.
    $xml_array = $xml_content-&gt;toArray(false);
  }
}
?&gt;</code></pre><p>Listo, en la variable <code>$xml_content</code> tendrás la representación pura de un archivo XML y en la variable <code>$xml_array</code> tendrás un arreglo legible de tu archivo XML.</p><p>Si estuviéramos utilizando el siguiente archivo XML:</p><pre><code class="xml">&lt;?xml version="1.1" encoding="UTF-8" ?&gt;
&lt;menu&gt;
  &lt;item name="Home" url="pages/home" /&gt;
  &lt;item name="Courses" url="pages/courses" /&gt;
  &lt;item name="Portfolio" url="pages/portfolio" /&gt;
  &lt;item name="Contact" url="pages/contact" /&gt;
&lt;/menu&gt; </code></pre><p>Obtendríamos el siguiente contenido para la variable $xml_array:</p><pre><code>Array
(
  [menu] =&gt; Array
    (
      [item] =&gt; Array
        (
          [0] =&gt; Array
            (
              [name] =&gt; Home
              [url] =&gt; pages/home
            )
          [1] =&gt; Array
            (
              [name] =&gt; Courses
              [url] =&gt; pages/courses
            )
          [2] =&gt; Array
            (
              [name] =&gt; Portfolio
              [url] =&gt; pages/portfolio
            )
          [3] =&gt; Array
            (
              [name] =&gt; Contact
              [url] =&gt; pages/contact
            )
         )
      )
)</code></pre><p>La representación pura del XML no se la mostraré porque es muy verbosa.</p><h2>¿Cómo localizar tus archivos XML?</h2><p>Esa fue mi primera pregunta cuando seguí el ejemplo de <a
title="Xml parsing" href="http://book.cakephp.org/view/624/Xml-parsing" target="_blank">la documentación oficial de CakePHP</a>. <strong>Los archivos XML se leen a partir del directorio <code>/cake/libs/</code></strong> esto significa que se debe subir dos niveles de manera relativa para hacer referencias a nuestros archivos. Les presento unos ejemplos.</p><table
border="0"><tbody><tr><th>Ubicación de tu archivo:</th><th>Ruta a utilizar:</th></tr><tr><td>/app/views/helpers/menu.xml</td><td>../../app/views/helpers/menu.xml</td></tr><tr><td>/app/models/datasources/db.xml</td><td>../../app/models/datasources/db.xml</td></tr></tbody></table><p>Esto se debe porque la clase XML de CakePHP está localizada en <code>/cake/libs/</code> entonces, esta buscará relativamente cualquier archivo.</p><p>¿Preguntas? Dejalas en los comentarios.</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/09/20/leyendo-xml-desde-cakephp/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Creando mi primer Helper para CakePHP</title><link>http://mariuzzo.com/2009/09/18/creando-mi-primer-helper-para-cakephp/</link> <comments>http://mariuzzo.com/2009/09/18/creando-mi-primer-helper-para-cakephp/#comments</comments> <pubDate>Fri, 18 Sep 2009 21:28:00 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[CakePHP]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=443</guid> <description><![CDATA[
Recientemente, trabajando en un proyecto de un cliente, me vi en la necesidad de crear un Helper. Por eso quiero compartir con ustedes como podemos crear un Helper en CakePHP de manera rápida y comprensible.
Antes que todo, queremos recordar que un Helper no es más que un componente utilizado en la capa de presentación de [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignnone size-full wp-image-444" title="Creando mi primer Helper en CakePHP" src="http://mariuzzo.com/wp-content/uploads/2009/09/my-first-helper.jpg" alt="Creando mi primer Helper en CakePHP" width="480" height="100" /></p><p>Recientemente, trabajando en un proyecto de un cliente, me vi en la necesidad de crear un Helper. Por eso quiero compartir con ustedes como podemos crear un Helper en CakePHP de manera rápida y comprensible.</p><p>Antes que todo, queremos recordar que un <a
title="Helpers, developing with CakePHP" href="http://book.cakephp.org/view/98/Helpers" target="_blank">Helper</a> no es más que un componente utilizado en la capa de presentación de una aplicación. ¿Cuando hay que crear un Helper? Cuando nos encontramos con secciones repetitivas en nuestras vistas, elementos o layouts. Un ejemplo de secciones así, serían los mensajes de alertas, errores o información.</p><p>En este artículo veremos como crear un Helper que nos permita crear mensajes de alertas <em>customizados</em>. El Helper lo llamaremos <code>MessageHelper</code>, procedamos a crearlo.</p><h2><span
id="more-443"></span></h2><p>Partiendo que ya tenemos una instalación de CakePHP nos dirigimos al directorio <code>app/views/helpers</code> y creamos nuestro Helper creando un archivo llamando <code>message.php</code> (esto es siguiendo la <a
title="File and Classname Conventions" href="http://book.cakephp.org/view/23/File-and-Classname-Conventions" target="_blank">convención para archivos y clases en CakePHP</a>). Luego procedemos a editar nuestro Helper recién creado y agregamos el siguiente código.</p><pre><code class="php">&lt;?php
class MessageHelper extends AppHelper {
}
?&gt;</code></pre><p>Con esto tendremos lo básico creado para nuestro primer Helper. Ahora procederemos a crear tres métodos para la creación de nuestros tres tipos de mensajes. Sin embargo, los mensajes de error los quiero mostrar de un DIV el cual quiero darle estilo por CSS. Para esto necesitaría la ayuda de otro Helper ya creado, el HtmlHelper. Tomando el código anterior procedemos a agregar los métodos:</p><pre><code class="php">&lt;?php
class MessageHelper extends AppHelper {
  // Agregamos el HtmlHelper.
  var $helpers = array('Html');
  // Creamos el método para mensajes informativos.
  function info($message) {
    // Agregamos nuestro CSS externo de nombre msg.css
    // Solo tenemos que poner msg sin el '.css'
    $this-&gt;Html-&gt;css(array('msg'), null, null, false);
    // Creamos nuestro div con un clase CSS 'msg-info'
    // y le pasamos el mensaje al cuerpo de nuestro DIV.
    $info = $this-&gt;Html-&gt;div('msg-info', $message);
    // Ahora devolvemos el DIV creado.
    return $info;
  }
  // Creamos el método para mensajes de errores.
  function error($message) {
    // Agregamos nuestro CSS externo de nombre msg.css
    // Solo tenemos que poner msg sin el '.css'
    $this-&gt;Html-&gt;css(array('msg'), null, null, false);
    // Creamos nuestro div con un clase CSS 'msg-info'
    // y le pasamos el mensaje al cuerpo de nuestro DIV.
    $info = $this-&gt;Html-&gt;div('msg-error', $message);
    // Ahora devolvemos el DIV creado.
    return $info;
  }
  // Creamos el método para mensajes de alertas.
  function warning($message) {
    // Agregamos nuestro CSS externo de nombre msg.css
    // Solo tenemos que poner msg sin el '.css'
    $this-&gt;Html-&gt;css(array('msg'), null, null, false);
    // Creamos nuestro div con un clase CSS 'msg-info'
    // y le pasamos el mensaje al cuerpo de nuestro DIV.
    $info = $this-&gt;Html-&gt;div('msg-warning', $message);
    // Ahora devolvemos el DIV creado.
    return $info;
  }
}
?&gt;</code></pre><p>Listo, con eso ya tenemos nuestro primer Helper creado. Para poder probarlo tan solo habrá que incluirlo en nuestro controlador en cuestión.</p><pre><code class="php">&lt;?php
class SampleController extends AppController {
  // Incluimos nuestro Helper en el controlador.
  // Tan solo ponemos 'Message' para referirnos a MessageHelper.
  var $helpers = array('Message');
}
?&gt;</code></pre><p>Una vez esté listo nuestro controlador, tan solo tenemos que llamar los métodos de nuestro <code>MessageHelper</code> desde la vista.</p><pre><code class="php">&lt;?php
echo $message-&gt;info('Este es un mensaje de alerta.');
echo $message-&gt;error('Este es un mensaje de error.');
echo $message-&gt;warning('Este es un mensaje de alerta.');
?&gt;</code></pre><p>Hasta este punto no veremos nada visualmente diferente aparte de los textos. Esto es porque debemos de crear una hoja de estilo CSS en <code>app/webroot/css</code> llamada <code>msg.css</code>. Para fines de pruebas podemos crear el archivo CSS con las siguientes definiciones de estilo.</p><pre><code class="css">/*
 * Estilos para mensajes.
 */
.info {
  border:solid 1px #349534;
  background:#C9FFCA;
  color:#008000;
  font-weight:bold;
  padding:4px;
  text-align:center;
}
.error {
  border:solid 1px #CC0000;
  background:#F7CBCA;
  color:#CC0000;
  font-weight:bold;
  padding:4px;
  text-align:center;
}
.warning {
  border:solid 1px #DEDEDE;
  background:#FFFFCC;
  color:#222222;
  padding:4px;
  text-align:center;
}
</code></pre><p>Voilà! Este era el toque final. Ahora verás tu Helper funcionando, ahora te toca extenderlo y agregar las funcionalidades que necesites.</p><p>Créditos por los CSS: <a
title="CSS Message Box Collection" href="http://woork.blogspot.com/2008/03/css-message-box-collection.html" target="_blank">WOORK</a>.</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/09/18/creando-mi-primer-helper-para-cakephp/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Sobre jQuery 1.4 y futuras versiones</title><link>http://mariuzzo.com/2009/09/18/sobre-jquery-1-4-y-futuras-versiones/</link> <comments>http://mariuzzo.com/2009/09/18/sobre-jquery-1-4-y-futuras-versiones/#comments</comments> <pubDate>Fri, 18 Sep 2009 14:00:16 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[Web]]></category> <category><![CDATA[jQuery]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=434</guid> <description><![CDATA[
En la conferencia anual de jQuery para este año se presentaron interesantes cambios de esta librería de JavaScript ante una audiencia de 300 personas aproximadamente. Tomando en cuenta el primero discurso presentando por el orador John Resig, miembro de jQuery Core intitulado &#8220;Recent Changes to jQuery&#8217;s Internals&#8221; (Cambios Recientes en jQuery), estaré resaltando los cambios [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignnone size-full wp-image-435" title="jQuery 1.4" src="http://mariuzzo.com/wp-content/uploads/2009/09/jquery-1.4-further-versions.gif" alt="jQuery 1.4" width="480" height="100" /></p><p>En la conferencia anual de jQuery para este año se presentaron interesantes cambios de esta librería de JavaScript ante una audiencia de 300 personas aproximadamente. Tomando en cuenta el primero discurso presentando por el orador John Resig, miembro de jQuery Core intitulado &#8220;Recent Changes to jQuery&#8217;s Internals&#8221; (<em>Cambios Recientes en jQuery</em>), estaré resaltando los cambios que comenzaremos a ver en la próxima distribución que será la versión 1.3.3 o 1.4 (aún no se ha decidido cual versión estable será la siguiente por la gran cantidad de cambios que veremos). Miren los importantes y nuevos cambios:</p><h2><span
id="more-434"></span></h2><ul><li><strong>No más detección de navegador.</strong><br
/> Desde la versión 1.3.2 hemos visto la aparición de jQuery.support que reemplazará lo que algunos de nosotros solemos utilizar: jQuery.browser. jQuery.support es una adición reciente que prueba el soporte de diferentes funcionalidades para el navegador en cuestión.</li><li><strong>j</strong><strong>Query será modularizado.</strong><br
/> Se anunció que para la versión 1.3.3/1.4 jQuery será dividido en diferentes módulos según sus funcionalidades. Esto significa que el core de jQuery (jquery.js) será dividido en varias archivos como: core.js, attributes.js, css.js, manipulation.js y traversing.js.</li><li><strong>jQuery para móviles.</strong><br
/> El equipo de desarrollo está experimentando con una versión de jQuery para móviles. Está incluirá la inclusión de módulos remotos, funciones búsqueda entre otras cosas que aún no han revelado.</li><li><strong>Soporte para ECMAScript 5.</strong><br
/> En la próxima versión de jQuery, ésta aprovechará algunas de las funcionalidades de ECMAScript como el uso del nuevo objeto de expresiones regulares y la conversión nativa de datos JSON a &#8216;objetos JavaScript&#8217;.</li><li><strong>Discriminadores de funciones y arreglos.</strong><br
/> En la última versión hemos visto el métodos jQuery.isFunction que nos permite determinar si el objeto es una función, de igual manera funcional y de implementación se agregó el método jQuery.isArray para determinar si un objeto es un arreglo.</li><li><strong>Unificación de jQuery(&#8230;).</strong><br
/> Para la próxima versión ya no habrán más discrepancias con jQuery(null), jQuery(false) y jQuery(undefined). Todos serán idénticos a jQuery([]).</li><li><strong>Optimizaciones en selectores por TAGs.</strong><br
/> En versiones actuales seleccionar un tag, por ejemplo: o jQuery(&#8220;div&#8221;) recorría la implementación interna de Sizzle (el selector interno de jQuery). En cambio ahora, los selectores de un tag en particular serán optimizados utilizando una alternativa a Sizzle reduciendo así el tiempo de búsqueda. Esto será válido para todos los TAGs salvo BODY, ya que jQuery(&#8220;body&#8221;) será un atajo para jQuery(document.body).</li><li><strong>Nuevos métodos &#8220;atajos&#8221;.</strong><br
/> Ahora veremos que para acceder al primer elemento de un arreglo de jQuery podremos utilizar los métodos first() y last() que corresponde a get(0) y get(-1) respectivamente.</li><li><strong>Mejoras en manipulaciones de HTML.</strong><br
/> El métodos append() que sirve para agregar código HTML al final del objeto seleccionado, ha sido modificado para que acepte como argumento una función. Eso permitirá ejecutar una función sobre el o los objetos seleccionado por el selector. Por ejemplo, actualmente hacemos:<br/></p><pre><code class="javascript">$('li').each(function() {
  $(this).append("My id: " + this.id);
})</code></pre><p>Ahora obtendremos los mismos resultados de esta manera</p><pre><code class="javascript">$('li').append(function() {
  return "My id: " + this.id;
})</code></pre></li><li><strong>Nuevas funciones.</strong><br
/> <span
style="text-decoration: underline;">.detach()</span> será parecido a .remove() a diferencia que los eventos y la data quedarán intactos.<br
/> <span
style="text-decoration: underline;">.closest(tag)</span> chequeará si el selector es igual al tag, de no ser así se buscará el parentezco más cercano igual al tag.<br
/> <span
style="text-decoration: underline;">.index()</span> devuelve el índice del objeto seleccionado respecto a sus &#8216;primos&#8217; (siblings).</li></ul><p>Desde mi punto vista, hay muchos nuevas características y optimizaciones para la librería de jQuery. Algunas de éstas que he citado previamente me hacen pensar en algunas cosas que podrían aparecer más adelante (al menos que no hayan empezado ya). Ver que la librería no será ya un solo archivo sino una serie de módulos me hace pensar que pronto veremos como un manejador de dependencias, algo al estilo Dojo con su dojo.require(&#8230;). No sé que tan factible sería un manejador de dependencias al estilo Maven, pero implementado para jQuery. Tal vez, tomando a<a
href="http://plugins.jquery.com/" target="_blank"> plugins.jquery.com</a> como un repositorio donde estarán todas las &#8216;dependencias&#8217; (los módulos de jQuery, jQueryUI, plugins etc&#8230;).</p><p>Y tu, ¿qué opinas de estas novedades?</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/09/18/sobre-jquery-1-4-y-futuras-versiones/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Mi primer formulario en CakePHP</title><link>http://mariuzzo.com/2009/08/15/mi-primer-formulario-en-cakephp/</link> <comments>http://mariuzzo.com/2009/08/15/mi-primer-formulario-en-cakephp/#comments</comments> <pubDate>Sun, 16 Aug 2009 03:12:35 +0000</pubDate> <dc:creator>Rubens Mariuzzo</dc:creator> <category><![CDATA[CakePHP]]></category><guid
isPermaLink="false">http://mariuzzo.com/?p=418</guid> <description><![CDATA[
Siempre me ha gustado crear cosas relativamente rápido y en cortos pasos, es por eso que he creado este artículo para mostrar como crear un formulario simple que populará una tabla de una base de datos MySQL. Veremos la integración por convención de un formulario creado con CakePHP y su conectividad con la base de [...]]]></description> <content:encoded><![CDATA[<p><img
class="alignnone size-full wp-image-419" title="Mi primer formulario en CakePHP" src="http://mariuzzo.com/wp-content/uploads/2009/08/my-first-form.jpg" alt="Mi primer formulario en CakePHP" width="480" height="100" /></p><p>Siempre me ha gustado crear cosas relativamente rápido y en cortos pasos, es por eso que he creado este artículo para mostrar como crear un formulario simple que populará una tabla de una base de datos MySQL. Veremos la integración por convención de un formulario creado con CakePHP y su conectividad con la base de datos (en este caso MySQL). A lo largo de este artículos estaremos creando un formulario para introducir nuevos productos en un inventario.</p><h2>Requisitos.</h2><ul><li>CakePHP 1.2.4xxx</li><li>XAMPP 1.7 / WAMP 2</li></ul><h2><span
id="more-418"></span>Creación de base de datos y tabla.</h2><p>Para este formulario crearemos una base de datos llamada: <strong>inventory</strong> y en ella crearemos nuestra tabla que almacenará los productos, esta última será llamada <strong>items</strong>.</p><ol><li>Accedemos a PHPMyAdmin via http://localhost/phpmyadmin/ (en el caso mio y en el de la mayoría)</li><li>Creamos nuestra base de datos <strong>inventory</strong>.</li><li>Creamos nuestra tabla ejecutando el siguiente código SQL:<br/><br/><pre><code class="sql">SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `description` varchar(300) NOT NULL,
  `price` int(11) NOT NULL,
  `quantity` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
</code></pre></li></ol><h2>Configuración de conectividad a la base de datos desde CakePHP.</h2><p>Una vez creada nuestra base de datos, debemos decir a CakePHP que se conecte a ella. Esto lo hacemos editando el archivo: app/config/database.php y ponemos en este lo siguiente:</p><pre><code class="php">&lt;?php
class DATABASE_CONFIG {
	var $default = array(
		'driver' =&gt; 'mysql',
		'persistent' =&gt; false,
		'host' =&gt; 'localhost',
		'login' =&gt; 'tu-usuario',
		'password' =&gt; 'tu-password',
		'database' =&gt; 'inventory',
		'prefix' =&gt; '',
	);
}
?&gt;
</code></pre><h2>Creación del formulario.</h2><p>Para crear nuestro formulario debemos de crear una carpeta &#8216;items&#8217; en el directorio &#8216;app/views&#8217;. En este directorio (app/views/items) crearemos un archivo con nombre &#8216;add.ctp&#8217;, en este crearemos nuestro formulario con el siguiente código:</p><pre><code class="php">&lt;h2&gt;agregar un item&lt;/h2&gt;
&lt;?php
	echo $form-&gt;create();
		echo $form-&gt;label('name', 'nombre');
		echo $form-&gt;text('name');
		echo $form-&gt;label('description', 'descripción');
		echo $form-&gt;textarea('description');
		echo $form-&gt;label('price', 'precio');
		echo $form-&gt;text('price');
		echo $form-&gt;label('quantity', 'cantidad');
		echo $form-&gt;text('quantity');
		echo $form-&gt;submit('agregar');
	echo $form-&gt;end();
?&gt;
</code></pre><h2>Creación de controlador.</h2><p>Ahora procederemos a crear el controlador que es quien se encargará de recibir la petición del formulario y guardar la información de este en la base de datos. Dentro de la carpeta  &#8216;app/controller&#8217; creamos el archivo &#8216;items_controller.php&#8217; y ponemos el siguiente código:</p><pre><code class="php">&lt;?php
class ItemsController extends AppController {
	function add(){
		if (!empty($this-&gt;data)) {
			$this-&gt;Item-&gt;save($this-&gt;data);
		}
	}
}
?&gt;
</code></pre><h2>¡Listo a probar!</h2><p>Con esto solo necesitas acceder a la dirección http://localhost/inventory/items/add, donde localhost será tu servidor e inventory el nombre de tu aplicación o la carpeta donde pusiste tu aplicación.</p><p>Al mismo tiempo que jueges con tu formulario verifica que los productos se estén guardando en la base de datos.</p><p>Cualquier duda al respecto exprésate más abajo en los comentarios.</p> ]]></content:encoded> <wfw:commentRss>http://mariuzzo.com/2009/08/15/mi-primer-formulario-en-cakephp/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> </channel> </rss>
<!-- This site's performance optimized by W3 Total Cache. Dramatically improve the speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (user agent is rejected)
Database Caching using memcached

Served from: 69.50.196.214 @ 2010-03-09 21:01:54 -->