<?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>TolerantX&#039;s Blog</title>
	<atom:link href="http://tolerantx.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tolerantx.com</link>
	<description>Y sin embargo se mueve</description>
	<lastBuildDate>Mon, 28 Feb 2011 02:16:27 +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>Obsolencia programada</title>
		<link>http://tolerantx.com/2011/02/27/obsolencia-programada/</link>
		<comments>http://tolerantx.com/2011/02/27/obsolencia-programada/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 02:10:35 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=363</guid>
		<description><![CDATA[Muy interesante video sobre la]]></description>
			<content:encoded><![CDATA[<p>Muy interesante video sobre la obsolencia programada. </p>
<p style="text-align: center;"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/QosF0b0i2f0" frameborder="0" allowFullScreen="true"> </iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2011/02/27/obsolencia-programada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiples cuentas gmail en el mismo navegador</title>
		<link>http://tolerantx.com/2011/01/19/multiples-cuentas-gmail-en-el-mismo-navegador/</link>
		<comments>http://tolerantx.com/2011/01/19/multiples-cuentas-gmail-en-el-mismo-navegador/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 04:18:19 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[Multiples Sesiones]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=360</guid>
		<description><![CDATA[Bien como el título lo]]></description>
			<content:encoded><![CDATA[<p>Bien como el título lo dice, para mi es una lata estar cambiandome de cuentas de correo electrónico gmail (porque manejo más de una) por asares de la web me encontré con que ésto es posible, simplemente visitamos el siguiente enlace <a href="https://www.google.com/accounts/b/0/MultipleSessions">https://www.google.com/accounts/b/0/MultipleSessions</a> si no estás logueado a alguna de tus cuentas te pedirá que lo hagas, solo necesitas activar el servicio, seleccionando las opciones que nos aparecen.</p>
<p>Cuando ingresen nuevamente a la cuenta de correo verán algo como ésto:</p>
<p><img class="aligncenter" title="GMail Multiples Sesiones" src="https://www.google.com/accounts/multilogin_menu_example.png" alt="GMail Multiples Sesiones" width="236" height="110" /></p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2011/01/19/multiples-cuentas-gmail-en-el-mismo-navegador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google lanza plugin que soporta video y voz en Gmail sobre Linux</title>
		<link>http://tolerantx.com/2010/08/20/google-lanza-plugin-que-soporta-video-y-voz-en-gmail-sobre-linux/</link>
		<comments>http://tolerantx.com/2010/08/20/google-lanza-plugin-que-soporta-video-y-voz-en-gmail-sobre-linux/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 04:07:05 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=354</guid>
		<description><![CDATA[Google está lanzando el plugin]]></description>
			<content:encoded><![CDATA[<p>Google está lanzando el plugin que permite el uso de video y voz en el chat de GMail, ésto que ya era soportado sobre otras plataformas como Windows anteriormente.</p>
<p>Lamentablemente aún solo está disponibles para sistemas Linux basados en Debian, sin embargo se pretende también tener soporte para otros como los basados en rpm.</p>
<p><a href="http://www.google.com/chat/video" target="_blank">En éste enlace está disponible la descarga del plugin</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/08/20/google-lanza-plugin-que-soporta-video-y-voz-en-gmail-sobre-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Una forma de decir hasta luego</title>
		<link>http://tolerantx.com/2010/04/28/una-forma-de-decir-hasta-luego/</link>
		<comments>http://tolerantx.com/2010/04/28/una-forma-de-decir-hasta-luego/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 23:00:15 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=341</guid>
		<description><![CDATA[Hoy se cierra una etapa]]></description>
			<content:encoded><![CDATA[<p>Hoy se cierra una etapa de mi vida, un ciclo que en realidad no esperaba que fuera tan difícil, tal vez ocurrió demasiado rápido o de plano no me lo esperaba, sin embargo así es la vida y hoy dejo mi empleo para incorporarme a laborar en otra empresa, si ha sido difícil es por lo bien que me he sentido trabajando para <a href="http://phoenixrep.com" target="_blank">Phoenix Rep</a>, intenté dar mi mejor esfuerzo y con ello me llevo un montón de cosas que aprendí, tanto en el nivel profesional como en el personal.</p>
<p>Agradezco la gran oportunidad que me brindaron, la confianza que me dieron y espero no haberlos defraudado. Extrañaré esos momentos a la hora de la comida y todo lo que conlleva convivir con excelentes profesionales y sobre todo excelentes personas.</p>
<p>Les mando un cordial saludo a todos los involucrados (Jajaja! para los que criticaban mi firma del outlook) y seguimos en contacto.</p>
<p style="text-align: center;">¡Gracias por todo!</p>
<p>P.D. Aún recuerdo el día que fui a entrevista (como si fuera ayer) con cara de gallina comprada volteando a todos lados dudando en tocar el timbre o no y preguntandome &#8220;¿aquí es?&#8221;. <img src='http://tolerantx.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/04/28/una-forma-de-decir-hasta-luego/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Checkbox: Seleccionar, deseleccionar todos</title>
		<link>http://tolerantx.com/2010/04/06/checkbox-seleccionar-deseleccionar-todos/</link>
		<comments>http://tolerantx.com/2010/04/06/checkbox-seleccionar-deseleccionar-todos/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 04:16:34 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[checkbox]]></category>
		<category><![CDATA[funcion]]></category>
		<category><![CDATA[seleccionar todos]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=332</guid>
		<description><![CDATA[Sé que hay muchos ejemplos,]]></description>
			<content:encoded><![CDATA[<p>Sé que hay muchos ejemplos, guias etc sobre como seleccionar o deseleccionar checkbox en una página web con javascript, pero pocos hacen referencia a hacer una función un poco más generica donde abarque tanto el nombre del formulario, el nombre de elementos a seleccionar y la casilla &#8220;todos&#8221; también con checkbox.</p>
<p>Tenemos 2 funciones javascript, una que se encarga de seleccionar todos los &#8220;checkbox&#8221; y la otra función que se encarga de verificar si permanece seleccionado nuestro checkbox que selecciona &#8220;todos&#8221;:<span id="more-332"></span></p>
<pre  name="code"  class="javascript">function checkElements(form, elementAll, elementToCheck) {
    var form, checkbox = form.elements[elementToCheck];
    totalElements = checkbox.length;
    checkboxAll = form.elements[elementAll];

    for(var n=0; n&lt;totalElements; n++) {
        checkbox[n].checked = checkboxAll.checked;
    }
}

function checkElementAll(form, elementAll, elementCheck) {
    var form, counter=0;
    checkbox = form.elements[elementCheck];
    checkboxAll = form.elements[elementAll];
    totalElements = checkbox.length;

    for(var n=0; n&lt;totalElements; n++) {
        if (checkbox[n].checked == true) counter++;
    }
    if (totalElements &gt; counter)
        checkboxAll.checked = false;
    else
        checkboxAll.checked = true;
}
</pre>
<p>Y un ejemplo de formulario sería algo como lo siguiente:</p>
<pre name="code" class="xml">&lt;form name="nombreFormulario" method="post" action=""&gt;
    &lt;p&gt;&lt;input type="checkbox" name="selecciona_todos" onclick="checkElements(this.form, this.name, 'frutas[]')" /&gt;&lt;label&gt;Todos&lt;/label&gt;&lt;/p&gt;
    &lt;p&gt;&lt;input type="checkbox" name="frutas[]" value="manzana" onclick="checkElementAll(this.form, 'selecciona_todos', this.name)" /&gt;&lt;label&gt;Manzana&lt;/label&gt;&lt;/p&gt;
    &lt;p&gt;&lt;input type="checkbox" name="frutas[]" value="mango" onclick="checkElementAll(this.form, 'selecciona_todos', this.name)" /&gt;&lt;label&gt;Mango&lt;/label&gt;&lt;/p&gt;
    &lt;p&gt;&lt;input type="checkbox" name="frutas[]" value="pera" onclick="checkElementAll(this.form, 'selecciona_todos', this.name)" /&gt;&lt;label&gt;Pera&lt;/label&gt;&lt;/p&gt;
    &lt;p&gt;&lt;input type="checkbox" name="frutas[]" value="sandia" onclick="checkElementAll(this.form, 'selecciona_todos', this.name)" /&gt;&lt;label&gt;Sandia&lt;/label&gt;&lt;/p&gt;
    &lt;p&gt;&lt;input type="checkbox" name="frutas[]" value="naranja" onclick="checkElementAll(this.form, 'selecciona_todos', this.name)" /&gt;&lt;label&gt;Naranja&lt;/label&gt;&lt;/p&gt;
&lt;/form&gt;</pre>
<p> <img src='http://tolerantx.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/04/06/checkbox-seleccionar-deseleccionar-todos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>¿¿Reactive su cuenta de GMail??</title>
		<link>http://tolerantx.com/2010/03/16/reactive-su-cuenta-de-gmail/</link>
		<comments>http://tolerantx.com/2010/03/16/reactive-su-cuenta-de-gmail/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 13:15:07 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[Phishing]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=304</guid>
		<description><![CDATA[¡¡Ave María Purísima!! Ja! el]]></description>
			<content:encoded><![CDATA[<p>¡¡Ave María Purísima!!</p>
<p>Ja! el día de ayer me llegó el siguiente correo que disque pára &#8220;reactivar mi cuenta de GMail&#8221;, copio y pego solo edité la dirección de correo <img src='http://tolerantx.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<blockquote><p><strong>INFORMACIÓN IMPORTANTE</strong></p>
<p><strong><a href="mailto:tolerantx@gmail.com" target="_blank">micorreo@gmail.com</a></strong></p>
<p>Debido a cambios recientes en su cuenta de GMail (contraseña e  información personal), por seguridad usted debe confirmarla. Si no  confirma su cuenta es posible que el Equipo de GMail cierre su cuenta  por seguridad. Recuerde tiene un plazo de 3 dias para realizarlo. Para  confirmar porfavor ingrese al siguiente link:</p>
<p><strong> http://gmail.com/accounts&amp;idinfo=011b1y121b22y121232KJGASEWWA&amp;IDCLASS=nulled&amp;acctype=gmail</strong></p>
<p>Si tienes dudas ingrese a nuestro sistema de ayuda online, clickeando  en la parte superior de la página principal.<br />
&#8212;&#8212;&#8212;&#8212;<br />
El equipo de GMail<span id="more-304"></span></p></blockquote>
<p>Obviamente ese dirección url no es a donde apuntaba la liga sino a un dominio llamado www.gmail7.info (¿de cuándo acá gmail tiene ligas así?), investigué quien dió de alta ese dominio y como soy bien buena onda les dejo el enlace de la información del dueño que el buscador godaddy me hizo el favor de proporcionarme <a href="http://who.godaddy.com/WhoIs.aspx?domain=gmail7.info&amp;prog_id=godaddy">http://who.godaddy.com/WhoIs.aspx?domain=gmail7.info&amp;prog_id=godaddy</a> donde el dueño es nickneeck@gmail.com.</p>
<p>Siempre me han llamado la atención éste tipo de acontecimientos y como soy un poco curioso investigué un poquito más, donde encontré que el correo provenía de Torreón, digo según ésta información (IP obtenida del email):</p>
<blockquote><p>201.132.241.208 &#8211; Geo Information<br />
IP Address 	201.132.241.208<br />
Host 	customer-TOR-241-208.megared.net.mx<br />
Location 	MX MX, Mexico<br />
City 	Torreón, 07 -<br />
Organization 	MegaCable SA de CV<br />
ISP 	MegaCable SA de CV<br />
AS Number 	AS13999<br />
Latitude 	25°55&#8217;00&#8243; North<br />
Longitude 	103°43&#8217;33&#8243; West<br />
Distance 	10673.55 km (6632.24 miles)</p></blockquote>
<p>Del mismo correo obtuve de dónde venía el pseudo xploit www.forosxd.com/xploits/xp/enviar_gmail_confirmar.php y si de hecho pueden encontrar otros tantos xploits en www.forosxd.com/xploits/xp/ que nuevamente si se es más observador no son más que descargados de www.portalhack.us y por obvias razones el propietario de ese portal es el mismo de gmail7.info y forosxd.com.</p>
<p>Alguien de Torreón hizo uso de éstos scripts hacia mi correo, ¿un lammer?, ¿qué opinan?.</p>
<p>Moraleja: siempre revisen hacia donde apuntan las ligas/links/urls que les mandan por correo electrónico y más cuando les piden usar usuarios y contraseñas. <img src='http://tolerantx.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/03/16/reactive-su-cuenta-de-gmail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Descargar Videos Youtube en tu navegador Google Chrome</title>
		<link>http://tolerantx.com/2010/03/11/descargar-videos-youtube-en-tu-navegador-google-chrome/</link>
		<comments>http://tolerantx.com/2010/03/11/descargar-videos-youtube-en-tu-navegador-google-chrome/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 16:38:56 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[descargar]]></category>
		<category><![CDATA[google chrome]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=300</guid>
		<description><![CDATA[Con las extensiones que están]]></description>
			<content:encoded><![CDATA[<p>Con las extensiones que están disponibles para Google Chrome me he encontrado con <a title="YouTube Downloader" rel="bookmark" href="http://www.chromeextensions.org/music-videos-photos/youtube-downloader/">YouTube Downloader </a><br />
que para mucha gente puede ser interesante y es la que nos permite descargar videos de youtube. Ésta extensión nos permite descargar los videos en formatos HD, mp4, 3gp, flv.</p>
<p>Solo necesitas entra a la página de <a title="YouTube Downloader" rel="bookmark" href="http://www.chromeextensions.org/music-videos-photos/youtube-downloader/">YouTube Downloader</a> agregas la extensión y cuando estés viendo tu video en la parte de la descripción del video se habilitarán las opciones de descarga. <img src='http://tolerantx.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Para firefox existen muchas soluciones en su biblioteca <a href="https://addons.mozilla.org/en-US/firefox/search?q=youtube&amp;cat=all&amp;advancedsearch=1&amp;as=1&amp;appid=1&amp;lver=any&amp;atype=0&amp;pp=20&amp;pid=5&amp;sort=&amp;lup=">complementos/extensiones.</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">HD</div>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/03/11/descargar-videos-youtube-en-tu-navegador-google-chrome/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>1er Cardiomaratón 2010</title>
		<link>http://tolerantx.com/2010/03/08/1er-cardiomaraton-2010/</link>
		<comments>http://tolerantx.com/2010/03/08/1er-cardiomaraton-2010/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 04:59:11 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Cardiomaraton]]></category>
		<category><![CDATA[Desfibrilacion]]></category>
		<category><![CDATA[RCP]]></category>
		<category><![CDATA[Record Guinnes]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=295</guid>
		<description><![CDATA[El cardiomaratón se efectuará en]]></description>
			<content:encoded><![CDATA[<p>El cardiomaratón se efectuará en Guadalajara en el estadio Jalisco, el evento es gratuito y pretende enseñar al público cosas como RCP Básico, Desfibrilación y RCP Avanzado, el cardiomaratón se llavará a cabo el día domingo 21 de marzo de 9:00 am a 2:00 pm.</p>
<p>Por cierto pretenden romper Récord Guinness del Cardiomaratón más concurrido.</p>
<p>Cito textualmente la introducción de su página web</p>
<blockquote>
<h2>1er Cardiomaraton</h2>
<p>La Universidad de Guadalajara, el Centro Universitario de Ciencias de  la Salud y el Laboratorio de Cardiología te invitan a aprender a salvar  vidas. ¿Cómo? Pues aprendiendo RCP (Reanimación Cardiopulmonar). No  sólo en caso de infarto sino también en otros casos en dónde está en  peligro la vida, como en atragantamiento, ahogamiento, hipotermia, entre  otras situaciones especiales.</p></blockquote>
<p>Para más información y registrarte visita la página web <a href="http://www.cardiomaraton.com/" target="_blank">www.cardiomaraton.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/03/08/1er-cardiomaraton-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enviar formulario sin recargar la página con Zend Framework y JQuery.</title>
		<link>http://tolerantx.com/2010/03/02/enviar-formulario-sin-recargar-la-pagina-con-zend-framework-y-jquery/</link>
		<comments>http://tolerantx.com/2010/03/02/enviar-formulario-sin-recargar-la-pagina-con-zend-framework-y-jquery/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 21:57:33 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Guardar]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=163</guid>
		<description><![CDATA[Cuando se están manejando formularios]]></description>
			<content:encoded><![CDATA[<p>Cuando se están manejando formularios con PHP guardando los datos en algún gestor de base de datos como MySQL llega a surgir la duda de cómo guardar dichos datos utilizando Ajax (JQuery en éste caso) para evitarnos el refresco de pantalla y poder seguir haciendo uso del sistema sin este pequeño (o grande) retraso.</p>
<p>Primero que nada utilizaré Zend Framework, JQuery y MySQL como gestor de base de datos. Para éste ejemplo empezaremos creando una base de datos sencilla llamada clientes donde única y exclusivamente guardaremos el nombre (para no hacer tan extenso ésto).<span id="more-163"></span></p>
<p>Muy bien para crear nuestra tabla primeramente debemos tener creada la base de datos, puedes utilizar phpmyadmin o la línea de comandos, como más te agrade, de todas maneras adjunto el código de la creación de la base de datos como también de la tabla.</p>
<pre name="code" class="sql">CREATE DATABASE `prueba`;

CREATE TABLE `prueba`.`clientes` (
  `id_cliente` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `cliente` VARCHAR( 100 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_unicode_ci;
</pre>
<p>Si te fijas la base de datos la llamé prueba y la tabla la llamé cliente con dos campos, id_cliente y cliente.<br />
No entraré en detalles en creación de controladores, modulos, vistas, en nuestro árbol de directorios de Zend Framework.</p>
<p>Creo el módulo (application/models/Clientes.php) con un método llamado getClientes, éste método nos devolverá posteriormente los clientes guardados en la base de datos:</p>
<pre name="code" class="php">&lt;?php

class Clientes extends Zend_Db_Table
{
    protected $_name = 'clientes';

    public function getClientes()
    {
        $c = new Clientes();
        $c_select = $c-&gt;select()-&gt;order('cliente');

        return $c-&gt;fetchAll($c_select);
    } // end getClientes

}
</pre>
<p>El controlador lo llamaré Clientes así que queda de la siguiente manera (application/controllers/ClientesController.php):</p>
<pre name="code" class="php">&lt;?php

class ClientesController extends Zend_Controller_Action
{

    public function init()
    {
        $this-&gt;initView();
        $this-&gt;view-&gt;baseUrl = $this-&gt;_request-&gt;getBaseUrl();
    }

    public function indexAction()
    {
        Zend_Loader::loadClass('Clientes');
        $c = new Clientes();
        $this-&gt;view-&gt;clientes = $c-&gt;getClientes();

    } // end indexAction()

}

?&gt;
</pre>
<p>El método init nos arroja la variable baseUrl, la cual utilizaremos para la llamada de archivos en nuestra vista, como también tiene la acción index y hace una consulta a nuestra base de datos clientes (getClientes) como lo mencionamos anteriormente y dicha consulta la podremos ver en nuestra vista.</p>
<p>Aquí quedaría nuestra vista (application/views/scripts/clientes/index.phtml):</p>
<pre name="code" class="xhtml">&lt;script type="text/javascript" language="javascript" src="&lt;?php echo $this-&gt;baseUrl;?&gt;/public/scripts/jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" language="javascript" src="&lt;?php echo $this-&gt;baseUrl;?&gt;/public/scripts/guardarCliente.js"&gt;&lt;/script&gt;
&lt;form action="" name="form1" id="form1" method="post"&gt;
    &lt;label&gt;Cliente: &lt;/label&gt;&lt;div id="div_cliente"&gt;
        &lt;select name="cliente" id="cliente"&gt;
            &lt;?php foreach ($this-&gt;clientes as $cliente) : ?&gt;
            &lt;option value="&lt;?php echo $cliente-&gt;id_cliente; ?&gt;"&gt;&lt;?php echo $cliente-&gt;cliente; ?&gt;&lt;/option&gt;
            &lt;?php endforeach; ?&gt;
        &lt;/select&gt;
    &lt;/div&gt;
&lt;/form&gt;

&lt;div id="form_ajax"&gt;
    &lt;form name="guardar_cliente"&gt;
        &lt;p&gt;Cliente:&lt;/p&gt;
        &lt;input type="text" name="nombre_cliente" id="nombre_cliente" value="" /&gt;
        &lt;input type="submit" name="submit" value="Guardar" id="guardarCliente" /&gt;
    &lt;/form&gt;
&lt;/div&gt;
</pre>
<p>En el código anterior hemos agregado la libreria de JQuery que la puedes descargar de Aquí y además el archivo agregarCliente que se encargará de hacer la petición AJAX del guardado del cliente. Este archivo quedaría como lo siguiente (public/scripts/agregarCliente.js):</p>
<pre name="code" class="javascript">$(function() {

    // bloqueamos la tecla enter para que no recargue la página
    $('#form_ajax').bind('keypress', function(e) {
        if (e.keyCode == 13) return false;
    });

    $('#guardarCliente').click(function() {

        var nombre_cliente = $('#nombre_cliente').val();
        var baseUrl = '/prueba';
        var dataString = 'nombre_cliente=' + nombre_cliente;

        $.ajax(
        {
            async: true,
            dataType: 'html',
            type: 'POST',
            contentType: 'application/x-www-form-urlencoded',
            url: baseUrl + '/clientes/guardar-cliente/',
            data: dataString,
            beforeSend: function(data){
                    $('#div_cliente').html('&lt;label&gt;Cargando...&lt;/label&gt;');
            },
            success: function(requestData){
                    $('#div_cliente').html(requestData);
            },
            error: function(requestData, strError, strTipoError){
                    alert('Error ' + strTipoError +': ' + strError);
            },
            complete: function(requestData, exito){
            }
        });

        $('#nombre_cliente').val('');
        return false;
    });
});
</pre>
<p>Ten en cuenta el atributo url de $.ajax ( url: baseUrl + &#8216;/clientes/guardar-cliente/&#8217;) ya que es en donde se ejecuta el script del lado del servidor (PHP) que guardará finalmente nuestro cliente.<br />
La variable baseUrl de nuestro archivo javascript igualmente hace referencia al directorio en el que se encuentra nuestro sistema dentro de nuestro servidor web.</p>
<p>Por último volvemos a modificar nuestro controlador, agregando la acción guardar-cliente y nuestro archivo application/controllers/ClientesController.php será el siguiente:</p>
<pre name="code" class="php">&lt;?php

class ClientesController extends Zend_Controller_Action
{

    public function init()
    {
        $this-&gt;initView();
        $this-&gt;view-&gt;baseUrl = $this-&gt;_request-&gt;getBaseUrl();
    }

    public function indexAction()
    {
        Zend_Loader::loadClass('Clientes');
        $c = new Clientes();
        $this-&gt;view-&gt;clientes = $c-&gt;getClientes();

    } // end indexAction()

    public function guardarClienteAction()
    {
    if ($this-&gt;getRequest()-&gt;isXmlHttpRequest()) { //Detectamos si es una llamada AJAX

        $this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();
        Zend_Loader::loadClass('Clientes');
        $c = new Clientes();

        // agregamos el estado
        $cliente = $this-&gt;_request-&gt;getPost('nombre_cliente');

        $cliente_data = array ('cliente' =&gt; $cliente);
        $c-&gt;insert($cliente_data);

        // consulta de la nueva lista de clientes
        $clientes = $c-&gt;getClientes();
        if (count($clientes) &gt; 0) {

            echo '&lt;select name="cliente" id="clienteo"&gt;';
            foreach($clientes as $cl):
                $selected = '';
                if ($cl-&gt;cliente == $cliente) { $selected = 'selected="selected"'; }
                echo '&lt;option value="'.$cl-&gt;id_cliente.'" '.$selected.'&gt;'.$cl-&gt;cliente.'&lt;/option&gt;';
            endforeach;
            echo '&lt;/select&gt;';

        } // end if (count($clientes) &gt; 0)

     } // end if ($this-&gt;getRequest()-&gt;isXmlHttpRequest())

    } // end guardarClienteAction

}

?&gt;
</pre>
<p>Y listo ya tienes tu modulo clientes el cual te lista los clientes ya existentes y desde la misma página podrás agregar más sin necesidad de recargar la página como lo hace un formulario normal.</p>
<p>Cabe destacar que yo lo realicé con el Zend Framework, pero si se analiza el código es bastante simple y puede aplicarse sin éste, pero eso ya les toca a ustedes hacerlo.</p>
<p>Cualquier aportación o comentario serán bien recibidos <img src='http://tolerantx.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/03/02/enviar-formulario-sin-recargar-la-pagina-con-zend-framework-y-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Buzz</title>
		<link>http://tolerantx.com/2010/02/10/google-buzz/</link>
		<comments>http://tolerantx.com/2010/02/10/google-buzz/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 17:03:05 +0000</pubDate>
		<dc:creator>TolerantX</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://tolerantx.com/?p=203</guid>
		<description><![CDATA[Hoy ingresando a mi cuenta]]></description>
			<content:encoded><![CDATA[<p>Hoy ingresando a mi cuenta de correo me encuentro con la novedad del nuevo servicio que google está ofreciendo, Google Buzz, se asemeja a servicios tipo twitter donde puedes actualizar tu estatus, compartir, fotos, videos etc.</p>
<p>Pudiera parecer otro servicio más sin mucha novedad pero tiene detrás a google apostando por entrar cada vez más al mundo de las redes sociales, veremos como le va.</p>
<p>Entren a la siguiente liga para más información <a href="http://buzz.google.com" target="_blank">buzz.google.com</a></p>
<p>Y adjunto un video donde muestra lo que es Buzz.</p>
<p style="text-align: center;"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/yi50KlsCBio" frameborder="0" allowFullScreen="true"> </iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://tolerantx.com/2010/02/10/google-buzz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

