<?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>Webitter - Blog sobre programación web, Symfony y frameworks</title>
	<atom:link href="http://webitter.com/feed" rel="self" type="application/rss+xml" />
	<link>http://webitter.com</link>
	<description>Webitter - Blog sobre programación web, Symfony y frameworks</description>
	<lastBuildDate>Sat, 21 Jan 2012 00:38:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Customizar el prompt en Mac OS X</title>
		<link>http://webitter.com/linux/customizar-el-prompt-en-mac-os-x</link>
		<comments>http://webitter.com/linux/customizar-el-prompt-en-mac-os-x#comments</comments>
		<pubDate>Sat, 21 Jan 2012 00:38:09 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=440</guid>
		<description><![CDATA[No se vosotros, pero yo me he acostumbrado a tener siempre en el prompt el path de donde me ecuentro actualmente. Para conseguir ésto en MAC debemos editar el archivo de nuestro home .bash_profile y añadir al final lo siguiente: Añade nuestro nombre de usuario seguido de una arroba y el full path de donde [...]]]></description>
			<content:encoded><![CDATA[<p>No se vosotros, pero yo me he acostumbrado a tener siempre en el prompt el path de donde me ecuentro actualmente. </p>
<p>Para conseguir ésto en MAC debemos editar el archivo de nuestro home .bash_profile y añadir al final lo siguiente:</p>
<pre class="brush: php; title: ; notranslate">
PS1='\u@\w/$ '
</pre>
<p>Añade nuestro nombre de usuario seguido de una arroba y el full path de donde nos encontramos. </p>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/linux/customizar-el-prompt-en-mac-os-x/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generar una ruta desde cualquier punto de nuestro proyecto</title>
		<link>http://webitter.com/symfony/generar-una-ruta-desde-cualquier-punto-de-nuestro-proyecto</link>
		<comments>http://webitter.com/symfony/generar-una-ruta-desde-cualquier-punto-de-nuestro-proyecto#comments</comments>
		<pubDate>Sat, 10 Dec 2011 09:53:57 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[routing]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=432</guid>
		<description><![CDATA[Es tán simple como utilizar nuestra ya conocido sfContext: Éste método ya nos adjunta el controlador frontal, solo tenemos que concatenar al principo $_SERVER['SERVER_NAME'] para hacerla totalmente dinámica. Muy útil cuando queremos generar rutas tanto para dev como prod válidas.]]></description>
			<content:encoded><![CDATA[<p>Es tán simple como utilizar nuestra ya conocido <strong>sfContext</strong>:</p>
<pre class="brush: php; title: ; notranslate">

$url = sfContext::getInstance()-&gt;getRouting()-&gt;generate('route_name');
</pre>
<p>Éste método ya nos adjunta el controlador frontal, solo tenemos que concatenar al principo <strong>$_SERVER['SERVER_NAME']</strong> para hacerla totalmente dinámica. Muy útil cuando queremos generar rutas tanto para <strong>dev</strong> como <strong>prod</strong> válidas.</p>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/generar-una-ruta-desde-cualquier-punto-de-nuestro-proyecto/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uso de helpers en cualquier parte de nuestro proyecto</title>
		<link>http://webitter.com/symfony/uso-de-helpers-en-cualquier-parte-de-nuestro-proyecto</link>
		<comments>http://webitter.com/symfony/uso-de-helpers-en-cualquier-parte-de-nuestro-proyecto#comments</comments>
		<pubDate>Wed, 09 Nov 2011 08:46:04 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=426</guid>
		<description><![CDATA[loadHelpers, podemos utilizar los helpers en cualquier parte de nuestro proyecto realizando una previa carga de éstos mediante: Esto puede sernos de gran utilidad para, por ejemplo, formatear fechas y monedas dentro de las clases de nuestro modelo de datos.]]></description>
			<content:encoded><![CDATA[<p><strong>loadHelpers</strong>, podemos utilizar los helpers en cualquier parte de nuestro proyecto realizando una previa carga de éstos mediante:</p>
<pre class="brush: php; title: ; notranslate">
sfContext::getInstance()-&gt;getConfiguration()-&gt;loadHelpers('Debug','Other1','Other2');
</pre>
<p>Esto puede sernos de gran utilidad para, por ejemplo, formatear fechas y monedas dentro de las clases de nuestro modelo de datos.</p>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/uso-de-helpers-en-cualquier-parte-de-nuestro-proyecto/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mover campos en los formularios</title>
		<link>http://webitter.com/symfony/mover-campos-en-los-formularios</link>
		<comments>http://webitter.com/symfony/mover-campos-en-los-formularios#comments</comments>
		<pubDate>Wed, 02 Nov 2011 12:32:18 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[widgetSchema]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=423</guid>
		<description><![CDATA[Podemos mover la posicion de los campos en un formaulario, muy util para la parte del backend mediante la instrucción:]]></description>
			<content:encoded><![CDATA[<p>Podemos mover la posicion de los campos en un formaulario, muy util para la parte del backend mediante la instrucción:</p>
<pre class="brush: php; title: ; notranslate">
$this-&gt;widgetSchema-&gt;moveField('campo1', sfWidgetFormSchema::AFTER, 'campo2');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/mover-campos-en-los-formularios/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Symfony, borrando atributos de usuario</title>
		<link>http://webitter.com/symfony/symfony-borrando-atributos-de-usuario</link>
		<comments>http://webitter.com/symfony/symfony-borrando-atributos-de-usuario#comments</comments>
		<pubDate>Tue, 18 Oct 2011 14:11:33 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[atributos]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=407</guid>
		<description><![CDATA[Os dejo aquí unos pequeños trucos para poder manejar rapidamente los attributos de usuario. Iré extendiendo éste articulo con más información.]]></description>
			<content:encoded><![CDATA[<p>Os dejo aquí unos pequeños trucos para poder manejar rapidamente los attributos de usuario.</p>
<pre class="brush: php; title: ; notranslate">
//borrar un attributo
$user-&gt;getAttributeHolder()-&gt;remove('nombre');

//borrar todos los attributos.
$user-&gt;getAttributeHolder()-&gt;clear();
</pre>
<p>Iré extendiendo éste articulo con más información.</p>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/symfony-borrando-atributos-de-usuario/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creación de filtros personalizados en el admin con doctrine</title>
		<link>http://webitter.com/symfony/creacion-de-filtros-personalizados-en-el-admin-con-doctrine</link>
		<comments>http://webitter.com/symfony/creacion-de-filtros-personalizados-en-el-admin-con-doctrine#comments</comments>
		<pubDate>Thu, 15 Sep 2011 15:18:12 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[admin]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[admin generator]]></category>
		<category><![CDATA[filtro]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=400</guid>
		<description><![CDATA[Bueno, mucha gente desconoce el potencial que tenemos a la hora de crear nuestros propios filtros personalizados para el admin. Podemos referenciar objetos y tablas externas desde otras para ofrecerle al usuario una experiencia de usuario mucho más confortable a la hora de utilizar nuetra aplicación. Listado de pasos a seguir para crear un filtro [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, mucha gente desconoce el potencial que tenemos a la hora de crear nuestros propios filtros personalizados para el admin.</p>
<p>Podemos referenciar objetos y tablas externas desde otras para ofrecerle al usuario una <strong>experiencia de usuario</strong> mucho más confortable a la hora de utilizar nuetra aplicación.</p>
<p>Listado de pasos a seguir para crear un filtro personalizado:</p>
<ol>
<li>Añadir el nombre de nuestro widget de filtro personalizado al archivo <strong>generator.yml</strong>.</li>
<li>Añadir nuestro widget al archivo <strong>[modelo]FormFilter.class.php</strong>.</li>
<li>Crear nuestro query en el archivo <strong>[modelo]Table.class.php</strong>.</li>
</ol>
<div><span class="Apple-style-span" style="line-height: 18px;"><span id="more-400"></span><br />
</span></div>
<div>Añadimos el nuevo widget personalizado, al que llamaremos activo, a nuestro generator.yml</div>
<pre class="brush: plain; title: ; notranslate">
filter:
        display: [id, nombre, apellidos, activo]
</pre>
<p>Despúes editamos el archivo [modelo]FormFilter.class.php:</p>
<p>Voy a poner varios tipos de filtros con distintos widgets para que veais lo versatil que resulta.</p>
<pre class="brush: php; title: ; notranslate">
$this-&gt;setWidget('activo', new sfWidgetFormChoice(array(
                'choices' =&gt; array( '' =&gt; 'sí o no', 1 =&gt; 'sí', 0 =&gt; 'no'),
            )));
$this-&gt;setValidator('activo', new sfValidatorChoice(array(
                'required' =&gt; false, 'choices' =&gt; array('', 1, 0),
            )));
</pre>
<p>ó</p>
<pre class="brush: php; title: ; notranslate">
$this-&gt;setWidget('nombre', new sfWidgetFormFilterInput(array('with_empty' =&gt; false)));
$this-&gt;setValidator('nombre', new sfValidatorPass(array('required' =&gt; false)));
</pre>
<p>Añadimos la llamada a la function table para que modifique el query y actualizamos la función getFields():</p>
<pre class="brush: php; title: ; notranslate">
public function addActivoColumnQuery($query, $field, $value) {
  Doctrine::getTable([modelo])-&gt;applyActivoFilter($query, $value);
}

public function addNombreColumnQuery($query, $field, $value) {
  Doctrine::getTable([modelo])-&gt;applyNombreFilter($query, $value);
}

public function getFields() {
    $fields = parent::getFields();
    $fields['activo'] = 'custom';
    $fields['nombre'] = 'custom';
    return $fields;
}
</pre>
<p>por último solo nos falta crear nuestras funciones para modificar el query en el archivo [modelo]Table.class.php.</p>
<pre class="brush: php; title: ; notranslate">
public static function applyActivoFilter(Doctrine_Query $query, $value) {
    $value = $value['text'];
    $alias = $query-&gt;getRootAlias();
    switch ($value) {
      case '0':
        $query-&gt;addWhere(&quot;$alias.activo = 0&quot;);
        break;
      case '1':
        $query-&gt;addWhere(&quot;$alias.activo = 1&quot;);
        break;
    }
    return $query;
  }
</pre>
<p>También podemos realizar filtros que utilicen un join para filtrar por campos relacionados en otras tablas.</p>
<pre class="brush: php; title: ; notranslate">
public static function applyNombreFilter(Doctrine_Query $query, $value) {
    $value = $value['text'];
    $alias = $query-&gt;getRootAlias();
    if ($value &lt;&gt; '') return $query-&gt;leftJoin(&quot;$alias.usuario u&quot;)-&gt;addWhere(&quot;u.nombre LIKE '%$value%'&quot;);
  }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/creacion-de-filtros-personalizados-en-el-admin-con-doctrine/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Forzar uso de tablas utf-8 en symfony 1.4 y doctrine 1.2</title>
		<link>http://webitter.com/symfony/forzar-uso-de-tablas-utf-8-en-symfony-1-4-y-doctrine-1-2</link>
		<comments>http://webitter.com/symfony/forzar-uso-de-tablas-utf-8-en-symfony-1-4-y-doctrine-1-2#comments</comments>
		<pubDate>Thu, 15 Sep 2011 14:35:03 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=392</guid>
		<description><![CDATA[Hace poco tuve un problema al usar la tarea doctrine:build en symfony 1.4 y doctrine 1.2. Cual fué mi sorpresa al ver que symfony me creaba todas las tablas de mysql con codificación latin1_general_ci en vez de utf8_general_ci. Indagando un poco por internet encontré una buena manera de poder definir la creación de tablas a [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco tuve un problema al usar la tarea doctrine:build en symfony 1.4 y doctrine 1.2. Cual fué mi sorpresa al ver que symfony me creaba todas las tablas de mysql con codificación <strong>latin1_general_ci</strong> en vez de <strong>utf8_general_ci.</strong></p>
<p>Indagando un poco por internet encontré una buena manera de poder definir la creación de tablas a utf a nivel global de tu proyecto. Tenemos dos opciones, una a nivel de tablas mysql y otra a nivel de toda tu base de datos.</p>
<p>Para la primera podemos definir en nuestro <strong>schema.yml</strong> las tablas de la siguiente forma:</p>
<pre class="brush: plain; title: ; notranslate">
User:
  options:
    type: MyISAM
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    username: string(255)
    password: string(255)
</pre>
<p>La segunda, mucho más cómoda, es definir a nivel global el manager doctrine en nuestro archivo <strong>ProjectConfiguration.class.php</strong> la siguiente función:</p>
<pre class="brush: php; title: ; notranslate">
public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager-&gt;setCollate('utf8_unicode_ci');
  $manager-&gt;setCharset('utf8');
}
</pre>
<p>No nos olvidemos de realizar un rebuild the nuestros modelos y ya estaremos listos para seguir trabajando.</p>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/forzar-uso-de-tablas-utf-8-en-symfony-1-4-y-doctrine-1-2/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nos vemos en las jornadas Desymfony 1,2 y 3 de julio</title>
		<link>http://webitter.com/symfony/nos-vemos-en-las-jornadas-desymfony-12-y-3-de-julio</link>
		<comments>http://webitter.com/symfony/nos-vemos-en-las-jornadas-desymfony-12-y-3-de-julio#comments</comments>
		<pubDate>Wed, 22 Jun 2011 13:53:59 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=379</guid>
		<description><![CDATA[Nos vemos el 1,2 y 3 de Julio en las jornadas desymfony 2011. Esperemos actualizarnos con el nuevo Symfony 2. Ya iré posteando como van resultando las jornadas y poniendo algunas imágenes.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://webitter.com/wp-content/uploads/2011/06/DeSymfony-Jornadas-Symfony-2011_1308750449986.png"><img class="aligncenter size-full wp-image-380" title="DeSymfony, Jornadas Symfony 2011_1308750449986" src="http://webitter.com/wp-content/uploads/2011/06/DeSymfony-Jornadas-Symfony-2011_1308750449986.png" alt="jornadas desymfony 2011" width="514" height="118" /></a></p>
<p>Nos vemos el 1,2 y 3 de Julio en las <a class="link" title="desymfony" href="http://desymfony.com/" target="_blank">jornadas desymfony 2011</a>. Esperemos actualizarnos con el nuevo <a class="link" href="http://symfony.com/" target="_blank">Symfony 2</a>. Ya iré posteando como van resultando las jornadas y poniendo algunas imágenes.</p>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/nos-vemos-en-las-jornadas-desymfony-12-y-3-de-julio/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cargar el contexto en una tarea personalizada</title>
		<link>http://webitter.com/symfony/cargar-el-contexto-en-una-tarea-personalizada</link>
		<comments>http://webitter.com/symfony/cargar-el-contexto-en-una-tarea-personalizada#comments</comments>
		<pubDate>Wed, 22 Jun 2011 13:34:52 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=376</guid>
		<description><![CDATA[Para poder acceder a cualquier funcionalidad de symfony desde una tarea debemos previamente cargar el contexto de nuestra aplicación y habilitar el acceso a base de datos con el siguiente código:]]></description>
			<content:encoded><![CDATA[<p>Para poder acceder a cualquier funcionalidad de symfony desde una tarea debemos previamente cargar el contexto de nuestra aplicación y habilitar el acceso a base de datos con el siguiente código:</p>
<pre class="brush: php; title: ; notranslate">
protected function execute($arguments = array(), $options = array()) {

     //cargamos el contexto.
    $configuration = ProjectConfiguration::getApplicationConfiguration($options['application'], $options['env'], false);
    sfContext::createInstance($configuration);    

    //habilitamos el acceso a base de datos.
    $databaseManager = new sfDatabaseManager($this-&gt;configuration);
    $connection = $databaseManager-&gt;getDatabase($options['connection'])-&gt;getConnection();

  }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/cargar-el-contexto-en-una-tarea-personalizada/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Symfony disable campo de un formulario</title>
		<link>http://webitter.com/symfony/symfony-disable-campo-de-un-formulario</link>
		<comments>http://webitter.com/symfony/symfony-disable-campo-de-un-formulario#comments</comments>
		<pubDate>Mon, 20 Jun 2011 15:53:38 +0000</pubDate>
		<dc:creator>davidpv</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://webitter.com/?p=372</guid>
		<description><![CDATA[Podemos envíar cualquier tipo de atributo a un widget de la siguiente forma:]]></description>
			<content:encoded><![CDATA[<p>Podemos envíar cualquier tipo de atributo a un widget de la siguiente forma:</p>
<pre class="brush: php; title: ; notranslate">
 $this-&gt;widgetSchema['campo']-&gt;setAttributes(array('disabled' =&gt; 'disabled'));
</pre>
]]></content:encoded>
			<wfw:commentRss>http://webitter.com/symfony/symfony-disable-campo-de-un-formulario/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

