<?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; POO</title>
	<atom:link href="http://cachi.temiga.org/tag/poo/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 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>
		<item>
		<title>¿Que es un Modelo? &#8211; MVC</title>
		<link>http://cachi.temiga.org/2009/12/29/que-es-un-modelo-mvc/</link>
		<comments>http://cachi.temiga.org/2009/12/29/que-es-un-modelo-mvc/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 23:41:14 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[KumbiaPHP]]></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=378</guid>
		<description><![CDATA[Una de las cosas que se aprecia constantemente entre las comunidades de desarrolladores, es la vaga idea que suele existir sobre el manejo del MVC donde solo se tiene en mente el concepto de wikipedia y demas sitios donde se conceptualiza sobre el tema. Resulta bastante difícil, de acuerdo a mi experiencia y el roce]]></description>
			<content:encoded><![CDATA[<p>Una de las cosas que se aprecia constantemente entre las comunidades de desarrolladores, es la vaga idea que suele existir sobre el manejo del <a title="MVC Wikipedia" href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador" target="_blank">MVC</a> donde solo se tiene en mente el concepto de wikipedia y demas sitios donde se conceptualiza sobre el tema.</p>
<p>Resulta bastante difícil, de acuerdo a mi experiencia y el roce que he tenido con personas del área, ir de la teoría a la implementacion del concepto de lo que es <a title="MVC Wikipedia" href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador" target="_blank">MVC</a> parece ser una camino ofuscado en el que muchos se pierden. La gran mayoría suele decir <em>&#8220;estoy claro en lo es MVC&#8230;&#8221;</em>, pero cuando se ve la aplicabilidad se termina dando cuenta que lo que dijó <em>&#8220;estoy claro&#8230;&#8221;</em> es inversamente proporcional.</p>
<h2>Filosofía de un Modelo</h2>
<p>Estos son &#8220;Lógica de Negocio&#8221; y son parte fundamental para el momento que se desarrolla una aplicación, un buen uso de estos nos permiten un gran poder al momento que se necesita escalar, mantener y rehusar código en una aplicación.; es un concepto muy simple, pero la complicacion esta en comprender lo que significa &#8220;Logica de Negocio&#8221; ya que muchos piensan que la única forma de tener &#8220;Lógica de Negocio&#8221; va estrecha y únicamente relacionada con una conexión de <a title="WikiPedia Base de Datos" href="http://es.wikipedia.org/wiki/Base_de_datoshttp://es.wikipedia.org/wiki/Base_de_datos" target="_blank">Base de Datos</a> y esto no es asi!</p>
<p>La práctica mas común (en todos los niveles, no solo me refiero a usuarios novatos) es que dejan la lógica en los <a title="MVC Wikipedia" href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador#Descripci.C3.B3n_del_patr.C3.B3nhttp://es.wikipedia.org/wiki/Modelo_Vista_Controlador#Descripci.C3.B3n_del_patr.C3.B3n" target="_blank">controladores</a>, a medida que se deja código de la <em>lógica de negocio</em> en un controlador trae consecuencias garrafales a largo plazo siendo imposible su reutilizacion, traduciendoce en una mala implementacion (<strong>código espaguetti</strong>). Lo antes expuesto no es precisamente lo que fomenta MVC y <a title="Programación Orientada a Objetos" href="http://es.wikipedia.org/wiki/POO" target="_self">POO</a> donde la idea fundamental es el orden y reutilización del código.</p>
<p>Veamos un par de ejemplos para contextualizar.</p>
<p>El primero es un Modelo donde su <em>lógica de negocio</em> esta en una Base de Datos y por ende necesitamos una conexion a motor para trabajar con esa fuente de datos.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Articulos <span style="color: #000000; font-weight: bold;">extends</span> ActiveRecord <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ver<span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #000088;">$ppage</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>paginate<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'order: creat_at desc'</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">&quot;page: <span style="color: #006699; font-weight: bold;">$page</span>&quot;</span><span style="color: #339933;">,</span>
					<span style="color: #0000ff;">&quot;per_page: <span style="color: #006699; font-weight: bold;">$ppage</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ultimos<span style="color: #009900;">&#40;</span><span style="color: #000088;">$limit</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$today</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'now'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>find<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'order: creat_at desc'</span><span style="color: #339933;">,</span>
				   <span style="color: #0000ff;">&quot;conditions: data &amp;gt;= <span style="color: #006699; font-weight: bold;">$today</span>&quot;</span><span style="color: #339933;">,</span>
                                    <span style="color: #0000ff;">&quot;limit: <span style="color: #006699; font-weight: bold;">$limit</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Lo que mencionamos arriba sobre la re-utilización de código y característica fundamental de la <a title="Programación Orientada a Objetos" href="http://es.wikipedia.org/wiki/POO" target="_blank">POO</a>, si vemos el método <strong><em>ultimos()</em></strong> del modelo Articulos nos sirve para crear un RSS, widget (Partial en KumbiaPHP) con los artículos recientes, etc. es decir donde se necesite los últimos artículos.</p>
<p>El segundo es un Modelo para el manejo de fotos y su la <em>lógica de negocio</em> <strong>no esta ligada a una BD</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;">/**
* Carga la libreria upload
**/</span>
Load<span style="color: #339933;">::</span><span style="color: #004000;">lib</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'upload'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009933; font-style: italic;">/**
* Carga la libreria wideimage
**/</span>
<span style="color: #666666; font-style: italic;">//Load::lib('wideimage');</span>
<span style="color: #009933; font-style: italic;">/**
* Modelo para manipular las fotos de las personas
*
**/</span>
<span style="color: #000000; font-weight: bold;">class</span> Foto
<span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
* Guarda la foto de una persona
*
* @param string $id id de la foto al guardar
* @param string $file nombre de la foto
* @return boolean
**/</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> save <span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</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;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'error'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Flash<span style="color: #339933;">::</span><span style="color: #004000;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error: No se ha logrado subir el archivo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'image/jpeg'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'image/pjpeg'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'image/gif'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'image/png'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Flash<span style="color: #339933;">::</span><span style="color: #004000;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error: Solo se admiten imagenes JPEG, PNG y GIF'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'size'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">600</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Flash<span style="color: #339933;">::</span><span style="color: #004000;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Error: No se admiten imagenes superiores a 600KB'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Upload<span style="color: #339933;">::</span><span style="color: #004000;">image</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$id</span>.jpg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$file_path</span> <span style="color: #339933;">=</span> APP_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;public/img/upload/<span style="color: #006699; font-weight: bold;">$id</span>.jpg&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #666666; font-style: italic;">// con marca de agua</span>
            <span style="color: #666666; font-style: italic;">// $watermark = wiImage::load(APP_PATH . &quot;public/img/logo.png&quot;);</span>
            <span style="color: #666666; font-style: italic;">// wiImage::load($file_path)-&gt;resize(160, 213, 'fill')-&gt;merge($watermark, 40, 175)-&gt;saveToFile($file_path);</span>
            wiImage<span style="color: #339933;">::</span><span style="color: #004000;">load</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">160</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">213</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'fill'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">saveToFile</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #990000;">chmod</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_path</span><span style="color: #339933;">,</span> <span style="color: #208080;">0777</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009933; font-style: italic;">/**
* Busca la foto y en caso de que exista retorna la ruta relativa respecto al directorio de imagenes
*
* @return string $id
* @return string
**/</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> get <span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</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: #990000;">is_file</span><span style="color: #009900;">&#40;</span>APP_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;public/img/upload/<span style="color: #006699; font-weight: bold;">$id</span>.jpg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;upload/<span style="color: #006699; font-weight: bold;">$id</span>.jpg&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009933; font-style: italic;">/**
* ELimina la foto del usuario
*
* @return string $id
* @return string
**/</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> delete <span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$filepath</span> <span style="color: #339933;">=</span> APP_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;public/img/upload/<span style="color: #006699; font-weight: bold;">$id</span>.jpg&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filepath</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filepath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como se aprecia en este segundo modelo no existe ninguna conexión a una BD y sigue teniendo <em>lógica de negocio</em> para la aplicación, esta historia también se puede repetir para un modelo de sessión, o como me comento el amigo Jesus Lara (<a title="Phenobarbital con Soda" href="http://phenobarbital.wordpress.com/">Phenobarbital</a>) tiene modelos que gestionan todas las operaciones de un servidor SAMBA.</p>
<p><a title="Como Usar los Modelos en KumbiaPHP" href="http://wiki.kumbiaphp.com/Como_Usar_los_Modelos_en_KumbiaPHP">Como Usar los Modelos en KumbiaPHP</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2009%2F12%2F29%2Fque-es-un-modelo-mvc%2F&amp;linkname=%C2%BFQue%20es%20un%20Modelo%3F%20%26%238211%3B%20MVC"><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/2009/12/29/que-es-un-modelo-mvc/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Entendiendo el Modelo Orientado a Objeto de PHP :-)</title>
		<link>http://cachi.temiga.org/2008/11/01/entendiendo-el-modelo-orientado-a-objeto-de-php/</link>
		<comments>http://cachi.temiga.org/2008/11/01/entendiendo-el-modelo-orientado-a-objeto-de-php/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 03:58:43 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Buenas Prácticas]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=161</guid>
		<description><![CDATA[Dejo una presentación que considero excelente y ayudara aclarar muchas dudas en cuanto al modelo de POO de PHP ya que veo que existe un gran desconocimiento a nivel general y que escala a niveles bien altos en torno a este tema, la invitación es que vayamos a nuevas practicas de desarrollo y dejemos atrás]]></description>
			<content:encoded><![CDATA[<p>Dejo una presentación que considero excelente y ayudara aclarar muchas dudas en cuanto al modelo de <a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos">POO</a> de PHP ya que veo que existe un gran desconocimiento a nivel general y que escala a niveles bien altos en torno a este tema, la invitación es que vayamos a nuevas practicas de desarrollo y dejemos atrás la vieja escuela de esa programación estructurada que no permite que PHP avance como un lenguaje mas serio respecto a otros y esto es producto de los mismo desarrolladores. </p>
<div style="width:425px;text-align:left" id="__ss_423889"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/sebastian_bergmann/understanding-the-php-object-model?type=powerpoint" title="Understanding the PHP Object Model">Understanding the PHP Object Model</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=20080522phptek-1211544400120012-8&#038;stripped_title=understanding-the-php-object-model" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=20080522phptek-1211544400120012-8&#038;stripped_title=understanding-the-php-object-model" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/sebastian_bergmann/understanding-the-php-object-model?type=powerpoint" title="View Understanding the PHP Object Model on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/php">php</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/oop">oop</a>)</div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2008%2F11%2F01%2Fentendiendo-el-modelo-orientado-a-objeto-de-php%2F&amp;linkname=Entendiendo%20el%20Modelo%20Orientado%20a%20Objeto%20de%20PHP%20%3A-%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/2008/11/01/entendiendo-el-modelo-orientado-a-objeto-de-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDO (PHP Data Objects)&#8230;</title>
		<link>http://cachi.temiga.org/2008/10/12/pdo-php-data-objects/</link>
		<comments>http://cachi.temiga.org/2008/10/12/pdo-php-data-objects/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 21:02:51 +0000</pubDate>
		<dc:creator>CaChi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[PDO]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://cachi.temiga.org/?p=122</guid>
		<description><![CDATA[Muy pocos desarrolladores de PHP conocen la existencia de algo llamado PDO, dejo una presentación que puede ayudar aclarar porque es bueno que se comiencen a implementar estas nuevas prácticas que trae PHP5 en nuestros desarrollados. PHP Data Objects View SlideShare presentation or Upload your own. (tags: access database)]]></description>
			<content:encoded><![CDATA[<p>Muy pocos desarrolladores de PHP conocen la existencia de algo llamado <a href="http://ve2.php.net/pdo">PDO</a>, dejo una presentación que puede ayudar aclarar porque es bueno que se comiencen a implementar estas nuevas prácticas que trae PHP5 en nuestros desarrollados.</p>
<div style="width:425px;text-align:left" id="__ss_480915"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/wezfurlong/php-data-objects?type=powerpoint" title="PHP Data Objects">PHP Data Objects</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=furlongpdolong-1214197343293793-9&#038;stripped_title=php-data-objects" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=furlongpdolong-1214197343293793-9&#038;stripped_title=php-data-objects" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/wezfurlong/php-data-objects?type=powerpoint" title="View PHP Data Objects on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/access">access</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/database">database</a>)</div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fcachi.temiga.org%2F2008%2F10%2F12%2Fpdo-php-data-objects%2F&amp;linkname=PDO%20%28PHP%20Data%20Objects%29%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/2008/10/12/pdo-php-data-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
