<?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>CuatroXL &#187; zend framework</title>
	<atom:link href="http://www.cuatroxl.com/category/zend-framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cuatroxl.com</link>
	<description>Desarrollo web - Cuatro XL</description>
	<lastBuildDate>Wed, 07 Dec 2011 12:21:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Cuatroxl_Controller_Plugin_DataPage :: Un plugin para cargar datos multi-idioma (o no) con ZF</title>
		<link>http://www.cuatroxl.com/2010/08/cuatroxl_controller_plugin_datapage-un-plugin-para-cargar-datos-multi-idioma-o-no-con-zf/</link>
		<comments>http://www.cuatroxl.com/2010/08/cuatroxl_controller_plugin_datapage-un-plugin-para-cargar-datos-multi-idioma-o-no-con-zf/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 12:12:08 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[component]]></category>
		<category><![CDATA[componente_web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[cuatroxl source]]></category>
		<category><![CDATA[zend_controller plugin]]></category>

		<guid isPermaLink="false">http://cuatroxl.com/?p=406</guid>
		<description><![CDATA[Este plugin viene bastante bien para tener todos los datos de texto en un XML. Por norma general se suele guardar en una base de datos; pero muchas veces el sitio no tiene un CMS o es muy pequeño para tener la información en una base de datos. Con este plugin cargamos un XML, pasandole [...]]]></description>
			<content:encoded><![CDATA[<p>Este plugin viene bastante bien para tener todos los datos de texto en un XML. Por norma general se suele guardar en una base de datos; pero muchas veces el sitio no tiene un CMS o es muy pequeño para tener la información en una base de  datos.</p>
<p>Con este plugin cargamos un XML, pasandole unos parámetros de configuración para que automáticamente nos seleccione un nodo especifico del XML. Esta configuración utiliza comodines de Zend_Route (Module, Controller, Action, ParamX&#8230;.) para el nombre del archivo y el nodo por defecto:</p>
<pre class="brush: php;">
<?php
/*
 * Cuatroxl
 *
 * LICENSE
 *
 * This file is part of Cuatroxl ( http://code.google.com/p/cuatroxl/ ).
 *
 * Cuatroxl is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Cuatroxl is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Cuatroxl.  If not, see <http ://www.gnu.org/licenses/>.
 *
 *
 * @category   Cuatroxl
 * @package    Cuatroxl_Zf_Action_Helper
 * @autor      Jimmy Collazos <jimmy.collazos@gmail.com>
 * @license    http://www.gnu.org/licenses/gpl.html     GPLv3
 * @version    0.01
 */

/**
 * @see Zend_Controller_Plugin_Abstract
 */
require_once 'Zend/Controller/Plugin/Abstract.php';

/**
 * @category   Cuatroxl
 * @package    Cuatroxl_Controller
 * @subpackage Cuatroxl_Controller_Plugin
 * @license    http://www.gnu.org/licenses/gpl.html     GPLv3
 */
class Cuatroxl_Controller_Plugin_DataPage extends Zend_Controller_Plugin_Abstract
{

    /*
     * Variable de configuración
     *
     * @var Array
     */
    protected       $_config      = array('autoload'  => false
                            ,'filePath'     => 'public/:module/:controller/:action.xml'
                            ,'xpath'        => ''
                            ,'basePath'     => APPLICATION_PATH
                            // esta opción es solo para cuando NO usamos Zend_Application
                            ,'_keyPlugin'   => '');

    /*
     * Ruta del archivo XML a cargar
     *
     * @var string
     */
    protected       $_filePath = null;

    /*
     * Xpath query para poder obteenr el nodo por defecto del XML
     *
     * @var string
     */
    protected       $_xpath = null;

    /*
     * En esta variable se almacena el XML final con el que podemos trabajar
     * desde el controlador
     *
     * @var SimpleXMLElement
     */
    protected       $_data;

    /*
     * Nombre asignado en el archivo de configuración de al aplicación
     *
     * @var string
     */
    private         $_keyPlugin;

    /**
     * Constructor
     *
     * @param  Array
     * @return void
     */

    public function  __construct( array $options = array() ) {

        $this->_setConfig($options);

    }

    /*
     * routeShutdown() es como el constructor ya que se usa para setear el XML
     * en caso de estar activado el "autoload" y también setea la configuración del INI
     *
     * @param Zend_Controller_Request_Abstract
     * @return void
     */
    public function routeShutdown( Zend_Controller_Request_Abstract $request)
    {

        //@TODO cambiar esto por una funcion que setee todas las opciones
        $bootstrap = Zend_Controller_Front::getInstance()
                            ->getParam('bootstrap');
        if(! empty($bootstrap) ){
            $bootstrapOptions   = $bootstrap->getOptions();
            $this->_keyPlugin          = $this->_getKeyPlugin($bootstrapOptions['resources']['frontController']['plugins']);
            if($this->_keyPlugin){
                if(! empty($bootstrapOptions[$this->_keyPlugin]['config'])){
                    $this->_setConfig($bootstrapOptions[$this->_keyPlugin]['config']);
                }
            }
            //@TODO añadir una excepción
            $this->_parseFilePath();
            $this->_parseXPath();

            if( $this->_config['autoload'] ){
                $this->_loadXmlFile();
                $this->_setXPath();
            }
        }
    }

    /*
     * Setea los daots en la variable _data
     *
     * @param SimpleXMLElement
     * @return void
     */
    public function setData ( SimpleXMLElement $data )
    {
        $this->_data = $data;

        if(!empty ($this->_keyPlugin) ){
            Zend_Controller_Front::getInstance()
                    ->setParam($this->_keyPlugin, $this->_data);
        }
    }

    /*
     * Devueble el XML obtenido
     *
     * @return Cuatroxl_Controller_Plugin_DataPage $_data
     *
     */
    public function getData ()
    {
        return $this->_data;
    }

    /*
     * Configura todas las opiones de la clase
     *
     * @var array
     * @return Cuatroxl_Controller_Plugin_DataPage  Provides a fluent interface
     *
     */
    protected function _setConfig( array $config) {
        foreach ($config as $k => $v){
            if(!empty ($v)){
                $this->_config[$k] = $v;
            }
        }
        return $this;
    }

    /*
     * Carga el archivo XML
     *
     * @var string
     * @return Cuatroxl_Controller_Plugin_DataPage Provides a fluent interface
     *
     */
    protected function _loadXmlFile( string $fileName = NULL ) {
        if( $fileName === NULL ){
            $fileName = $this->_filePath;
        }
        if( file_exists( $fileName ) ){
            $data   = simplexml_load_file( $fileName );
            $this->setData( $data );
        }
        return $this;
    }

    /*
     * Ejecuta una query sobre el XML con xpath y devuelve TRUE o FALSE  según el exito de la consulta
     *
     * @var string
     * @return Boolean
     *
     */
    protected function _setXPath( string $path = NULL ) {
        if( $path === NULL){
            $path = $this->_xpath;
        }

        if( empty($this->_xpath) ){
            return false;
        }

        $data = $this->_data->xpath($this->_xpath);

        if( empty ($data[0]) ){
            return false;
        }else{
            $this->setData( array_shift( $data ) );
            return true;
        }

    }

    /*
     * remplaza los comodines en la ruta al XML y devuelve TRUE o FALSE
     * según el exito de la consulta
     *
     * @return Boolean
     *
     */
    private function _parseFilePath() {

        //@TODO indagar para hacer este proceso con con Zend_Controller_Router_Route
        if(! preg_match_all("/:[^\/\.]+/s", $this->_config['filePath'], $matches) ){
            return false;
        }
        $request        = $this->getRequest();
        $values         = array();
        $matches        = $matches[0];
        foreach($matches as $v){
            $values[] = $request->getParam(substr($v, 1));
        }
        $matches[]          = '/';
        $values[]           = DIRECTORY_SEPARATOR;
        $this->_filePath    = str_replace($matches, $values, $this->_config['basePath'].$this->_config['filePath']);

        return true;
    }

    /*
     * remplaza los comodines en la ruta al nodop por defecto del  XML
     * y devuelve TRUE o FALSE  según el exito de la consulta
     *
     * @return Boolean
     *
     */
    private function _parseXPath() {

        //@TODO indagar para hacer este proceso con con Zend_Controller_Router_Route
        if( empty ($this->_config['xpath']) ){
            return false;
        }
        if(! preg_match_all("/:[\d\w_]+/s", $this->_config['xpath'], $matches) ){
            $this->_xpath = $this->_config['xpath'];
            return true;
        }
        $request        = $this->getRequest();
        $values         = array();
        $matches        = $matches[0];
        foreach($matches as $v){
            $values[] = $request->getParam(substr($v, 1));
        }

        $this->_xpath    = str_replace($matches, $values, $this->_config['xpath']);

        return true;
    }

    /*
     * Devuelve el nombre que se designó en el archivo de configuración
     *
     * @return string o false
     */
    private function _getKeyPlugin(array $config)
    {
        foreach ($config as $k => $v){
            if($v === 'Cuatroxl_Controller_Plugin_DataPage'){
                return $k;
            }
        }
        return false;
    }
}
</pre>
<h1>Modo de uso con Zend_Application</h1>
<p>Configuracion:</p>
<pre class="brush: javascript;">
;definimos la clase, en este caso lo asociamos a "dataPage"
resources.frontController.plugins.dataPage = "Cuatroxl_Controller_Plugin_DataPage"
;le decimos que la carga es automática
dataPage.config.autoload = 1
;la ruta del XML utilizando como comodín el parámetro LANG, nombre del controlador y acción
dataPage.config.filePath = ":lang/:controller/:action.xml"
;el nodo, del XML, por defecto que tiene que cargar; también usando la variable PAGE
dataPage.config.xpath = "pages/page[@id=':page']"
;el directorio raíz de donde están los XML
dataPage.config.basePath = APPLICATION_PATH "/../public/data/"
</pre>
<p>Controller:</p>
<pre class="brush: php;">
public function indexAction()
{
    // El parámetro "dataPage" es el mismo nombre con que vinculamos en el archivo de configuración
    var_dump($this->getFrontController()->getParam('dataPage'));
}
</pre>
<p>pdt: tengo que subirlo a Google Code; por lo que pronto colgaré la dirección con un manual más sencillo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2010/08/cuatroxl_controller_plugin_datapage-un-plugin-para-cargar-datos-multi-idioma-o-no-con-zf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acceso a variable del config desde Zend_Controller_Plugin con Zend_Application (solucionado)</title>
		<link>http://www.cuatroxl.com/2010/07/acceso-variable-config-desde-zend_controller_plugin-con-zend_application/</link>
		<comments>http://www.cuatroxl.com/2010/07/acceso-variable-config-desde-zend_controller_plugin-con-zend_application/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 13:15:12 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[Zend_Application]]></category>

		<guid isPermaLink="false">http://cuatroxl.com/2010/07/acceso-a-variable-del-config-desde-plugin-con-zend_application/</guid>
		<description><![CDATA[Es la primera vez que uso Zend_Application y ando un poco perdido. Estoy haciendo un plugin ( Zend_Controller_Plugin ) y hay una variable que necesito tener en el archivo de configuración (declarado en Zend_Application). El problema lo tengo a la hora de accedes ésta desde el Plugin. La única posibilidad que he visto es declarar [...]]]></description>
			<content:encoded><![CDATA[<p>Es la primera vez que uso Zend_Application y ando un poco perdido.</p>
<p>Estoy haciendo un plugin ( Zend_Controller_Plugin ) y hay una variable que necesito tener en el archivo de configuración (declarado en Zend_Application). El problema lo tengo a la hora de accedes ésta desde el Plugin.</p>
<p>La única posibilidad que he visto es declarar el config con Zend_Registre desde el Bootstrap; pero para ello estoy obligado a hacerlo cada vez en cada proyecto y me parece un poco &#8220;raro&#8221;:</p>
<pre class="brush: php;">
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initConfig()
    {
        $config = new Zend_Config($this-&gt;getOptions(), true);
        Zend_Registry::set('config', $config);
        return $config;
   }
   ....
</pre>
<p>Otra manera, más fea, es re-declarar el config file desde el plugin; pero estaría en la misma porque tendría que poner la ruta del file.</p>
<p>Alguna idea?</p>
<h2>Update:</h2>
<p>Por fin he encontrado la solución. He podido obtener config del bootstrap a través del controlador; es un poco engorroso pero al final el código es muy cortito:</p>
<pre class="brush: php;">
class myPlugin extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown($request)
    {
        //optenemos la instancia del Zend_Application_Bootstrap
        $bootstrap = Zend_Controller_Front::getInstance()
                                ->getParam('bootstrap');
        //Ahora si que tenemos acceso al archivo de configuración (application.ini)
        $config = $bootstrap->getOptions();
        var_dump($config)
    }
    ....
}
</pre/>

Al final resultó basante sencillo, aunque ahora tengo que averiguar con que nombre se le ha instanciado el plugin y utilizar ese mismo para la configuración; ejemplo:
<pre class="brush: js;">
resources.frontController.plugins.namePlugin = "ClassPlugin"
namePlugin.options.optionA = 1
</pre>
<pre class="brush: js;">
resources.frontController.plugins.otherNamePlugin = "ClassPlugin"
otherNamePlugin.options.optionA = 1
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2010/07/acceso-variable-config-desde-zend_controller_plugin-con-zend_application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Application: Guía para empezar</title>
		<link>http://www.cuatroxl.com/2009/08/zend-application-guia-para-empezar/</link>
		<comments>http://www.cuatroxl.com/2009/08/zend-application-guia-para-empezar/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 10:50:19 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[enlaces]]></category>
		<category><![CDATA[zend application]]></category>

		<guid isPermaLink="false">http://cuatroxl.com/?p=273</guid>
		<description><![CDATA[Estoy empezando a investigar sobre Zend Application, creo que debo de ser el único que a estas alturas no lo usa; pero nunca es tarde para empezar. Aquí pongo unos enlaces para comenzar a leer y poder empezar zend application ejemplo zend framework (español) bootstrapping con zend application (Español, muy bien explicado) Set up a [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy empezando a investigar sobre Zend Application, creo que debo de ser el único que a estas alturas no lo usa; pero nunca es tarde para empezar.</p>
<p>Aquí pongo unos enlaces para comenzar a leer y poder empezar</p>
<ul>
<li><a href="http://www.forosdelweb.com/f68/zend-application-ejemplo-zend-framework-1-8-a-709661/">zend application ejemplo zend framework</a> (español)</li>
<li><a href="http://bolsadeideas.cl/zsamer/2009/08/bootstrapping-con-zend-application/">bootstrapping con zend application</a> (Español, muy bien explicado)</li>
<li><a href="http://maff.ailoo.net/2009/04/set-up-a-zend-framework-application-using-zend_application-including-phpunit-setup/">Set up a Zend Framework application using Zend_Application (including PHPUnit setup)</a> (Ingles, para mí el mejor. Tienes un Zip para descargar con la estructura y config ya echo)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2009/08/zend-application-guia-para-empezar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Feed_Reader :: introducción y tutorial</title>
		<link>http://www.cuatroxl.com/2009/07/zend_feed_reader-introduccion-y-tutorial/</link>
		<comments>http://www.cuatroxl.com/2009/07/zend_feed_reader-introduccion-y-tutorial/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 16:10:57 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[enlaces]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[Zend_Feed]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://cuatroxl.com/?p=264</guid>
		<description><![CDATA[Si ha utilizado Zend_Feed, sabrá que la obtención de algo tan  sencillo, como el contenido, o una fecha de creación, es una tarea que requiere un poco de trabajo. La alimentación  vienen en tres formas diferentes: RSS, RDF / RSS y Atom, todos con múltiples versiones. Cada uno tiene su propia manera de presentar la [...]]]></description>
			<content:encoded><![CDATA[<p><em>Si ha utilizado Zend_Feed, sabrá que la obtención de algo tan  sencillo, como el contenido, o una fecha de creación, es una tarea que requiere un poco de trabajo. La alimentación  vienen en tres formas diferentes: RSS, RDF / RSS y Atom, todos con múltiples versiones. Cada uno tiene su propia manera de presentar la información&#8230;</em></p>
<pre class="brush: php;">$feed = Zend_Feed_Reader::import('http://www.planet-php.net/rdf/');
$data = array(
    'title'        =&gt; $feed-&gt;getTitle(),
    'link'         =&gt; $feed-&gt;getLink(),
    'dateModified' =&gt; $feed-&gt;getDateModified(),
    'description'  =&gt; $feed-&gt;getDescription(),
    'language'     =&gt; $feed-&gt;getLanguage(),
    'entries'      =&gt; array(),
);

foreach ($feed as $entry) {
    $edata = array(
        'title'        =&gt; $entry-&gt;getTitle(),
        'description'  =&gt; $entry-&gt;getDescription(),
        'dateModified' =&gt; $entry-&gt;getDateModified(),
        'author'       =&gt; $entry-&gt;getAuthor(),
        'link'         =&gt; $entry-&gt;getLink(),
        'content'      =&gt; $entry-&gt;getContent()
    );
    $data['entries'][] = $edata;
}</pre>
<p>Enlace: <a href="http://blog.astrumfutura.com/archives/408-Zend_Feed_Reader-promoted-to-Zend-Framework-trunk-watch-out-for-ZF-1.9!.html">Zend_Feed_Reader promoted to Zend Framework trunk (watch out for ZF 1.9!)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2009/07/zend_feed_reader-introduccion-y-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando subdominios en ZendFramework (enlace)</title>
		<link>http://www.cuatroxl.com/2009/02/usando-subdominios-en-zendframework-enlace/</link>
		<comments>http://www.cuatroxl.com/2009/02/usando-subdominios-en-zendframework-enlace/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 20:58:29 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[enlaces]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://cuatroxl.com/blog/?p=191</guid>
		<description><![CDATA[Using sub-domains as account keys Revisiting hostname routing with the Zend Framework [queda por traducir]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://www.noginn.com/2008/09/03/using-subdomains-as-account-keys/" target="_blank">Using sub-domains as account keys</a></li>
<li><a href="http://www.noginn.com/2009/02/04/revisiting-hostname-routing-with-the-zend-framework/">Revisiting hostname routing with the Zend Framework</a></li>
</ul>
<p>[queda por traducir]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2009/02/usando-subdominios-en-zendframework-enlace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Cache :: una clase para controlar nuestro Zend_Cache File</title>
		<link>http://www.cuatroxl.com/2008/07/the-cache-una-clase-para-controlar-nuestro-zend_cache-file/</link>
		<comments>http://www.cuatroxl.com/2008/07/the-cache-una-clase-para-controlar-nuestro-zend_cache-file/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 19:44:43 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[enlaces]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[utilidades]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend_cache]]></category>

		<guid isPermaLink="false">http://cuatroxl.wordpress.com/?p=105</guid>
		<description><![CDATA[Akra&#8217;s ha escrito una clase bastante sencilla y muy útil para poder utilizar Zend_Cache File. ejemplo de uso: $cacheEnabled = (bool)getenv('THE_CACHE_ENABLED') ? getenv('THE_CACHE_ENABLED') : false; TheCache::init($cacheEnabled, TMP_DIR.'/the-cache/'); $keyName = 'data-z-a-b'; // unique name describing this data set $data = TheCache::load($keyName) if($data === false) { $sql = 'SELECT x,y FROM z WHERE a=b'; $rs = $db-&#62;Execute($sql); [...]]]></description>
			<content:encoded><![CDATA[<p>Akra&#8217;s ha escrito una clase bastante sencilla y muy útil para poder utilizar Zend_Cache File.</p>
<p>ejemplo de uso:</p>
<pre class="brush: php;">$cacheEnabled = (bool)getenv('THE_CACHE_ENABLED') ? getenv('THE_CACHE_ENABLED') : false;
TheCache::init($cacheEnabled, TMP_DIR.'/the-cache/');

$keyName = 'data-z-a-b'; // unique name describing this data set
$data = TheCache::load($keyName)
if($data === false) {
 $sql = 'SELECT x,y FROM z WHERE a=b';
 $rs = $db-&gt;Execute($sql);
 $data = $rs-&gt;GetArray();
 TheCache::save($keyName, $data);
}</pre>
<p>enlace : <a href="http://akrabat.com/php/notes-on-zend_cache/">http://akrabat.com/php/notes-on-zend_cache/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2008/07/the-cache-una-clase-para-controlar-nuestro-zend_cache-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPUnit en MVC con ZendFramework. Test unitarios</title>
		<link>http://www.cuatroxl.com/2008/07/phpunit-en-mvc-con-zendframework-test-unitarios/</link>
		<comments>http://www.cuatroxl.com/2008/07/phpunit-en-mvc-con-zendframework-test-unitarios/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 10:41:46 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[utilidades]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[test unitarios en php]]></category>
		<category><![CDATA[unittest en php]]></category>

		<guid isPermaLink="false">http://cuatroxl.wordpress.com/?p=100</guid>
		<description><![CDATA[cito a Rodrigo Corral en la conferencia de &#8220;Metodologías ágiles y Calidad del software&#8221;: &#8220;..antes de ponermos a inplantar metodologías de trabajo, tenemos que tener la costumbre de crear Test Unitarios para todo lo que programemos.&#8221; (no son palabras textuales :] ) Lamentablemente en PHP, la cosa de los TestUnitarios está casi en pañales y [...]]]></description>
			<content:encoded><![CDATA[<p>cito a <a href="http://geeks.ms/blogs/rcorral/default.aspx">Rodrigo Corral</a> en la conferencia de <a href="http://geeks.ms/blogs/rcorral/archive/2008/06/11/evento-team-system-metodolog-237-as-225-giles-y-calidad-del-software-191-se-puede-pedir-m-225-s.aspx">&#8220;Metodologías ágiles y Calidad del software&#8221;</a>:</p>
<p>&#8220;..<em>antes de ponermos a inplantar metodologías de trabajo, tenemos que tener la costumbre de crear Test Unitarios para todo lo que programemos.</em>&#8221; (no son palabras textuales :] )</p>
<p>Lamentablemente en PHP, la cosa de los TestUnitarios está casi en pañales y es una teréa bastante engorrosa la de crear un test unitario para cada componente que creemos.</p>
<p><a href="http://www.phpunit.de/">PHPUnit</a>, nos intenta facilitar este trabajo con una fántastica herramienta para poder testear nuestras clases.</p>
<p><a href="http://weierophinney.net" target="_blank">weierophinney.net</a> está creando una herramienta(<a href="http://framework.zend.com/svn/framework/standard/incubator/tests/Zend/" target="_blank">aún está en la incubadora</a>) para poder probar las funcionalidades de nuestras aplicaciones con Zend Framework que utilizan MVC.</p>
<p><strong>¿Qué podremos probar con esta herramienta? </strong></p>
<ul>
<li>Si la acción no dio lugar a un redireccionamiento, en caso de éxito, redireccionarlo</li>
<li>Presencia de determinadas cabeceras de respuesta HTTP y / o su contenido</li>
<li>¿Qué módulo, controlador, y / o acción se utilizó en la última interacción del bucle de envío?</li>
<li>¿Cuál fue la ruta seleccionada?</li>
</ul>
<p>Enlace a: <a href="http://weierophinney.net/matthew/archives/182-Testing-Zend-Framework-MVC-Applications.html">Testing Zend Framework MVC Applications</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2008/07/phpunit-en-mvc-con-zendframework-test-unitarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuración básica para aplicaciones en Zend Framework</title>
		<link>http://www.cuatroxl.com/2008/07/configuracion-basica-para-aplicaciones-en-zend-framework/</link>
		<comments>http://www.cuatroxl.com/2008/07/configuracion-basica-para-aplicaciones-en-zend-framework/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 10:16:40 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://cuatroxl.wordpress.com/?p=97</guid>
		<description><![CDATA[un tutorial bastante introductorio para crear una aplicación con ZendFramework. enlace: http://es.wikibooks.org/wiki/Zend_Framework/Configuracion_Basica]]></description>
			<content:encoded><![CDATA[<p><a href="http://es.wikibooks.org/wiki/Zend_Framework/Configuracion_Basica"><img src="http://upload.wikimedia.org/wikibooks/es/7/7e/Zft_configuracion_basica.png" alt="" /></a></p>
<p>un tutorial bastante introductorio para crear una aplicación con ZendFramework.</p>
<p>enlace: <a href="http://es.wikibooks.org/wiki/Zend_Framework/Configuracion_Basica">http://es.wikibooks.org/wiki/Zend_Framework/Configuracion_Basica</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2008/07/configuracion-basica-para-aplicaciones-en-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enviando correo con Zend_Mail</title>
		<link>http://www.cuatroxl.com/2008/06/enviando-correo-con-zend_mail/</link>
		<comments>http://www.cuatroxl.com/2008/06/enviando-correo-con-zend_mail/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 12:04:33 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend_mail]]></category>

		<guid isPermaLink="false">http://cuatroxl.wordpress.com/?p=94</guid>
		<description><![CDATA[enlace: From Swift Mailer to Zend_Mail tiene varios ejemplos y casos de uso; muy útil para quien todavía no a utilizado esta clase]]></description>
			<content:encoded><![CDATA[<p>enlace:</p>
<h2><a title="Permanent Link to From Swift Mailer to Zend_Mail" rel="bookmark" href="http://phpimpact.wordpress.com/2008/06/27/from-swift-mailer-to-zend_mail/">From Swift Mailer to Zend_Mail</a></h2>
<p>tiene varios ejemplos y casos de uso; muy útil para quien todavía no a utilizado esta clase</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2008/06/enviando-correo-con-zend_mail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proyecto 004:: SIVideo, prealfa funcional</title>
		<link>http://www.cuatroxl.com/2008/05/proyecto-004-sivideo-prealfa-funcional/</link>
		<comments>http://www.cuatroxl.com/2008/05/proyecto-004-sivideo-prealfa-funcional/#comments</comments>
		<pubDate>Fri, 16 May 2008 20:55:16 +0000</pubDate>
		<dc:creator>acido69</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[sivideo]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[Proyecto 004]]></category>

		<guid isPermaLink="false">http://cuatroxl.wordpress.com/?p=82</guid>
		<description><![CDATA[Como comente en un post anterior; estoy haciendo una aplicación para poder mostrar contenido multimedia de servidores públicos(youtube, flickr, &#8230;) Por fin he podido sacar una primera versión(pre-alfa) con soporte para sonido, video e imágenes; me fue difícil empezar, más que nada porque me cuesta empezar con algo abstracto. Decidí empezar con algo practico y [...]]]></description>
			<content:encoded><![CDATA[<p>Como comente en un post anterior; estoy haciendo una aplicación para poder mostrar contenido multimedia de servidores públicos(youtube, flickr, &#8230;)</p>
<p>Por fin he podido sacar una primera versión(pre-alfa) con soporte para sonido, video e imágenes; me fue difícil empezar, más que nada porque me cuesta empezar con algo abstracto. Decidí empezar con algo practico y escogí un grupo de música y les hice la página con todos lo contenidos que encontraba en los servidores públicos.</p>
<p>Elegí el grupo de música <a title="La Calle 13" href="http://lacalle13.net" target="_blank">La calle 13</a> (podría haber cogido cualquier otro) y ya tengo la primera versión; aunque voy a cambiar radicalmente la estructura de desarrollo; más que nada porque creo que es absolutamente necesario mejorar los tiempos de respuesta; es más lentos de lo que esperaba. En la siguiente versión, que trabajaré este fin de semana.</p>
<p>Aquí os presento:</p>
<p style="text-align:center;"><a href="http://code.google.com/p/sivideo/"><img src="http://lh3.ggpht.com/acido69/SC3yD7LCgsI/AAAAAAAAAJk/FcuwK_4mLXg/s144/logo_sivideo.jpg" width="105" class="aligncenter" alt="" height="144" /></a></p>
<p style="text-align:left;">En la próxima versión lo pondré todo en ajax, instalaré un sistema de cache para agilizar las peticiones; cambiaré el diseño web.</p>
<p style="text-align:left;">Hasta la próxima; que os contaré los problemillas que he tenido al crear la aplicación; un bug en Zend_Service_Flickr (que solucioné), bug en el sistema de cache con Zend_Cache_File</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cuatroxl.com/2008/05/proyecto-004-sivideo-prealfa-funcional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

