<?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>CaChi &#187; Programing</title>
	<atom:link href="http://cachi.temiga.org/tag/programing/feed/" rel="self" type="application/rss+xml" />
	<link>http://cachi.temiga.org</link>
	<description>[ TEMIGA ]</description>
	<lastBuildDate>Mon, 19 Jul 2010 14:10:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>KumbiaPHP Tips: Añadir titulo (title) a nuestras páginas&#8230;</title>
		<link>http://cachi.temiga.org/2010/06/14/kumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas/</link>
		<comments>http://cachi.temiga.org/2010/06/14/kumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 01:59:19 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=659</guid>
		<description><![CDATA[Una de las cosas que siempre es importante tomar en cuenta es la de agregar un titulo a la página (title) donde se esta navegando, esto por múltiples factores que van desde SEO, usabilidad, navegación, etc. en este post les quiero dejar un KumbiaPHP Tips (asi los bautice) que les permitirá de forma simple agregar]]></description>
			<content:encoded><![CDATA[<p><a href="http://cachi.temiga.org/wp-content/uploads/helpful_tips_image.jpg"><img class="alignleft" title="Tips and Tricks" src="http://cachi.temiga.org/wp-content/uploads/helpful_tips_image.jpg" alt="Tips and Tricks" width="180" height="182" /></a>Una de las cosas que siempre es importante tomar en cuenta es la de agregar un titulo a la página (<a href="http://www.w3schools.com/tags/tag_title.asp">title</a>) donde se esta navegando, esto por múltiples factores que van desde <a href="http://es.wikipedia.org/wiki/Posicionamiento_en_buscadores" title="Posicionamiento en buscadores (SEO)">SEO</a>, usabilidad, navegación, etc. en este post les quiero dejar un <a href="http://cachi.temiga.org/tag/kumbiaphp-tips/">KumbiaPHP Tips</a> (asi los bautice) que les permitirá de forma simple agregar títulos a las páginas de forma dinámica.</p>
<p>Lo que siempre hay que recordar es que <a title="KumbiaPHP Framework" href="http://kumbiaphp.com">KumbiaPHP</a> es un framework MVC y POO (Programación Orientado a Objetos) si aprendemos a utilizar la arquitectura y el paradigma juntos seremos muy productivo, ademas de los beneficios adicionales que la aplicación de estas conlleva.</p>
<p>Bien, vamos al ejemplo lo primero es saber que <a title="KumbiaPHP Framework" href="http://kumbiaphp.com">KumbiaPHP</a> implementa algo llamado <em>variables de instancia</em>, esto quiere decir que los atributos que son declarado con <a title="Visibilidad POO" href="http://www.php.net/manual/en/language.oop5.visibility.php" target="_blank">modificador acceso</a> público (public) en el controlador serán enviados a la vista, en el <a href="http://wiki.kumbiaphp.com/Hola_Mundo_KumbiaPHP_Framework#Agregando_m.C3.A1s_Contenido" target="_blank">ejemplo de hola mundo</a> puedes apreciarlo. Partiendo de esta premisa jugaremos con eso y vamos a definir un atributo <strong>$pageTitle</strong> con modificador de acceso <em>public</em> en el controlador base, me refiero al <strong><a title="ApplicationController | Controlador Padre" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#application.php" target="_blank">application.php</a></strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009933; font-style: italic;">/**
 * Todas las controladores heredan de esta clase en un nivel superior
 * por lo tanto los metodos aqui definidos estan disponibles para
 * cualquier controlador.
 *
 * @category Kumbia
 * @package Controller
 **/</span>
<span style="color: #000000; font-weight: bold;">class</span> ApplicationController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$pageTitle</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Mi Titulo'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Con esto ya tenemos en las vistas <strong>$pageTitle</strong>, ahora tenemos que colocar esa variable a cumplir su función y tomando el ejemplo de <a title="KumbiaPHP + Ajax + jQuery" href="http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/">KumbiaPHP + Ajax + jQuery</a> este tiene como <a href="http://www.w3schools.com/tags/tag_title.asp">title</a> de la página <strong>&#8220;KumbiaPHP web &amp; app Framework&#8221;</strong>, vamos a editar el <a href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#views.2Ftemplates.2F">Template</a> <strong>app/views/templates/default.phtml</strong> y agregamos en el tag <a href="http://www.w3schools.com/tags/tag_title.asp">title</a> la variable <strong>$pageTitle</strong> como se muestra en el siguiente código.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; 
                   &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
 &lt;head&gt;
  &lt;meta http-equiv='Content-type' content='text/html; charset=<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> APP_CHARSET <span style="color: #000000; font-weight: bold;">?&gt;</span>' /&gt;
  &lt;title&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pageTitle</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    //CONTENIDO BODY
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Lo importante notar en el template es que se agrego la variable <strong>$pageTitle</strong>, con esto todos las páginas tendrán un titulo por defecto, ahora la idea es cambiarlo de acuerdo a donde se encuentre la navegación, siguiendo el ejemplo <a title="KumbiaPHP + Ajax + jQuery" href="http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/">KumbiaPHP + Ajax + jQuery</a> en la acción <strong>acortar()</strong> le vamos agregar un titulo personalizado como se muestra en el siguiente código.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #339933;">...</span> DEFINICIÓN DEL CONTROLLER<span style="color: #339933;">...</span>
   <span style="color: #009933; font-style: italic;">/**
     * Form que se comunica con el API de SigueMiLink
     * para acortar el enlace
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> acortar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">pageTitle</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Crea tu enlace Corto con SigueMiLink'</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//RESTO DEL CÓDIGO</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">...</span> DEFINICIÓN DEL CONTROLLER<span style="color: #339933;">...</span></pre></div></div>

<p>Para finalizar al ir al enlace <a href="http://localhost/kumbiaphp/api/acortar/">http://localhost/kumbiaphp/api/acortar/</a> debe mostrar el siguiente titulo <strong>&#8220;Crea tu enlace Corto con SigueMiLink&#8221;</strong>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F06%2F14%2Fkumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas%2F&amp;linkname=KumbiaPHP%20Tips%3A%20A%C3%B1adir%20titulo%20%28title%29%20a%20nuestras%20p%C3%A1ginas%26%238230%3B"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/06/14/kumbiaphp-tips-anadir-titulo-title-a-nuestras-paginas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>KumbiaPHP + Ajax + jQuery</title>
		<link>http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/</link>
		<comments>http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 16:04:07 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php framework]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[ShortUrl]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=641</guid>
		<description><![CDATA[Actualizado 11 de Junio 2010 En este tutorial explcaré el comportamiento de KumbiaPHP cuando hacemos aplicaciones ricas en JavaScript, me basare en utilizar jQuery como framework de JavaScript y no daré una explicación muy amplia de que son peticiones asíncronas ni como funcionan estas esto porque hay suficiente información en la red para quienes deseen]]></description>
			<content:encoded><![CDATA[<blockquote><p>Actualizado 11 de Junio 2010</p></blockquote>
<p>En este tutorial explcaré el comportamiento de <a href="http://www.kumbiaphp.com" title="KumbiaPHP Framework">KumbiaPHP</a> cuando hacemos aplicaciones ricas en JavaScript, me basare en utilizar jQuery como framework de JavaScript  y no daré una explicación muy amplia de que son peticiones asíncronas ni como funcionan estas esto porque hay suficiente información en la red para quienes deseen indagar un poco mas, simplemente nos dedicaremos hacer peticiones asíncronas dentro de <a href="http://www.kumbiaphp.com" title="KumbiaPHP Framework">KumbiaPHP</a>.</p>
<p>Como todo ejemplo lo ideal es basarlo en hechos reales y cotidianos en este sentido haremos un cliente que acorte URL utilizando el <a href="http://www.siguemilink.com/api">API</a> del servicio <a href="http://www.siguemilink.com/" title="SigueMiLink » Acorta tus enlaces!">SigueMiLink</a> el cual fue desarrollado con KumbiaPHP :).</p>
<h3>Requisitos</h3>
<p>Antes de continuar hay que verificar lo que necesitamos para llevar acabo el tutorial.</p>
<ul>
<li>Tener funcionando KumbiaPHP <a href="http://www.kumbiaphp.com/blog/manuales-y-descargas/">Beta1</a> (<a href="http://wiki.kumbiaphp.com/Instalar_Kumbia">Instalar KumbiaPHP</a>)</li>
<li><a href="http://code.jquery.com/jquery-1.4.2.min.js">Descargar jQuery</a> y colocarlo en el directorio <strong>app/public/javascript/jquery/jquery-1.4.2.min.js</strong>.</li>
<li>Por lo menos haber hecho el ejemplo <a href="http://wiki.kumbiaphp.com/Hola_Mundo_KumbiaPHP_Framework">Hola Mundo de KumbiaPHP</a> para entender este tutorial.</li>
<li>Leer un poco el <a href="http://www.siguemilink.com/api">API</a> del servicio <a href="http://www.siguemilink.com/" title="SigueMiLink » Acorta tus enlaces!">SigueMiLink</a></li>
<li>Ver funcionamiento básico de <a href="http://wiki.kumbiaphp.com/AJAX">KumbiaPHP con AJAX</a></li>
</ul>
<h3>Empezamos</h3>
<p>Lo primero es crear el controlador para efecto de este tutorial lo llame <strong>api</strong> mirar las <a href="http://wiki.kumbiaphp.com/Preguntas_Frecuentes#.C2.BFCu.C3.A1l_es_la_convenci.C3.B3n_para_nombrar_los_archivos_y_clases_de_modelos_y_controladores.3F">convenciones de nombres de controladores</a> si se te ocurre otro nombre mejor usalo, pero piensa que a lo largo del tutorial haré mención al <strong>controller api</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009933; font-style: italic;">/**
 * Controller para utilizar el API de SigueMiLink
 * @author Deivinson Tejeda &lt;deivinsontejeda@kumbiaphp.com&gt;
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> ApiController <span style="color: #000000; font-weight: bold;">extends</span> ApplicationController
<span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * URL del API de SigueMiLink
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_urlAPI</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://www.siguemilink.com/api/%s/?destination=%s'</span><span style="color: #339933;">;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Callback Before que verifica si la petición es Asíncrona...
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> before_filter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">is_ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_response</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'view'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Form que se comunica con el API de SigueMiLink
     * para acortar el enlace
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> acortar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">has_post</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">//Reemplazo de valores en la URL del API.</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_urlAPI <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_urlAPI<span style="color: #339933;">,</span> <span style="color: #0000ff;">'create'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">response1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_urlAPI<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'response'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ahora se crea la vista <strong>app/views/api/acortar.phtml</strong> que tiene un formulario que envia la URL al controller que será enviada al API de SigueMiLink.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;div style=&quot;margin: auto&quot;&gt;
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> form_tag<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'api/acortar/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'form-remote'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        &lt;label&gt;Acorte tu enlace&lt;/label&gt;
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> text_field_tag<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> submit_tag<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Enviar'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> end_form_tag<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;br /&gt;
    &lt;div id=&quot;update&quot; style=&quot;margin: auto;&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> javascript_include_tag<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery/jquery-1.4.2.min'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;script type=&quot;text/javascript&quot;&gt;
    &lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--
        $(function() {
            $(&quot;.form-remote&quot;).live('submit', function(event){
                event.preventDefault();
			    self = $(this);
			    var button = $('[type=submit]', self);
			    button.attr('disabled', 'disabled');
			    var url = self.attr('action');
			    //var div = self.attr('data-div');
			    $.post(url, self.serialize(), function(data, status){
				    var capa = $('#update');
				    capa.html(data);
				    capa.hide();
				    capa.show('slow');
				    button.attr('disabled', null);
			    });
            });
        });
    //--&gt;&lt;!]]&gt;
&lt;/script&gt;</pre></div></div>

<p>Creamos la vista que tiene la respuesta enviado desde el servicio que acorta la URL <strong>app/views/api/response.phtml</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">code</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000000; font-weight: bold;">?&gt;</span>
    &lt;a href=&quot;http://smlk.es/<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$response1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #000000; font-weight: bold;">?&gt;</span>/&quot;&gt;http://smlk.es/<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$response1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #000000; font-weight: bold;">?&gt;</span>/&lt;/a&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">else</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    &lt;strong&gt;No se pudo acortar el enlace&lt;/strong&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Lo genial de este ejemplo es que funciona con o sin javascript para promover la <a href="http://cachi.temiga.org/2009/10/27/accesibilidad-web/">accesibilidad web</a>. Ahora explico un poco lo que hace el <strong>controller api</strong>, el método <strong>before_filter()</strong> es un filtro que se ejecuta antes de la acción en este caso verificamos si la petición es asíncrona y de serlo damos respuesta asíncrona, útil para centralizar y si la aplicación es muy rica en javascript no se tendra que tener esta validación en cada action del controller ;).</p>
<p>La action <strong>acortar()</strong> muestra el form y envia la petición (cuando se hace el submit) al servicio <a href="http://www.siguemilink.com/" title="SigueMiLink » Acorta tus enlaces!">SigueMiLink</a> para acortar la URL, con el método <a href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Utilizando_el_m.C3.A9todo_render.28.24view.2C_.5B.24template.5D.29">render()</a> cambiamos de vista a <strong>renpose</strong> y como la petición se ha hecho asíncrona ya saben lo demas :).</p>
<p>En la vista <strong>acortar.phtml</strong> tenemos el formulario y con un JavaScript para enviar la petición asíncrona, en la <a href="http://api.jquery.com/">documentación de jQuery</a> se explican los métodos usados en este ejemplo en los cuales no me enfocare. </p>
<p>Es importante indicar el elemento del <a href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM</a> que se actualizará luego de la petición, en este caso es un div con un identificador (id) <strong>update</strong>.</p>
<p>Es de notar que en la vista <strong>response</strong> no se analizan todos los códigos de error que devuelve el API de SigueMiLink, como tarea pueden hacer esto y dar respuesta al usuario de acuerdo al error retornado del servicio.</p>
<h3>Importante</h3>
<ul>
<li>Si no indicas que la respuesta será asíncrona <a href="http://www.kumbiaphp.com">KumbiaPHP</a> cargará todo el template y por ende habran elementos de la vista que veras repetidos, así que no olvides el <strong>$this->set_response(&#8216;view&#8217;)</strong>.</li>
<li>Saber que elemento del DOM se va actualizar</li>
</ul>
<h3>A probar lo hecho</h3>
<p>Así es, nos queda probar lo que se hizo y mirar que todo ande como lo planeado, es decir un formulario con un campo de texto donde se coloca la URL que deseamos acortar al dar click en el submit si todo estuvo bien nos retorna una URL acortada para compartirla en nuestras redes sociales&#8230;</p>
<p>Asumiendo que tienes una instalación local deberías ver el ejemplo pinchando una URL como esta http://localhost/kumbiaphp/api/acortar/ es importante entender las <a href="http://wiki.kumbiaphp.com/Hola_Mundo_KumbiaPHP_Framework#KumbiaPHP_URLs" title="URL de KumbiaPHP">URL de KumbiaPHP</a></p>
<p>En la <a href="http://wiki.kumbiaphp.com/">Wiki de KumbiaPHP</a> hay un ejemplo mas simple de como <a href="http://wiki.kumbiaphp.com/Integrar_KumbiaPHP_Spirit_con_jQuery">integrar jQuery en KumbiaPHP</a> y puede quedar mucho mejor este tutorial por ejemplo tener un modelo que se consuma todo el web service del API de SigueMiLink, pero ya esto es tarea de lo mas curiosos les dejo un post que escribí sobre los <a href="http://cachi.temiga.org/2009/12/29/que-es-un-modelo-mvc/">modelo dentro del MVC</a></p>
<p>¿dudas? ¿sugerencias? deja tu comentario y ayuda a mejorar este ejemplo&#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F06%2F10%2Fkumbiaphp-ajax-jquery%2F&amp;linkname=KumbiaPHP%20%2B%20Ajax%20%2B%20jQuery"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/06/10/kumbiaphp-ajax-jquery/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Introducción a Redis e Instalando PhpRedis &#124; NoSQL</title>
		<link>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/</link>
		<comments>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/#comments</comments>
		<pubDate>Sun, 16 May 2010 03:31:57 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[GNU/linux]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[Redis]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=619</guid>
		<description><![CDATA[Introducción a Redis Como muchos se han enterado desde hace un tiempo esta en la cresta de la ola, el moviento NoSQL el cual es una serie de almacenes de datos no relacionales (ojo no han muertos las BD relaciones), hay multiples proyectos para almacenar este tipo de datos y uno de lo que mas]]></description>
			<content:encoded><![CDATA[<h3><a href="http://cachi.temiga.org/wp-content/uploads/logo-redis.png"><img class="alignright" title="logo de redis" src="http://cachi.temiga.org/wp-content/uploads/logo-redis.png" alt="" width="108" height="82" /></a>Introducción a Redis</h3>
<p>Como muchos se han enterado desde hace un tiempo esta en la cresta de la ola, el moviento <a title="NoSQL" href="http://es.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> el cual es una serie de almacenes de datos <em>no relacionales</em> (ojo no han muertos las BD relaciones), hay multiples proyectos para almacenar este tipo de datos y uno de lo que mas me ha interesado en <a title="Redis" href="http://code.google.com/p/redis/" target="_blank">Redis</a> (REmote DIctionary Server) el cual es un avanzado contenedor de datos del tipo clave-valor (key-value) muy parecido a <a title="memcached" href="http://memcached.org/" target="_blank">memcached</a>, pero a diferencia de esta que los datos <em>no son volatiles</em>, como cultura general Redis es desarrollado por <a title="antirez weblog" href="http://antirez.com/" target="_blank">Salvatore antirez Sanfilippo</a> (@<a title="Twitter Salvatore Antirez" href="http://twitter.com/antirez" target="_blank">antirez</a>)</p>
<p>Redis a diferencia de <a title="memcached" href="http://memcached.org/" target="_blank">memcached</a> cuenta con diversidad de <em>tipos de datos</em>, en Redis hay listas, conjuntos y conjuntos ordenados. Todos estos tipos de datos pueden ser manipulados con operaciones <em>atómicas</em> push/pop, add/remove. Puedes mirar todas las <a title="Características de Redis" href="http://code.google.com/p/redis/wiki/Features">características de Redis</a> en detalle del porque es una alternativa NoSQL muy interesante a valorar.</p>
<p>Redis actualmente esta siendo adoptado por multiples proyectos primordialmente por si <em>perfomance</em> (<a title="Benchmark Redis" href="http://code.google.com/p/redis/wiki/Benchmarks" target="_blank">pueden chequear el siguiente benchmark</a>) entre los cuales figuran <a title="GitHub" href="http://github.com/blog/530-how-we-made-github-fast" target="_blank">GitHub</a> (<a rel="bookmark" href="http://github.com/blog/530-how-we-made-github-fast">How We Made GitHub Fast)</a>, <a title="Vidio Wiki" href="http://vidiowiki.com/" target="_blank">VidioWiki</a>, y otros tantos. Al igual que proyectos existen <a title="Lenguajes de Programación que Soportan Redis" href="http://code.google.com/p/redis/wiki/SupportedLanguages" target="_blank">lenguajes de programación que soportan a Redis</a>.</p>
<p>Como ven hay muchas cosas interesantes en todo esto del <a title="NoSQL" href="http://es.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> y especialmente con Redis, pero es importante acotar que <em>NoSQL</em> no esta pensado para cualquier aplicación, me refiero que esta <em>nueva forma</em> de almacenar datos nace en vista de necesidad que las <a title="Base de datos relacional" href="http://es.wikipedia.org/wiki/Base_de_datos_relacional" target="_blank">Base de Datos Relaciones</a> (las mismas que ofrecen el <a title="Atomicity, Consistency, Isolation and Durability" href="http://es.wikipedia.org/wiki/ACID" target="_blank">ACID</a>) se quedarón cortas para lo que requieren las aplicación de hoy día en cuento al manejo de datos. En pocas palabras no intenten hacer un <span style="text-decoration: line-through;">Blog con NoSQL</span>, lo he visto a diario <em>producto del novísimo</em> de algunos que piensan y/o creen que ahora todo se puede hacer con NoSQL y lo que puede llevarlo <a title="Why NoSQL is bad for startups" href="http://labs.mudynamics.com/2010/04/01/why-nosql-is-bad-for-startups/">al fracaso de un startup</a> :)</p>
<h3>PHP + Redis</h3>
<p>PHP es uno de los lenguaje que ha dado soporte a Redis y hay varios clientes para trabajar con Redis los dos que considerado mas importante es <a title="Rediska (radish on russian) - PHP client for Redis." href="http://rediska.geometria-lab.net/" target="_blank">Rediska</a> la cual tiene características interesantes e integración con varios framework pero y <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> el cual es una libraría nativa de PHP escrita en C.</p>
<p><a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> es la que más me ha llamado la atención y es por tema que es una extensión nativa de PHP la cual supone que será mas rápida que cualquier librería que haga las veces de cliente para trabajar con Redis.</p>
<p>Explicare brevemente como instalar <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a>, en sistemas operativos basado en GNU/Linux en mi caso es Debian, realmente la instanción es bastante simple y lo primero es que debes tener Redis como servidor.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">#aptitude install redis-server</pre></div></div>

<p>Lo anterior solo instala el server, ya podemos trabajar con redis, pero hace falta un cliente en mi caso escogí <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a>, yo la baje directamente de <a title="GitHub" href="http://github.com/blog/530-how-we-made-github-fast" target="_blank">GitHub</a> como proyecto pudíeras solo bajar el .tar.gz.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">#git clone --depth 1 git://github.com/owlient/phpredis.git</pre></div></div>

<p>Ubicados en el directorio donde se descargo <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> hacemos lo siguiente:</p>
<p><em><strong>Nota: como se compilará un módulo de PHP necesitas tener instalado php5-dev</strong></em></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">phpize
./configure
make &amp;&amp; make install</pre></div></div>

<p>Si lo anterior se ejecuto de forma correcta tendrás un mensaje al final lo que indica que todo se instalo como este:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Build complete.
Don't forget to run 'make test'.
&nbsp;
Installing shared extensions:     /usr/lib/php5/20060613+lfs/</pre></div></div>

<p>El próximo paso es cargar el módulo en el php.ini para ubicarlo use <em>php &#8211;ini | grep &#8216;Loaded&#8217;</em> lo editamos y cargamos el módulo con solo añadir <em>extension=redis.so</em> en la sección <em>Dynamic Extensions</em> de su php.ini, ahora verificamos que lo hecho esta bien.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">php -m | grep redis
php -i | grep 'Redis Support'</pre></div></div>

<p>Hay un <a title="redis-glue-test" href="http://gist.github.com/402018" target="_blank">Script de PHP</a> el cual es un test rápido para verificar que hay comunicación entre el servidor redis y la extensión PhpRedis instalada.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">curl -s http://gist.github.com/raw/402018/redis-glue-test.php -o redis-test.php
php redis-glue-test.php</pre></div></div>

<p>Si vez lo siguiente como salida del comando anterior, sientase feliz porque ya tiene andando <a title="PhpRedis" href="http://github.com/owlient/phpredis" target="_blank">PhpRedis</a> como cliente de PHP y Redis como servidor :)</p>
<p><a href="http://cachi.temiga.org/wp-content/uploads/test-phpredis.png"><img class="aligncenter" title="Test PhpRedis" src="http://cachi.temiga.org/wp-content/uploads/test-phpredis.png" alt="" width="717" height="159" /></a></p>
<h3>Para terminar&#8230;</h3>
<p>Este post fue una introducción bastante general pero precisa a lo que es Redis como un sistema de almacenamiento key-value, espero pronto escribir algo de código donde se aprecie como guardar y recuperar datos de Redis desde PHP o bien desde la consola pura y cruda :).</p>
<p>Espero las dudas, preguntas y sugerencias sobre el post :)</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F05%2F15%2Fintroduccion-a-redis-e-instalando-phpredis-nosql%2F&amp;linkname=Introducci%C3%B3n%20a%20Redis%20e%20Instalando%20PhpRedis%20%7C%20NoSQL"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/05/15/introduccion-a-redis-e-instalando-phpredis-nosql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sistema de Enrutamiento en KumbiaPHP</title>
		<link>http://cachi.temiga.org/2010/05/01/sistema-de-enrutamiento-en-kumbiaphp/</link>
		<comments>http://cachi.temiga.org/2010/05/01/sistema-de-enrutamiento-en-kumbiaphp/#comments</comments>
		<pubDate>Sun, 02 May 2010 02:01:35 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[Router]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=581</guid>
		<description><![CDATA[Los enlaces y las URL requieren de un tratamiento especial en cualquier framework para aplicaciones web. El motivo es que la definición de un único punto de entrada a la aplicación y el uso de helpers en las vistas (Views), permiten separar completamente el funcionamiento y el aspecto de las URL. Este mecanismo se conoce]]></description>
			<content:encoded><![CDATA[<p>Los enlaces y las <acronym title="Uniform Resource Locator">URL</acronym> requieren de un tratamiento especial en cualquier <a title="framework para aplicaciones web" href="http://en.wikipedia.org/wiki/Web_application_framework">framework para aplicaciones web</a>. El motivo es que la definición de un único punto de entrada a la aplicación y el uso de <em>helpers</em> en las vistas (Views), permiten separar completamente el funcionamiento y el aspecto de las <acronym title="Uniform Resource Locator">URL</acronym>. Este mecanismo se conoce como &#8220;enrutamiento&#8221; (del inglés <em>&#8220;routing&#8221;</em>). El enrutamiento mas que ser una utilidad curiosa, es una herramienta muy útil para hacer las aplicaciones web más fáciles de usar y más seguras.</p>
<p><!-- pagebreak --></p>
<p>El enrutamiento es un mecanismo que reescribe las <acronym title="Uniform Resource Locator">URL</acronym> para simplificar su aspecto. Antes de poder comprender su importancia, es necesario dedicar unos minutos al estudio de las <acronym title="Uniform Resource Locator">URL</acronym> de las aplicaciones web.</p>
<h3>Ejecutando Acciones en el Servidor mediante URL.</h3>
<p>Las <acronym title="Uniform Resource Locator">URL</acronym> se encargan de enviar la información desde el navegador hasta el servidor. Las <acronym title="Uniform Resource Locator">URL</acronym> tradicionales incluyen la ruta hasta del <em>script</em> del servidor y algunos parámetros necesarios para completar la petición, como se muestra en el siguiente:</p>
<pre>http://www.dominio.com/controlador/noticia.php?id=123456</pre>
<p>La URL anterior revela informacion sobre la arquitectura interna de la aplicacion incluso de la BD, esto es algo que todo desarrollador de software debe evitar, veamos los detalles tecnicos:</p>
<ul>
<li>En la URL anterior, ¿que pasaria si un usuario malicioso (6) cambia el valor del parametro <span style="color: #0000ff;">id</span>? ¿Supone este caso que la aplicación ofrece una interfaz directa a la base de datos?, lo que intento decir que con esta URL nos podemos poner muy &#8220;<em><a href="http://www.wordreference.com/definicion/esot%C3%A9rico">esotérico</a></em>&#8220;, volviendose casi <strong><em>imposible aplicar seguridad</em></strong>.</li>
<li>Una URL como la anterior es muy dificil de leer, y estas no solo se muestran en la barra de direcciones de los browser, ademas son las que se indexan en los principales buscadores cuando los usuarios buscan informacion, por eso es mas simple ofrecer URL sencillas para que sean entendibles.</li>
<li>Si se modifica una <acronym title="Uniform Resource Locator">URL</acronym> (porque cambia el nombre del script u otra cosa), se deben modificar todos los enlaces a esa <acronym title="Uniform Resource Locator">URL</acronym> (esto trae consecuencias <em>terrorificas</em>). De esta forma, las modificaciones en la estructura del controlador son muy pesadas y costosas, lo que contradice la filosofía del desarrollo <em>ágil de aplicaciones</em>.</li>
</ul>
<h3>La URL como Interfaz.</h3>
<p>Una de las ideas del sistema de enrutamiento es utilizar las <acronym title="Uniform Resource Locator">URL</acronym> como parte de la interfaz. Las aplicaciones trasladan información al usuario mediante el formateo de las <acronym title="Uniform Resource Locator">URL</acronym> y el usuario puede utilizar las <acronym title="Uniform Resource Locator">URL</acronym> para acceder a los recursos de la aplicación.</p>
<p>Esto es posible en <a title="KumbiaPHP Framework" href="http://kumbiaphp.com">KumbiaPHP</a> porque la <acronym title="Uniform Resource Locator">URL</acronym> no guarda necesariamente relación con las instrucciones del servidor.  En su lugar, la <acronym title="Uniform Resource Locator">URL</acronym> está relacionada con el recurso solicitado, y su aspecto puede configurarse libremente de manera muy fácil.</p>
<pre>http://blog.temiga.org/noticias/enrutamiento_en_kumbiaphp/</pre>
<p>Esta URL tiene muchas ventajas:</p>
<ul>
<li>Las <acronym title="Uniform Resource Locator">URL</acronym> tienen significado y ayudan a los usuarios a decidir si la página que se cargará al pulsar sobre un enlace contiene lo que esperan. Un enlace puede contener detalles adicionales sobre el recurso que enlaza.</li>
</ul>
<p style="text-align: center;"><img style="border: 0pt none;" title="SEO URL Amigable de KumbiaPHP" src="http://blog.temiga.org/img/upload/url-enrutamiento-kumbiaphp.png" alt="SEO URL Amigable de KumbiaPHP" /></p>
<ul>
<li>Se puede modificar el aspecto de la <acronym title="Uniform Resource Locator">URL</acronym> y el del nombre de la acción o de los parámetros de forma independiente y con una sola modificación.</li>
<li>Aunque se modifique la estructura interna de la aplicación, las <acronym title="Uniform Resource Locator">URL</acronym> pueden mantener su mismo aspecto hacia el exterior.</li>
<li>Son más seguras. Cualquier <acronym title="Uniform Resource Locator">URL</acronym> no reconocida se redirige a una página especificada por el programador y los usuarios no pueden navegar por el directorio raíz del servidor mediante la prueba de diferentes <acronym title="Uniform Resource Locator">URL</acronym>.</li>
</ul>
<h3>Veamos como funciona.</h3>
<p>Como hemos hablado KumbiaPHP no guarda relacion con las URL externas y las <acronym title="Uniform Resource Identifier">URI</acronym> utilizadas internamente (ya conocemos algunas ventajas) la corresponsabilidad entre ambas es trabajo del Sistema de Enrutamiento (Router), esto se simplifica utilizando una sintaxis para <acronym title="Uniform Resource Identifier">URI</acronym> internas muy parecidas a las externas, ejemplo:</p>
<pre>; URI Interna
/articulos/* = controller/action/*

; NOTA controller y action respresentan quienes se encargaran de atender esa regla

;URL externa tendra esta forma
; http://www.dominio.com/articulos/una_noticia_cualquiera/</pre>
<p>El sistema de enrutamiento utiliza un archivo de configuración, llamado <code>routes.ini</code>, en el que se pueden definir las reglas de enrutamiento. Si se considera la regla mostrada arriba, se define un patrón cuyo aspecto es <strong><code>articulos/*</code></strong>.</p>
<p>Todas las peticiones realizadas KumbiaPHP son analizadas en primer lugar por el sistema de enrutamiento. El sistema de enrutamiento busca coincidencias entre la <acronym title="Uniform Resource Locator">URL</acronym> de la petición y los patrones definidos en las reglas de enrutamiento estatico. Si se produce una coincidencia, las partes del patrón que tienen nombre se transforman en parámetros de la petición y se juntan como parametros de la accion del controller.</p>
<pre>// El usuario solicita la siguiente URL externa

http://www.dominio.com/articulos/una_noticia_cualquiera/

// El Router comprueba que coincide con la regla /articulos/*
// El sistema de enrutamiento crea los siguientes parámetros de la petición
  'module'  =&gt; 'null'
  'controller'  =&gt; 'controller'
  'action'  =&gt; 'action'
  'paramater'    =&gt; 'una_noticia_cualquiera'</pre>
<p>Luego que se descompone la URL, se pasa al controller &#8220;<em>controller</em>&#8221; y action &#8220;<em>action</em>&#8221; que recibe un parametro con el valor &#8220;<em>una_noticia_cualquiera</em>&#8220;, que internamente hara lo necesario para obtener esa noticia solicitada.</p>
<pre>class ControllerController extend ApplicationController
{
    //método al cual se enruta
    public function action  ($noticia){
        echo $noticia; //salida una_noticia_cualquiera
   }
}</pre>
<h3>Conclusiones.</h3>
<p>Sin  que utilizar el Sistema de Routing es un gran aliadoy  siempre hay que tener bien claro que una URL no debe guardar relación con la arquitectura de software del lado servidor siendo parte fundamente en el uso de <a title="Etiqueta Buenas Prácticas" href="http://cachi.temiga.org/tag/buenas-practicas/" target="_blank">buenas prácticas</a> de desarrollo</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F05%2F01%2Fsistema-de-enrutamiento-en-kumbiaphp%2F&amp;linkname=Sistema%20de%20Enrutamiento%20en%20KumbiaPHP"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/05/01/sistema-de-enrutamiento-en-kumbiaphp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>GMail Drag and Drop</title>
		<link>http://cachi.temiga.org/2010/04/17/gmail-drag-and-drop/</link>
		<comments>http://cachi.temiga.org/2010/04/17/gmail-drag-and-drop/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 00:04:21 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=591</guid>
		<description><![CDATA[Google sigue con su firme apoyo a la especificacion de HTML5 y ahora en GMail han añadido la funcionalidad Drap and Drop para adjuntar archivos cuando redactamos correos, esta disponible para Google Chrome o Mozilla Firefox 3.6 todo siendo posible utilizando el API File.]]></description>
			<content:encoded><![CDATA[<p>Google sigue con su firme apoyo a la especificacion de <a title="Etiqueta HTML5" href="http://cachi.temiga.org/tag/html5">HTML5</a> y ahora en GMail han añadido la funcionalidad <em>Drap and Drop </em>para <a title="Drag and drop attachments onto messages" href="gmailblog.blogspot.com/2010/04/drag-and-drop-attachments-onto-messages.html" target="_blank">adjuntar archivos</a> cuando redactamos correos,<em> </em>esta disponible para Google Chrome o Mozilla Firefox 3.6 todo siendo posible utilizando el <a title="API File HTML5" href="http://www.w3.org/TR/FileAPI/" target="_blank">API File</a>.</p>
<p><a href="http://cachi.temiga.org/wp-content/uploads/drap-and-drop-gmail.png"><img class="aligncenter" src="http://cachi.temiga.org/wp-content/uploads/drap-and-drop-gmail.png" alt="Drap and Drop Gmail" width="500" height="293" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F04%2F17%2Fgmail-drag-and-drop%2F&amp;linkname=GMail%20Drag%20and%20Drop"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/04/17/gmail-drag-and-drop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chrome 4 Soportará el API de Base de Datos de HTML5</title>
		<link>http://cachi.temiga.org/2010/03/29/chrome-4-soportara-el-api-de-base-de-datos-de-html5/</link>
		<comments>http://cachi.temiga.org/2010/03/29/chrome-4-soportara-el-api-de-base-de-datos-de-html5/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 02:58:00 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[W3C]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=569</guid>
		<description><![CDATA[Siguen saliendo buenas noticas en cuanto la adopción de los fabricantes de browser el apoyo hacia la especificación de HTML5, este vez lo hace Google donde han anunciado que empezara a usar el API de SQL. Como parte de HTML5, la organización W3C está trabajando en un proyecto de la Web de la API de]]></description>
			<content:encoded><![CDATA[<p><a href="http://cachi.temiga.org/wp-content/uploads/google-chrome.jpg"><img class="alignleft" style="padding: 10px;" title="Logo de Chrome" src="http://cachi.temiga.org/wp-content/uploads/google-chrome.jpg" alt="Logo de Chrome" width="155" height="110" /></a>Siguen saliendo buenas noticas en cuanto la adopción de los fabricantes de browser el apoyo hacia la especificación de <a title="Etiqueta HTML5" href="http://cachi.temiga.org/tag/html5/">HTML5</a>, este vez lo hace Google donde han <a href="http://blog.chromium.org/2010/01/more-resources-for-developers.html" target="_blank">anunciado</a> que empezara a usar el <a title="Web API SQL" href="http://dev.w3.org/html5/webdatabase/#databases">API de SQL</a>.</p>
<p>Como  parte de <a title="Etiqueta HTML5" href="http://cachi.temiga.org/tag/html5/">HTML5</a>, la organización W3C está trabajando en un proyecto de  la <a href="http://translate.googleusercontent.com/translate_c?hl=en&amp;ie=UTF-8&amp;sl=en&amp;tl=es&amp;u=http://dev.w3.org/html5/webdatabase/&amp;prev=_t&amp;rurl=translate.google.com&amp;usg=ALkJrhgXCeT57oMMSaXZM7sytJiLGJxvfg#databases">Web  de la API de base de datos SQL,</a> una especificación que abarca el  almacenamiento y el acceso a datos a través de <a title="SQLite" href="http://dev.w3.org/html5/webdatabase/#web-sql" target="_blank">SQL utilizando Sqlite 3.6.19</a>, recordemos que Google cuenta con Gears también algo parecido a lo que se quiere lograr con el API de base de datos de <a title="Etiqueta HTML5" href="http://cachi.temiga.org/tag/html5/">HTML5</a> pero con la intención de normalizar ha <a href="http://www.infoq.com/news/2009/12/Google-Stops-Gears;jsessionid=CA659D7191807B41D1F9715FA9C73E3F" target="_blank">decidido detener el desarrollo de Gears</a>.</p>
<p>Este  API permite que las páginas Web que contienen código que interactúa con  una base de datos de cliente incorporado, que es útil para aplicaciones  que desee almacenar los datos de forma local o sin conexión.</p>
<p>Por otra parte Firefox 3 ya cuenta desde hace rato con <a title="Storage SQlite Firefox 3" href="https://developer.mozilla.org/en/Storage" target="_blank">Base de Datos en SQLite</a> que se utiliza actualmente con el almacenamiento de favoritos e historial de navegación y que probablemente pase a ser parte del soporte de la <a href="http://translate.googleusercontent.com/translate_c?hl=en&amp;ie=UTF-8&amp;sl=en&amp;tl=es&amp;u=http://dev.w3.org/html5/webdatabase/&amp;prev=_t&amp;rurl=translate.google.com&amp;usg=ALkJrhgXCeT57oMMSaXZM7sytJiLGJxvfg#databases">API de base de datos SQL</a> en <a title="Etiqueta HTML5" href="http://cachi.temiga.org/tag/html5/">HTML5</a>, aun no se sabe nada de IE y el soporte a esta API.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F03%2F29%2Fchrome-4-soportara-el-api-de-base-de-datos-de-html5%2F&amp;linkname=Chrome%204%20Soportar%C3%A1%20el%20API%20de%20Base%20de%20Datos%20de%20HTML5"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/03/29/chrome-4-soportara-el-api-de-base-de-datos-de-html5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Charla Básica de HTML5</title>
		<link>http://cachi.temiga.org/2010/03/28/charla-basica-de-html5/</link>
		<comments>http://cachi.temiga.org/2010/03/28/charla-basica-de-html5/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 01:06:07 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[chalas]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=554</guid>
		<description><![CDATA[La web está en constante evolución. Nuevos sitios web innovadores que se crean cada día, empujando los límites de HTML en cada dirección. HTML4 ha estado alrededor de casi una década, y los desarroladores que buscan nuevas técnicas para proporcionar una mejor funcionalidad se ve frenado por las limitaciones del lenguaje y de los navegadores.]]></description>
			<content:encoded><![CDATA[<p><a class="padding: 10px" href="http://farm3.static.flickr.com/2775/4469988699_af823279c8_t.jpg"><img class="alignleft" style="padding: 10px;" title="HTML5 Charla ISEIT" src="http://farm3.static.flickr.com/2775/4469988699_af823279c8_t.jpg" alt="HTML5 Charla ISEIT" width="83" height="100" /></a>La web está en constante evolución. Nuevos sitios web innovadores que se crean cada día, empujando los límites de HTML en cada dirección. HTML4 ha estado alrededor de casi una década, y los desarroladores que buscan nuevas técnicas para proporcionar una mejor funcionalidad se ve frenado por las limitaciones del lenguaje y de los navegadores.</p>
<p>Para dar a los autores una mayor flexibilidad y interoperabilidad, y permitir que sitios web más interactivos y emocionante, HTML5 introduce y refuerza una amplia gama de características que incluyen controles de formulario, las API, los multimedia, la estructura y la semántica.</p>
<p>La charla fue un acertamiento a las bondades que trae HTML5 para el desarrollo web.</p>
<p>Pueden ver la <a title="Charla HTML5" href="http://cachi.temiga.org/charlas/html5/">presentación</a> y dar recomendaciones para mejorarla&#8230;</p>
<p style="text-align: left;"><a title="&lt;HTML5&gt; briefing por Deivinson Tejeda, en Flickr" href="http://www.flickr.com/photos/deivinsontejeda/4470020963/"><img class="aligncenter" src="http://farm5.static.flickr.com/4013/4470020963_8cf2562d16.jpg" alt="&lt;HTML5&gt; briefing" width="500" height="333" /></a><br />
Por último y sin menos importancia agradecimiento a tatica por haber aceptado la charla, a los asistente y a todos aquellos que hicieron posible esta charla.</p>
<p style="text-align: center;">
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F03%2F28%2Fcharla-basica-de-html5%2F&amp;linkname=Charla%20B%C3%A1sica%20de%20HTML5"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/03/28/charla-basica-de-html5/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Pseudo-class y Pseudo-elements CSS</title>
		<link>http://cachi.temiga.org/2010/03/18/pseudo-class-y-pseudo-elements-css/</link>
		<comments>http://cachi.temiga.org/2010/03/18/pseudo-class-y-pseudo-elements-css/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 21:24:48 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=513</guid>
		<description><![CDATA[Desde hace rato he querido comenzar a compartir algunas notas sobre CSS, como saben el desarrollo web es un abanico bastante amplio de tecnologias y todas son importante cada cual tiene su responsabilidad en este mundillo de la web. Este en post iniciare con algunas de las pseudo-class y pseudo-elements que existen (las mas importantes)]]></description>
			<content:encoded><![CDATA[<p>Desde hace rato he querido comenzar a compartir algunas notas sobre <a title="Cascading Style Sheets" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets" target="_blank">CSS</a>, como saben el desarrollo web es un abanico bastante amplio de tecnologias y todas son importante cada cual tiene su responsabilidad en este mundillo de la web.</p>
<p>Este en post iniciare con algunas de las pseudo-class y pseudo-elements que existen (las mas importantes) en CSS2 y CSS3, basicamente para tener una idea de lo que podemos lograr hacer con un poco de imaginación haciendo uso de las bondades que CSS nos ofrece, demas esta decir la potencialidad que este encierra.</p>
<h2>Pseudo-Class CSS2</h2>
<p>La pseudo-clase <strong><em>:first-child</em></strong> selecciona el primer elemento hijo de un elemento. Consideremos el siguiente ejemplo.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">p em<span style="color: #3333ff;">:first-child </span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">//Código HTML
&nbsp;
&lt;p&gt;Cascading Style Sheets &lt;em&gt;(CSS)&lt;/em&gt; is a style sheet language used to describe
the presentation semantics (that is, the look and formatting) of a document written in a
markup language. Its most common application is to style web pages  written in
&lt;em&gt;HTML&lt;/em&gt;  and &lt;em&gt;XHTML&lt;/em&gt;, but the language can also be applied
to any kind of &lt;em&gt;XML&lt;/em&gt; document, including SVG and XUL.&lt;/p&gt;</pre></div></div>

<p>Vayamos por parte, para entender debemos interpretar el CSS definido, en el cual dado el <a href="http://www.w3.org/TR/2009/CR-CSS2-20090908/selector.html" target="_blank">selector</a> <strong><em>p em:first-child</em></strong> aplique color rojo (red) a ese elemento, es decir al primer elemento que coincida, de acuerdo al HTML colocado será y el selector CSS a quien se le aplicará el color red será &lt;em&gt;CSS&lt;/em&gt;</p>
<p style="text-align: center;"><a href="http://cachi.temiga.org/wp-content/uploads/css-result.png"><img class="aligncenter" title="CSS Result" src="http://cachi.temiga.org/wp-content/uploads/css-result.png" alt="" width="254" height="100" /></a></p>
<p>Otro truco bien interesante es colocar la primera letra de un parrafo en mayúscula.</p>
<p style="text-align: center;"><a href=" http://cachi.temiga.org/wp-content/uploads/capital-first-letter.png"><img class="aligncenter" title="CSS Result first letter capital" src=" http://cachi.temiga.org/wp-content/uploads/capital-first-letter.png" alt="" width="249" height="119" /></a></p>
<p>Con el mismo código en HTML y agregando un estilo damos el efecto anterior.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">p<span style="color: #00AA00;">:</span><span style="color: #3333ff;">:first-letter</span><span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">50px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<h2>pseudo-class relacionada con links (enlaces)</h2>
<p>Solo voy a mencionar los que considero mas importantes.</p>
<ul>
<li><strong>:link</strong> se aplica a todos los enlaces que todavía no han sido visitados por el usuario.</li>
<li><strong>:visited</strong> se aplica a todos los enlaces que han sido visitados al menos una vez por el usuario.</li>
<li><strong>:hover</strong> (muy utilizado) se activa cuando el usuario pasa el ratón o cualquier otro elemento apuntador por encima de un elemento.</li>
</ul>
<h2>Ahora con CSS3</h2>
<p>No debe quedar duda las grandes mejoras que han incluido CSS3, veamos algunas de las <a title="CSS3 pseudo-class" href="http://www.w3.org/TR/css3-selectors/#structural-pseudos" target="_blank">pseudo-class que la revisión de CSS3</a> ha incorporado.</p>
<p>Cuantos no han intentando hacer un <em>efecto de zebra</em> sobre una tabla normalmente se recurria a soluciones en JavaScript o bien con otros artificios, para aliviar esta tarea en CSS3 tenemos <strong><a href="http://www.w3.org/TR/css3-selectors/#nth-child-pseudo">:nth-child(N)</a></strong> veamos como se usa y si quieres ir mas allá puedes ver <a href="http://css-tricks.com/how-nth-child-works/">como funciona :nth-child(N)</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">tr<span style="color: #3333ff;">:nth-</span>child<span style="color: #00AA00;">&#40;</span>2n<span style="color: #00AA00;">+</span><span style="color: #cc66cc;">2</span><span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#eee</span><span style="color: #00AA00;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">    &lt;table&gt;
        &lt;tr&gt;&lt;th&gt;Header&lt;/th&gt;&lt;th&gt;Header&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Data&lt;/td&gt;&lt;td&gt;Data&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Data&lt;/td&gt;&lt;td&gt;Data&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Data&lt;/td&gt;&lt;td&gt;Data&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Data&lt;/td&gt;&lt;td&gt;Data&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Data&lt;/td&gt;&lt;td&gt;Data&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Data&lt;/td&gt;&lt;td&gt;Data&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;</pre></div></div>

<p style="text-align: center;"><a href="http://cachi.temiga.org/wp-content/uploads/nth-child.png"><img class="aligncenter" title="nth-child" src="http://cachi.temiga.org/wp-content/uploads/nth-child.png" alt="" width="278" height="192" /></a></p>
<p>Esto de <em>first-chlid</em> y <em>last-child</em> a primera vista es simple pero termina siendo bastante abstracto a medida que tenemos diseños complejos, vemos otro ejemplo tenemos una lista con &lt;em&gt;ul&lt;/em&gt; deseamos que el primero hijo (first-child) y el último (last-child) no se comporten como todos deseamos colocarle un color.</p>
<p style="text-align: center;"><a href="http://cachi.temiga.org/wp-content/uploads/last-child-first-child.png"><img class="aligncenter" title="last-child y first-child" src="http://cachi.temiga.org/wp-content/uploads/last-child-first-child.png" alt="" width="259" height="178" /></a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">ul <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">white</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">list-style</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span> <span style="color: #993333;">outside</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">&#125;</span>
ul li <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">border-bottom</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">2px</span><span style="color: #00AA00;">&#125;</span>
li<span style="color: #3333ff;">:last-child</span><span style="color: #00AA00;">,</span> li<span style="color: #3333ff;">:first-child</span><span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">&#125;</span>
li<span style="color: #3333ff;">:last-child </span><span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>En la línea 1 se indica que todos los li van a tener un border-bottom.<br />
En la línea 3 se indica que el primero y último hijo tenga un background distinto al de todos los demas.<br />
En la línea 4 se indica que el border-bottom definido en la línea 1 quede sin efecto para el último hijo de la lista.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;ul&gt;
	&lt;li&gt;asdad&lt;/li&gt;
	&lt;li&gt;asdad&lt;/li&gt;
	&lt;li&gt;asdad&lt;/li&gt;
	&lt;li&gt;adasd&lt;/li&gt;
	&lt;li&gt;adasd&lt;/li&gt;
	&lt;li&gt;adasd&lt;/li&gt;
&lt;/ul&gt;</pre></div></div>

<p style="text-align: center;"><a href="http://cachi.temiga.org/wp-content/uploads/first-child-last-child-demo.png"><img class="aligncenter" title="last-child y first-child demo" src="http://cachi.temiga.org/wp-content/uploads/first-child-last-child-demo.png" alt="" width="116" height="157" /></a></p>
<p>Con esto finalizó este post donde la idea básica fue mostrar las bondades (solo algunas) de lo que ofrece CSS pueden ver todo lo que se hizo a lo largo de este post <a href="http://cachi.temiga.org/wp-content/demo/css-demo.html">demo</a> , si crees que este post puede ser mejor dimelo!&#8230;</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F03%2F18%2Fpseudo-class-y-pseudo-elements-css%2F&amp;linkname=Pseudo-class%20y%20Pseudo-elements%20CSS"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/03/18/pseudo-class-y-pseudo-elements-css/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Razones para usar KumbiaPHP Framework</title>
		<link>http://cachi.temiga.org/2010/02/27/razones-para-usar-kumbiaphp-framework/</link>
		<comments>http://cachi.temiga.org/2010/02/27/razones-para-usar-kumbiaphp-framework/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 18:27:25 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=452</guid>
		<description><![CDATA[Hoy me dedique a actualizar un viejo Post que fue escrito por allá en Junio del 2007 donde se mencionan algunas razones por las cuales utilizar KumbiaPHP. Esta actualización fue producto de que estoy trabajando con @HenryStivens en la creación de unos podcast sobre KumbiaPHP, en otro post daré detalle sobre estos podcast.]]></description>
			<content:encoded><![CDATA[<p>Hoy me dedique a actualizar un viejo Post que fue escrito por allá en <a href="http://cachi.temiga.org/2007/06/">Junio del 2007</a> donde se mencionan <a href="http://cachi.temiga.org/2007/06/04/kumbia/" title="razones por las cuales utilizar KumbiaPHP">algunas razones por las cuales utilizar KumbiaPHP</a>.</p>
<p>Esta actualización fue producto de que estoy trabajando con <a href="http://twitter.com/henrystivens/" title="Twitter de Henry Stivens">@HenryStivens</a> en la creación de unos podcast sobre <a href="http://kumbiaphp.com" title="KumbiaPHP Framework">KumbiaPHP</a>, en otro post daré detalle sobre estos podcast.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F02%2F27%2Frazones-para-usar-kumbiaphp-framework%2F&amp;linkname=Razones%20para%20usar%20KumbiaPHP%20Framework"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/02/27/razones-para-usar-kumbiaphp-framework/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>KumbiaPHP Tips: aprovecha el método initialize()</title>
		<link>http://cachi.temiga.org/2010/01/31/kumbiaphp-tips-aprovecha-el-metodo-initialize/</link>
		<comments>http://cachi.temiga.org/2010/01/31/kumbiaphp-tips-aprovecha-el-metodo-initialize/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 01:33:40 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[KumbiaPHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[KumbiaPHP Tips]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=410</guid>
		<description><![CDATA[Desde hace días he estado por escribir pequeñas notas donde se pueda obtener el mayor provecho al momento de utilizar KumbiaPHP, en este primer post mencionaré como aprovechar uno de los callback de los que dispone KumbiaPHP en su versión 1.0 Codename Spirit y que he notado que muy pocos usuarios suelen aprovecharlo y/o utilizarlo.]]></description>
			<content:encoded><![CDATA[<p><a href="http://cachi.temiga.org/wp-content/uploads/helpful_tips_image.jpg"><img class="alignleft" style="padding: 10px;" title="Tips and Tricks" src="http://cachi.temiga.org/wp-content/uploads/helpful_tips_image.jpg" alt="" width="180" height="182" /></a>Desde hace días he estado por escribir pequeñas notas donde se pueda obtener el mayor provecho al momento de utilizar <a title="KumbiaPHP Framework" href="http://www.kumbiaphp.com">KumbiaPHP</a>, en este primer post mencionaré como aprovechar uno de los <em>callback</em> de los que dispone KumbiaPHP en su <a href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit">versión 1.0 Codename Spirit</a> y que he notado que muy pocos usuarios suelen aprovecharlo y/o utilizarlo.</p>
<p>Me refiero al método <strong>initialize()</strong> el cual actúa como un filtro y es ejecutado antes de cualquier Controlador que hayamos definido. Esto no es por casualidad recordemos que <a title="KumbiaPHP Framework" href="http://www.kumbiaphp.com/">KumbiaPHP</a> es un Framework <a title="POO" href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" target="_blank">Orientado a Objetos (POO)</a>, en pocas palabras el método <strong><em>initialize()</em></strong> esta definido en la class <em><strong>Controller</strong></em>, nosotros como desarrolladores solo debemos darle el comportamiento que queramos.</p>
<p>Para tener una idea mas clara imaginemos que tenemos un módulo (admin) y queremos que dicho módulo tenga un <a title="Template en KumbiaPHP" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#views.2Ftemplates.2F">Template</a> distinto al que hemos definido por defecto en toda la aplicación.</p>
<p>En el archivo [app]/application.php es donde debemos darle comportamiento al método initialize().</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> ApplicationController <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//verificamos que exista un módulo con nombre &quot;admin&quot;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>Router<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'module'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">//cambiamos el valor por defecto del template en caso que exista ese módulo</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">template</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'template_admin'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>En el código anterior no hay nada <em>esotérico</em> y con esto hemos cambiado el comportamiento de todos nuestros controladores sin necesidad de ir de uno en uno y como esta podemos aplicar otras validaciones en ese punto de ejecución de nuestra aplicación</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2010%2F01%2F31%2Fkumbiaphp-tips-aprovecha-el-metodo-initialize%2F&amp;linkname=KumbiaPHP%20Tips%3A%20aprovecha%20el%20m%C3%A9todo%20initialize%28%29"><img src="http://cachi.temiga.org/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://cachi.temiga.org/2010/01/31/kumbiaphp-tips-aprovecha-el-metodo-initialize/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
