<?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>//barrabarra</title>
	<atom:link href="http://barrabarra.es/feed/" rel="self" type="application/rss+xml" />
	<link>http://barrabarra.es</link>
	<description>diseño y programación web</description>
	<lastBuildDate>Thu, 27 May 2010 08:28:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Django y error No module named models</title>
		<link>http://barrabarra.es/2010/05/27/django-y-error-no-module-named-models/</link>
		<comments>http://barrabarra.es/2010/05/27/django-y-error-no-module-named-models/#comments</comments>
		<pubDate>Thu, 27 May 2010 08:19:27 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[django]]></category>

		<guid isPermaLink="false">http://barrabarra.es/?p=498</guid>
		<description><![CDATA[Esta mañana estaba refactorizando un poco el código de la aplicación de tiendas antes de subirlo al repositorio de un cliente y me he encontrado con el error que describe el título y que me ha traído de cabeza toda la mañana.

Uno de los cambios que estaba haciendo al código era sustituir líneas del tipo:
from [...]]]></description>
			<content:encoded><![CDATA[<p>Esta mañana estaba refactorizando un poco el código de la aplicación de tiendas antes de subirlo al repositorio de un cliente y me he encontrado con el error que describe el título y que me ha traído de cabeza toda la mañana.</p>

<p>Uno de los cambios que estaba haciendo al código era sustituir líneas del tipo:
<code>from tienda.checkout.models import *</code>
por
<code>from checkout.models import *</code>
para mejorar la portabilidad de las aplicaciones, pero a raíz de eso el sitio dejó de funcionar y lo único que recibía era ese mensaje de error.
</p>

<p>A la postre resulta que tenía una estructura de directorios y ficheros tal que así:<br />
cart\<br />
&nbsp;&nbsp;&nbsp;__init__.py<br />
&nbsp;&nbsp;&nbsp;admin.py<br />
&nbsp;&nbsp;&nbsp;models.py<br />
&nbsp;&nbsp;&nbsp;<strong>cart.py</strong><br />
&nbsp;&nbsp;&nbsp;views.py<br />
checkout\<br />
&nbsp;&nbsp;&nbsp;__init__.py<br />
&nbsp;&nbsp;&nbsp;admin.py<br />
&nbsp;&nbsp;&nbsp;models.py<br />
&nbsp;&nbsp;&nbsp;<strong>checkout.py</strong><br />
&nbsp;&nbsp;&nbsp;views.py<br />
<br />
etc.
<br /><br />
El problema ocurría cuando python interpretaba los ficheros cart.py y checkout.py (entre otros) e intentaba luego buscar modelos en ellos al tener el mismo nombre que el directorio en el que se encuentran.</p>

<p>La solución una vez sabido esto fué sencilla, cambiar los nombres por cart_functions.py y checkout_functions.py a los archivos y en todos aquellos lugares en los que se usaban.</p>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2010/05/27/django-y-error-no-module-named-models/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error en Django Admin al buscar: Related Field has invalid lookup: icontains</title>
		<link>http://barrabarra.es/2010/05/24/error-en-django-admin-al-buscar-related-field-has-invalid-lookup-icontains/</link>
		<comments>http://barrabarra.es/2010/05/24/error-en-django-admin-al-buscar-related-field-has-invalid-lookup-icontains/#comments</comments>
		<pubDate>Mon, 24 May 2010 16:20:52 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[django-admin]]></category>

		<guid isPermaLink="false">http://barrabarra.es/?p=496</guid>
		<description><![CDATA[Mientras buscaba en un gran listado de productos desde la administración de django me he topado con el siguiente error:

Related Field has invalid lookup: icontains

A la postre resulta que el problema venía por cómo estaba definida la clase de administración del modelo:


class ProductAdmin(admin.ModelAdmin):
&#160;&#160;&#160;# sets values for how the admin site lists your products
&#160;&#160;&#160;list_display = ('name', [...]]]></description>
			<content:encoded><![CDATA[<p>Mientras buscaba en un gran listado de productos desde la administración de django me he topado con el siguiente error:</p>

<code>Related Field has invalid lookup: icontains</code>

<p>A la postre resulta que el problema venía por cómo estaba definida la clase de administración del modelo:</p>

<code>
class ProductAdmin(admin.ModelAdmin):<br />
&nbsp;&nbsp;&nbsp;# sets values for how the admin site lists your products<br />
&nbsp;&nbsp;&nbsp;list_display = ('name', 'price', 'brand', 'stock', 'is_pack', 'created_at', 'updated_at',)<br />
&nbsp;&nbsp;&nbsp;...<br />
&nbsp;&nbsp;&nbsp;search_fields = ['name', 'categories', 'brand', 'internal_reference', 'description']<br />
&nbsp;&nbsp;&nbsp;...<br />
</code>

<p>Y es que &#8216;categories&#8217; es una clave externa (ForeignKey) y por eso hay que definir sobre qué campo asociado se buscará, se soluciona, por ejemplo, con:</p>

<code>
&nbsp;&nbsp;&nbsp;search_fields = ['name', 'categories__name', 'brand', 'internal_reference', 'description']
</code>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2010/05/24/error-en-django-admin-al-buscar-related-field-has-invalid-lookup-icontains/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django: Flatpages devuelven error 404</title>
		<link>http://barrabarra.es/2010/05/17/django-flatpages-devuelven-error-404/</link>
		<comments>http://barrabarra.es/2010/05/17/django-flatpages-devuelven-error-404/#comments</comments>
		<pubDate>Mon, 17 May 2010 19:08:51 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[flatpages]]></category>

		<guid isPermaLink="false">http://barrabarra.es/?p=490</guid>
		<description><![CDATA[Los últimos proyectos en los que estoy trabajando van sobre una plataforma de comercio electrónico. Como tal, a la hora de mostrar errores a los visitantes/clientes, es importante no desconcertarlos y hacer que pierdan la confianza en el sitio web, por lo cual se personalizan las páginas de error para que se integren en el [...]]]></description>
			<content:encoded><![CDATA[<p>Los últimos proyectos en los que estoy trabajando van sobre una plataforma de comercio electrónico. <br/>Como tal, a la hora de mostrar errores a los visitantes/clientes, es importante no desconcertarlos y hacer que pierdan la confianza en el sitio web, por lo cual se personalizan las páginas de error para que se integren en el resto del sitio y además se aprovecha para mostrarle productos que podrían interesarle.</p>

<p>Debido a estos listados de productos no podemos simplemente renderizar un template para los errores, sino que he implementado un manejador para los errores: file_not_found_404 y handler_500. Estos hacían bien su trabajo mientras realizaba el desarrollo en local, sin embargo, cuando se pasaba a pruebas en el entorno de producción todas las páginas estáticas definidas con el framework flatpages direccionaban a la página de error 404.</p>

<p>Después de muchas vueltas, pruebas, desactivar el manejador, revisar logs y volver a probar y a dar vueltas ví que en los logs de acceso las páginas de errores 404 devolvían un status 200 (Ok), lo cual finalmente me dió la pista que necesitaba: tenía que sobreescribir el <a href="http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.status_code">status_code</a> de la respuesta a 404, ya que por defecto el valor es 200.</p>

<p>El manejador quedó con algo parecido a esto:</p>

<code>
def file_not_found_404(request):<br />
    page_title = _('Page Not Found')<br />
    <br />
    featured = Product.featured.all()[0:FEATURED_PER_ROW] <br />
    bestseller = Product.bestseller.all()[0:BESTSELLER_PER_ROW]<br />
    recommended = Product.recommended.all()[0:RECOMMENDED_PER_ROW]<br />
    <br />
    response = render_to_response('404.html', locals(), context_instance=RequestContext(request))<br />
    response.status_code = 404<br />
    return response<br />
</code>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2010/05/17/django-flatpages-devuelven-error-404/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django: acceder al value de los campos de un formulario</title>
		<link>http://barrabarra.es/2010/03/27/django-acceder-al-value-de-los-campos-de-un-formulario/</link>
		<comments>http://barrabarra.es/2010/03/27/django-acceder-al-value-de-los-campos-de-un-formulario/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 19:47:41 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[django-forms]]></category>
		<category><![CDATA[formularios]]></category>

		<guid isPermaLink="false">http://barrabarra.es/?p=483</guid>
		<description><![CDATA[Recientemente he tenido que preparar una plantilla en django que mostrara una serie de imágenes del usuario y un formulario adyacente en el que podían sustituir esta, así que me encontraba con el problema de mostrar al usuario sus fotos actuales, si es que tenían.

Para ello se crea un formulario heredando del modelo:

forms.py:
class PhotosForm(forms.ModelForm):
&#160;&#160;&#160;photo = [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente he tenido que preparar una plantilla en django que mostrara una serie de imágenes del usuario y un formulario adyacente en el que podían sustituir esta, así que me encontraba con el problema de mostrar al usuario sus fotos actuales, si es que tenían.</p>

<p>Para ello se crea un formulario heredando del modelo:</p>
<code>
forms.py:<br />
class PhotosForm(forms.ModelForm):<br />
&nbsp;&nbsp;&nbsp;photo = forms.ImageField(label=_(u'Fotografía'), required=False)<br />
&nbsp;&nbsp;&nbsp;current = forms.CharField(label='', widget=forms.HiddenInput(), required=False)<br />
    <br />
&nbsp;&nbsp;&nbsp;class Meta:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model = ProfilePhotos<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exclude = ('profile','accepted',)<br />
</code>

<p>Luego, en la vista, puedes consultar el perfil del usuario en cuestión y ver si tiene fotografías:</p>
<code>
views.py<br />
@login_required<br />
def edit_photos(request, template_name='members/photos.html'):<br />
&nbsp;&nbsp;&nbsp;page_title = _(u'Editar fotografías')<br />
&nbsp;&nbsp;&nbsp;PhotosFormSet = formset_factory(PhotosForm, extra=5, max_num=5)<br />
&nbsp;&nbsp;&nbsp;profile = request.user.profiles_set.filter(accepted=True).latest('date')<br />
<br />
&nbsp;&nbsp;&nbsp;if request.method == 'POST':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;profile_photos = profile.profilephotos_set.filter(accepted=True)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if profile_photos:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = []<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for photo in profile_photos:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.append({'current': photo.photo.name})<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formset = PhotosFormSet(initial = data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formset = PhotosFormSet()<br />
</code>

<p>Y finalmente, en la plantilla se puede acceder a los valores de los campos mediante</p>
<code>
photos.html:<br />
&nbsp;&nbsp;&nbsp;{{ formset.management_form }}<br />
&nbsp;&nbsp;&nbsp;{% for photos_form in formset.forms %}<br />
&nbsp;&nbsp;&nbsp;<div class="current-photo"><br />
&nbsp;&nbsp;&nbsp;{% if photos_form.initial.current %}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[img src="{{photos_form.initial.current }}" alt="" /]<br />
&nbsp;&nbsp;&nbsp;{% else %}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[img src="default.jpg" alt="" /]<br />
&nbsp;&nbsp;&nbsp;{% endif %}<br />
&nbsp;&nbsp;&nbsp;</div><br />
&nbsp;&nbsp;&nbsp;...
</code>

<p>Y del mismo modo, se puede acceder mediante form.<strong>initial</strong>.<em>nombre_clave</em> a cualquier otro dato inicial.</p>

<p>Si en lugar de proporcionar datos iniciales lo que hacemos es asociar el formulario a una instancia ( form.is_bound == True ) entonces podremos acceder a los datos mediante form.<strong>data</strong>.<em>nombre_clave</em></p>

<p>Bah, como salta a la vista, el formateo de código de Wordpress no es muy bueno&#8230;</p>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2010/03/27/django-acceder-al-value-de-los-campos-de-un-formulario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Actualización de MotrilCenter</title>
		<link>http://barrabarra.es/2009/12/15/actualizacion-de-motrilcenter/</link>
		<comments>http://barrabarra.es/2009/12/15/actualizacion-de-motrilcenter/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 18:52:48 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[actualización]]></category>

		<guid isPermaLink="false">http://barrabarra.es/?p=477</guid>
		<description><![CDATA[De cara a las fiestas Motrilcenter ha lanzado una serie de planes promocionales para facilitar el acceso a sus viviendas en Motril y he estado actualizando la página.



Con esto me he dado cuenta de una cosa ¡Aún no le había puesto favicon a la página!]]></description>
			<content:encoded><![CDATA[<p>De cara a las fiestas <a href="http://www.motrilcenter.com">Motrilcenter</a> ha lanzado una serie de <a href="http://www.motrilcenter.es/planes_navidad.html">planes promocionales</a> para facilitar el acceso a sus viviendas en Motril y he estado actualizando la página.</p>

<div id="attachment_478" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.motrilcenter.com"><img src="http://barrabarra.es/wp-content/uploads/2009/12/pantallazo6-300x158.png" alt="Actualización Diciembre 09 Motrilcenter" title="Actualización Diciembre 09 Motrilcenter" width="300" height="158" class="size-medium wp-image-478" /></a><p class="wp-caption-text">Actualización Diciembre 09 Motrilcenter</p></div>

<p>Con esto me he dado cuenta de una cosa ¡Aún no le había puesto favicon a la página!</p>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2009/12/15/actualizacion-de-motrilcenter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Página en blanco tras instalar OpenCart bajo ArchLinux, solución: Zlib</title>
		<link>http://barrabarra.es/2009/12/08/pagina-en-blanco-tras-instalar-opencart-bajo-archlinux-solucion-zlib/</link>
		<comments>http://barrabarra.es/2009/12/08/pagina-en-blanco-tras-instalar-opencart-bajo-archlinux-solucion-zlib/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 17:17:20 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[OpenCart]]></category>
		<category><![CDATA[zlib]]></category>

		<guid isPermaLink="false">http://barrabarra.es/2009/12/08/pagina-en-blanco-tras-instalar-opencart-bajo-archlinux-solucion-zlib/</guid>
		<description><![CDATA[Estaba instalando OpenCart (1.3.4) bajo ArchLinux y me he encontrado que tras seguir los pasos de instalación correctamente, al finalizar esta e intentar cargar el sitio el navegador no mostraba nada.

Mostrando más detalles en Chromium obtenía el error:
net::ERR_CONTENT_DECODING_FAILED
y Firefox devolvía el error:
Error de codificación de contenido


Estos me han dado pistas para que buscara cómo se [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.opencart.com/opencart/application/view/image/logo.png" alt="OpenCart" />Estaba instalando <a href="http://www.opencart.com/">OpenCart</a> (1.3.4) bajo ArchLinux y me he encontrado que tras seguir los pasos de instalación correctamente, al finalizar esta e intentar cargar el sitio el navegador no mostraba nada.</p>

<p>Mostrando más detalles en Chromium obtenía el error:
<b>net::ERR_CONTENT_DECODING_FAILED</b>
y Firefox devolvía el error:
<b>Error de codificación de contenido</b>
</p>

<p>Estos me han dado pistas para que buscara cómo se enviaba el código y resulta que estaba comprimido. Se da la situación de que la instalación de PHP en Archlinux deja desactivada esa opción y de ahí viene el error.</p>

<p>La solución, editar /etc/php/php.ini y poner 
<code>zlib.output_compression = On</code></p>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2009/12/08/pagina-en-blanco-tras-instalar-opencart-bajo-archlinux-solucion-zlib/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Borrar todos los archivos eliminados de la copia de trabajo de SVN</title>
		<link>http://barrabarra.es/2009/11/25/comando-para-borrar-archivos-eliminados-de-la-copia-de-trabajo-de-svn/</link>
		<comments>http://barrabarra.es/2009/11/25/comando-para-borrar-archivos-eliminados-de-la-copia-de-trabajo-de-svn/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 10:27:47 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[borrar]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://barrabarra.es/2009/11/25/comando-para-borrar-archivos-eliminados-de-la-copia-de-trabajo-de-svn/</guid>
		<description><![CDATA[Es más difícil de explicar que de entender.
Cuando trabajamos con subversion, a menudo vamos borrando archivos y luego al realizar el commit se nos quedan marcados con estado ! los archivos borrados en lugar de borrarse.
Para no tener que ir borrándolos uno a uno con svn del &#8216;archivo&#8217; yo uso el siguiente script:
svn status &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Es más difícil de explicar que de entender.</p>
<p>Cuando trabajamos con subversion, a menudo vamos borrando archivos y luego al realizar el commit se nos quedan marcados con estado ! los archivos borrados en lugar de borrarse.</p>
<p>Para no tener que ir borrándolos uno a uno con svn del &#8216;archivo&#8217; yo uso el siguiente script:</p>
<code>svn status | grep ! | awk '{print $2}' | xargs svn del</code>
<p>Con eso los marco para borrarse en el siguiente commit.</p>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2009/11/25/comando-para-borrar-archivos-eliminados-de-la-copia-de-trabajo-de-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeIgniter paso a paso (I)</title>
		<link>http://barrabarra.es/2009/11/19/codeigniter-paso-a-paso-i/</link>
		<comments>http://barrabarra.es/2009/11/19/codeigniter-paso-a-paso-i/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 16:56:42 +0000</pubDate>
		<dc:creator>Javi</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://barrabarra.es/?p=443</guid>
		<description><![CDATA[

CodeIgniter es un framework de desarrollo para PHP que sigue la filosofía MVC ¿esto qué significa? a grandes rasgos que desarrollarás tu aplicación en tres apartados: el Modelo -para trabajar con las base de datos-, la Vista -las páginas que se van a presentar en el navegador- y el Controlador -donde se procesan los datos [...]]]></description>
			<content:encoded><![CDATA[<div class="alignleft"><img src="http://codeigniter.com/images/design/ci_logo2.gif" alt="CodeIgniter" /></div>

<p>CodeIgniter es un framework de desarrollo para PHP que sigue la filosofía <strong>MVC</strong> ¿esto qué significa? a grandes rasgos que desarrollarás tu aplicación en tres apartados: el <strong>M</strong>odelo -para trabajar con las base de datos-, la <strong>V</strong>ista -las páginas que se van a presentar en el navegador- y el <strong>C</strong>ontrolador -donde se procesan los datos y se vuelca la información que queremos mostrar a la vista-.</p>

<p>Para trabajar con CodeIgniter es importante que conozcas programación orientada a objetos o las cosas te sonarán raras. Bien, dando esto por sentado, vamos a pasar a instalar y configurar una primera aplicación.</p>
<span id="more-443"></span>
<p>Desde la página oficial nos <a href="http://codeigniter.com/downloads/">descargamos</a> su versión más reciente y procedemos a descomprimirla en nuestro directorio de trabajo. También pasaremos por la sección de internacionalización (i18n) del Wiki y <a href="http://codeigniter.com/wiki/Language_Translation/">descargaremos</a> los archivos de traducciones al español. Una vez descargado, extraeremos el contenido en la carpeta <em>system/languages</em>.
Tras todo esto, debe quedarnos una estructura de directorios similar a la de la siguiente imagen:</p>

<div id="attachment_446" class="wp-caption alignnone" style="width: 765px"><img src="http://barrabarra.es/wp-content/uploads/2009/11/codeingniter0.png" alt="Jerarquía de directorios tras instalar CodeIgniter y el idioma español" title="Jerarquía de directorios tras instalar CodeIgniter y el idioma español" width="755" height="518" class="size-full wp-image-446" /><p class="wp-caption-text">Jerarquía de directorios tras instalar CodeIgniter y el idioma español</p></div>

<p>Hecho esto lo siguiente para empezar con nuestra aplicación será editar los archivos <em>system/config/config.php</em>, donde modificaremos las variables:</p>
<ul>
	<li>la ruta en la que se encuentra la aplicación <br/>
               <code>$config['base_url']	= "http://localhost/lab/";</code>
        </li>
        <li>el idioma de la aplicación <br/>
               <code>$config['language']	= "spanish";</code>
        </li>
	<li>la clave de encriptado <br/>
               <code>$config['encryption_key'] = "clave";</code><br/>
               Para que esto tenga sentido debes usar una clave larga (32 caracteres), con mayúsculas, minúsculas, números y símbolos. Si vas a encriptar las cosas hazlo bien, o no lo hagas.
        </li>
</ul>

<p>en <em>system/config/database.php</em> pondremos los datos de conexión a la base de datos con la que vayamos a trabajar:</p>
<ul>
        <li>la dirección de la base de datos<br/>
               <code>$db['default']['hostname'] = "localhost";</code>
        </li>
        <li>un nombre de usuario de esa base de datos<br/>
               <code>$db['default']['username'] = "usuario";</code>
        </li>
        <li>su contraseña correspondiente<br/>
               <code>$db['default']['password'] = "clave";</code>
        </li>
        <li>el nombre de la base de datos con la que vas a trabajar<br/>
               <code>$db['default']['database'] = "nombre_base_de_datos";</code>
        </li>
</ul>

<p>Con estos pasos ya podemos ir a la dirección de nuestra aplicación y ver la pantalla de bienvenida de CodeIgniter que contiene al pie un enlace a la estupenda guía de usuario de este framework.</p>

<div id="attachment_454" class="wp-caption alignnone" style="width: 750px"><img src="http://barrabarra.es/wp-content/uploads/2009/11/codeingniter1-1024x539.png" alt="Página de bienvenida de CodeIgniter" title="Página de bienvenida de CodeIgniter" width="740" height="389" class="size-large wp-image-454" /><p class="wp-caption-text">Página de bienvenida de CodeIgniter</p></div>]]></content:encoded>
			<wfw:commentRss>http://barrabarra.es/2009/11/19/codeigniter-paso-a-paso-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
