<?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>Isern Palaus &#187; CodeIgniter</title>
	<atom:link href="http://blog.ipalaus.es/category/codeigniter/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.ipalaus.es</link>
	<description>PHP, CodeIgniter y jQuery</description>
	<lastBuildDate>Sat, 10 Apr 2010 13:10:51 +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>CodeIgniter: alojar un array en la URI</title>
		<link>http://blog.ipalaus.es/codeigniter-alojar-un-array-en-la-uri</link>
		<comments>http://blog.ipalaus.es/codeigniter-alojar-un-array-en-la-uri#comments</comments>
		<pubDate>Tue, 06 Apr 2010 02:03:01 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[associative]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[uri]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/?p=57</guid>
		<description><![CDATA[Mucha gente se pregunta como alojar varios parámetros en la URI, quizá para poder hacer buscas personalizadas y almacenar esos datos en la URI de nuestra aplicación para poder ser reproducida.
Hay una forma muy sencilla con la clase URI de CodeIgniter que nos permite convertir los segmentos de la URI en un array asociativo de <a href="http://blog.ipalaus.es/codeigniter-alojar-un-array-en-la-uri" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Mucha gente se pregunta como alojar varios parámetros en la URI, quizá para poder hacer buscas personalizadas y almacenar esos datos en la URI de nuestra aplicación para poder ser reproducida.</p>
<p>Hay una forma muy sencilla con la clase <strong>URI</strong> de CodeIgniter que nos permite convertir los segmentos de la URI en un array asociativo de clave/valor: <strong>$this-&gt;uri-&gt;uri_to_assoc();</strong>.</p>
<p>Teniendo, por ejemplo, una ruta que sea:</p>
<blockquote><p>dominio.tld/buscar/categoria/zapatos/medida/m/marca/converse/x/y</p></blockquote>
<p>Podemos usar:</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_about(1)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000088;">$valores</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uri</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uri_to_assoc</span><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Y obtendremos un array:</p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_about(2)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;">[array]<br />
(<br />
&nbsp; &nbsp; 'categoria' =&gt; 'zapatos'<br />
&nbsp; &nbsp; 'medida' =&gt; 'm'<br />
&nbsp; &nbsp; 'marca' =&gt; 'converse'<br />
&nbsp; &nbsp; 'x' =&gt; 'y'<br />
)</div></div>
<p>Si quisiéramos convertir un array a una URI asociativa simplemente llamaríamos <strong>$this-&gt;uri-&gt;uri_to_assoc(<em>array()</em>);</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/codeigniter-alojar-un-array-en-la-uri/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX Login con jQuery y CodeIgniter &#8211; v2 + archivos</title>
		<link>http://blog.ipalaus.es/ajax-login-con-jquery-y-codeigniter-v2-archivos</link>
		<comments>http://blog.ipalaus.es/ajax-login-con-jquery-y-codeigniter-v2-archivos#comments</comments>
		<pubDate>Tue, 01 Dec 2009 21:29:21 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ajax login]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[login]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/?p=18</guid>
		<description><![CDATA[Hola amigos,
Esta es la revisión del tutorial que escribí hace más de un año. Es prácticamente lo mismo pero con todos los archivos que necesitas en un zip, a parte de ciertas modificaciones necesarias en el procesado de los datos.
Para esa gente que esta buscando un sistema de usuarios funcional con registro, tengo que decir que no <a href="http://blog.ipalaus.es/ajax-login-con-jquery-y-codeigniter-v2-archivos" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Hola amigos,</p>
<p>Esta es la revisión del tutorial que escribí hace más de un año. Es prácticamente lo mismo pero con todos los archivos que necesitas en un zip, a parte de ciertas modificaciones necesarias en el procesado de los datos.</p>
<p>Para esa gente que esta buscando un sistema de usuarios funcional con registro, tengo que decir que no tengo tiempo para programarlo todo por mi mismo para este manual. De este modo, como he hecho desde que comencé en CodeIgniter, usaremos una aplicación de terceros: un sistema completo de usuarios. Lo he basado en el trabajo de Popcorn, llamado &#8216;Redux Authentication&#8217; (v2 beta).<br />
Lo primero que necesitamos es descargar la librería de Redux. Accedemos al proyecto en Google Code y lo descargamos <a href="http://code.google.com/p/reduxauth/" target="_self">aquí</a>. Puedes ir a la <a href="http://codeigniter.com/forums/viewthread/90254/">entrada oficial</a> en el foro de CodeIgniter para preguntar sobre la misma.<br />
Cuando descargues la librería, verás que dentro existe una carpeta llamada &#8216;Example Application&#8217;. Usaremos esta aplicación pero necesitamos actualizarla a la ultima versión de CodeIgniter, sino no nos funcionará. Ten en cuenta, que en el pack final ya esta actualizado pero es mucho mejor si lo haces por tu propio pie, aprenderás más.<br />
Es muy fácil actualizarlo: descargas <a href="http://www.codeigniter.com/">CodeIgniter</a> y lo descomprimes. Ve a &#8216;Example Application&#8217;, renombra la carpeta a ajaxlogin (usaré este nombre en los ejemplos). Entra en la misma y seguidamente a /system. Borra <strong>todas</strong> las carpetas excepto <strong>application</strong>, donde esta la aplicación. Accede a la versión descarga de CodeIgniter y copia todas las carpetas que has eliminado (todas menos application). Puedes encontrar la guía oficial de CodeIgniter para la actualización <a href="http://codeigniter.com/user_guide/installation/upgrading.html">aquí</a>.<br />
Entonces, instala la base de datos y configurala. Lo primero que tienes que hacer es añadir un grupo llamado &#8216;members&#8217; en la tabla de grupos:</p>
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_about(3)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> groups <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id`</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">`name`</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">`description`</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'member'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'Members'</span><span style="color: #66cc66;">&#41;</span></div></div>
<p><span id="more-18"></span><br />
En el archivo config/redux_auth.php verás que hay una opción para configurar el grupo por defecto. En la base de datos no tenemos datos de modo que necesitamos añadir un grupo por defecto y modificar el archivo de configuración para que lo detecte. Otra recomendación para este mismo archivo es cambiar la configuración de activación a FALSE porque no funciona del todo. Hay otras variables que puedes cambiar, como el método de entrada (username, email&#8230;). He elegido el e-mail, que es el que viene por defecto.  Cambiar para que sea el usuario no es difícil. Probarlo.<br />
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_about(4)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email_activation'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span></div></div><br />
Ahora puedes ir a tu página, configurar otras cosas que harías en cualquier aplicación&#8230;<br />
Lo primero que haremos será crear un usuario. Esto lo tienes que hacer desde la página, claro. Accede y lo verás claro. Después, intenta acceder. Serás redirigido al apartado status y verás <strong>bool(true)</strong> si has entrado correctamente. ¡Ahora es hora de programar nuestra aplicación en AJAX!<br />
Ve a <strong>/system/application/views/template.php</strong> y, entre  y  añade la <a href="http://www.jquery.com/">librería de jQuery que has descargado</a>:</p>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_about(5)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;&lt;?php echo base_url().'assets/js/jquery-1.3.2.min.js'; ?&gt;&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=&lt;?</span>php echo base_url<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #3366CC;">'assets/js/ajaxlogin.js'</span><span style="color: #339933;">;</span> <span style="color: #339933;">?&gt;</span><span style="color: #3366CC;">&quot;&gt;&lt;/script&gt;</span></div></div>
<p>En este caso, la diferencia con el otro script, es que usaremos la función de Redux para el login y esto optimizará nuestro código ya que esta mucho más depurado. En el controller welcome añadiremos dos funciones:</p>
<div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_6"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#codesyntax_6"  onClick="javascript:wpsh_toggleBlock(6)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_6" onClick="javascript:wpsh_code(6)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_print(6)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_about(6)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000000; font-weight: bold;">function</span> _check_login<span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redux_auth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">login</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$email</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">password</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> ajaxLogin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'validation'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">password</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loginemail</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form_validation</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_rules</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Email Address'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'trim|required|callback__check_login'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form_validation</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_rules</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Password'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'trim|required'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form_validation</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">run</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>    <span style="color: #0000ff;">'success'</span> <span style="color: #339933;">=&gt;</span>    <span style="color: #0000ff;">'no'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'message'</span> <span style="color: #339933;">=&gt;</span>    <span style="color: #0000ff;">'The email or password you provided are wrong.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/json_encode"><span style="color: #990000;">json_encode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>    <span style="color: #0000ff;">'success'</span> <span style="color: #339933;">=&gt;</span>    <span style="color: #0000ff;">'yes'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'welcome'</span> <span style="color: #339933;">=&gt;</span>    <span style="color: #0000ff;">'Welcome '</span><span style="color: #339933;">.</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loginemail</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/json_encode"><span style="color: #990000;">json_encode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/str_replace"><span style="color: #990000;">str_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\r</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$output</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/str_replace"><span style="color: #990000;">str_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$output</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Para entender el código: la primera función, _check_login(), usa el modelo redux_auth_model.php para validar el correo y la contraseña que hemos seleccionado. Para más información mira el modelo en la carpeta models. Si la información procesada es correcta devuelve TRUE, sino FALSE. En caso de que devuelva TRUE, la aplicación crea la sesión con nuestro e-mail. Si necesitas alguna cosa más, edita el modelo.</p>
<p>La segunda función es un mix de la función de login de Redux y mi función de AJAX. Toma los dos inputs y los valida. El primero, correo electrónico, usa la función callback a la función _check_login(). Si la información no es correcta, o sucede algún problema, devuelve FALSE. Entonces pasaremos la información a la función AJAX y la codificaremos con JSON. La información codificada se muestra tal que así: { &#8220;success&#8221;: &#8220;no&#8221;, &#8220;message&#8221;: &#8220;The email or password you provided are wrong.&#8221; }.</p>
<p>Hay que tener en cuenta que uso $this-&gt;password y $this-&gt;loginemail. Estas variables tienen que ser definidas en el inicio el controlador, así:</p>
<div id="wpshdo_7" class="wp-synhighlighter-outer"><div id="wpshdt_7" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_7"></a><a id="wpshat_7" class="wp-synhighlighter-title" href="#codesyntax_7"  onClick="javascript:wpsh_toggleBlock(7)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_7" onClick="javascript:wpsh_code(7)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_7" onClick="javascript:wpsh_print(7)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_7" onClick="javascript:wpsh_about(7)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_7" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000000; font-weight: bold;">class</span> Welcome <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$password</span>     <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$loginemail</span>    <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009933; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* index<br />
&nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp;* @return void<br />
&nbsp; &nbsp; &nbsp;* @author Mathew<br />
&nbsp; &nbsp; **/</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; redirect<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'welcome/status'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">...</span></div></div>
<p>Perfecto! Ahora modificaremos el login. Como sabes, la mejor manera de crear un formulario en CodeIgniter es accediendo a su user guide. De este modo, abre<strong> /views/login.php</strong>. Cuando tenemos un tenemos un formulario de login normalmente solo lo mostramos cuando el usuario no esta identificado. En el ejemplo de la librería Redux esto no pasa y tenemos que modificarlo. La manera es comprobar si existe el item &#8216;identity&#8217; en la session. Añade al principio del archivo:</p>
<div id="wpshdo_8" class="wp-synhighlighter-outer"><div id="wpshdt_8" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_8"></a><a id="wpshat_8" class="wp-synhighlighter-title" href="#codesyntax_8"  onClick="javascript:wpsh_toggleBlock(8)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_8" onClick="javascript:wpsh_code(8)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_8" onClick="javascript:wpsh_print(8)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_8" onClick="javascript:wpsh_about(8)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_8" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">userdata</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'identity'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;h1&gt;You're aready logged in!&lt;/h1&gt;&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;h1&gt;Login&lt;/h1&gt;</div></div>
<p>Esto comprobará si existe. Al final del archivo, añade:</p>
<div id="wpshdo_9" class="wp-synhighlighter-outer"><div id="wpshdt_9" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_9"></a><a id="wpshat_9" class="wp-synhighlighter-title" href="#codesyntax_9"  onClick="javascript:wpsh_toggleBlock(9)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_9" onClick="javascript:wpsh_code(9)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_9" onClick="javascript:wpsh_print(9)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_9" onClick="javascript:wpsh_about(9)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_9" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Compruébalo. Accede y vuelve al formulario de identificación. Mostrará <strong>You&#8217;re already logged in</strong>.<br />
Tenemos que añadir algunas lineas más al archivo login.php. Cambia el <strong>form_open()</strong> y añade un id, añade un id a la tabla y añade un id a las divs extras que usaremos para mostrar los errores o sucesos de la aplicación AJAX. Es necesario que jQuery los identifique y eso lo hacemos con los ids.</p>
<div id="wpshdo_10" class="wp-synhighlighter-outer"><div id="wpshdt_10" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_10"></a><a id="wpshat_10" class="wp-synhighlighter-title" href="#codesyntax_10"  onClick="javascript:wpsh_toggleBlock(10)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_10" onClick="javascript:wpsh_code(10)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_10" onClick="javascript:wpsh_print(10)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_10" onClick="javascript:wpsh_about(10)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_10" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> form_open<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'welcome/login'</span><span style="color: #339933;">,</span><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'userlogin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><br />
<br />
&lt;table id=&quot;loginform&quot;&gt;<br />
<br />
&lt;div id=&quot;logged&quot;&gt;&lt;div&gt;<br />
<br />
&lt;div id=&quot;loginerror&quot;&gt;&lt;/div&gt;</div></div>
<p>He añadido estas dos últimas &lt;div&gt;&#8217; despues del <strong>form_close()</strong>.</p>
<p>A parte, haz estos cambios:<br />
<div id="wpshdo_11" class="wp-synhighlighter-outer"><div id="wpshdt_11" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_11"></a><a id="wpshat_11" class="wp-synhighlighter-title" href="#codesyntax_11"  onClick="javascript:wpsh_toggleBlock(11)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_11" onClick="javascript:wpsh_code(11)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_11" onClick="javascript:wpsh_print(11)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_11" onClick="javascript:wpsh_about(11)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_11" class="wp-synhighlighter-inner" style="display: block;">&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> form_input<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #339933;">,</span> set_value<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;</div></div></p>
<p>Por:</p>
<div id="wpshdo_12" class="wp-synhighlighter-outer"><div id="wpshdt_12" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_12"></a><a id="wpshat_12" class="wp-synhighlighter-title" href="#codesyntax_12"  onClick="javascript:wpsh_toggleBlock(12)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_12" onClick="javascript:wpsh_code(12)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_12" onClick="javascript:wpsh_print(12)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_12" onClick="javascript:wpsh_about(12)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_12" class="wp-synhighlighter-inner" style="display: block;">&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;email&quot; value=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> set_value<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; id=&quot;email&quot; /&gt;&lt;/td&gt;</div></div>
<p>Y:</p>
<div id="wpshdo_13" class="wp-synhighlighter-outer"><div id="wpshdt_13" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_13"></a><a id="wpshat_13" class="wp-synhighlighter-title" href="#codesyntax_13"  onClick="javascript:wpsh_toggleBlock(13)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_13" onClick="javascript:wpsh_code(13)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_13" onClick="javascript:wpsh_print(13)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_13" onClick="javascript:wpsh_about(13)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_13" class="wp-synhighlighter-inner" style="display: block;">&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> form_password<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;</div></div>
<p>Por:</p>
<div id="wpshdo_14" class="wp-synhighlighter-outer"><div id="wpshdt_14" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_14"></a><a id="wpshat_14" class="wp-synhighlighter-title" href="#codesyntax_14"  onClick="javascript:wpsh_toggleBlock(14)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_14" onClick="javascript:wpsh_code(14)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_14" onClick="javascript:wpsh_print(14)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_14" onClick="javascript:wpsh_about(14)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_14" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;password&quot;</span> name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;password&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&quot;</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;password&quot;</span> <span style="color: #339933;">/&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span></div></div>
<p>Ahora es tiempo del archivo javascript. Recuerda que antes hemos añadido la librería de jQuery. Crea un archivo que se llame <strong>ajaxlogin.js</strong> en <strong>/assets/js/</strong>. Para usar el ajaxForm necesitas un plugin. Lo puedes descargar <a href="http://www.malsup.com/jquery/form/#download">aquí</a>. Lo añadimos igual que hemos hecho los dos del principio, en <strong>/views/template.php</strong>:</p>
<div id="wpshdo_15" class="wp-synhighlighter-outer"><div id="wpshdt_15" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_15"></a><a id="wpshat_15" class="wp-synhighlighter-title" href="#codesyntax_15"  onClick="javascript:wpsh_toggleBlock(15)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_15" onClick="javascript:wpsh_code(15)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_15" onClick="javascript:wpsh_print(15)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_15" onClick="javascript:wpsh_about(15)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_15" class="wp-synhighlighter-inner" style="display: block;">&lt;script type=&quot;text/javascript&quot; src=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> base_url<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'assets/js/jquery.form.js'</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;&lt;/script&gt;</div></div>
<p>Ahora, escribe en <strong>ajaxlogin.js</strong>:</p>
<div id="wpshdo_16" class="wp-synhighlighter-outer"><div id="wpshdt_16" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_16"></a><a id="wpshat_16" class="wp-synhighlighter-title" href="#codesyntax_16"  onClick="javascript:wpsh_toggleBlock(16)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_16" onClick="javascript:wpsh_code(16)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_16" onClick="javascript:wpsh_print(16)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_16" onClick="javascript:wpsh_about(16)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_16" class="wp-synhighlighter-inner" style="display: block;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;#userlogin&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ajaxForm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; type<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;POST&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;http://localhost/ajaxlogin/index.php/welcome/ajaxLogin&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dataType<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;json&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; data<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;email=&quot;</span><span style="color: #339933;">+</span>$<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;#email&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>val<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&amp;amp;password;=&quot;</span><span style="color: #339933;">+</span>$<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;#password&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>val<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; success<span style="color: #339933;">:</span> updateLogin<br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<div id="_mcePaste">Ten en cuenta que es posible que tengas que cambiar la URL.  Yo lo uso en mi localhost y con el alias ajaxlogin. Mismamente, uso el index.php y el controlador welcome. Debes modificarlo si es necesario.</div>
<div id="_mcePaste">Ahora mismo, el script funcionaria pero debemos añadirle un complemento&#8230; la función que llama ajaxForm cuando se ejecuta:</div>
<p>Ten en cuenta que es posible que tengas que cambiar la URL.  Yo lo uso en mi localhost y con el alias ajaxlogin. Mismamente, uso el index.php y el controlador welcome. Debes modificarlo si es necesario.<br />
Ahora mismo, el script funcionaria pero debemos añadirle un complemento&#8230; la función que llama ajaxForm cuando se ejecuta:</p>
<div id="wpshdo_17" class="wp-synhighlighter-outer"><div id="wpshdt_17" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_17"></a><a id="wpshat_17" class="wp-synhighlighter-title" href="#codesyntax_17"  onClick="javascript:wpsh_toggleBlock(17)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_17" onClick="javascript:wpsh_code(17)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_17" onClick="javascript:wpsh_print(17)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_17" onClick="javascript:wpsh_about(17)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_17" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000000; font-weight: bold;">function</span> updateLogin<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#logged'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>html<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#logged'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>hide<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;#loginform&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>fadeOut<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;slow&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>data<span style="color: #339933;">.</span>success <span style="color: #339933;">==</span> <span style="color: #0000ff;">'yes'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#logged'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>html<span style="color: #009900;">&#40;</span>data<span style="color: #339933;">.</span>welcome<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>fadeIn<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>data<span style="color: #339933;">.</span>success <span style="color: #339933;">==</span> <span style="color: #0000ff;">'no'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#loginerror'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>html<span style="color: #009900;">&#40;</span>data<span style="color: #339933;">.</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>fadeIn<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>fadeOut<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;slow&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;#loginform&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>fadeIn<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Esto creará nuestra animación y hará desaparecer el form. Igualmente escribirá los datos JSON a la &lt;div&gt; que hemos especificado.</p>
<p><strong>Puedes descargar los archivos de este ejemplo funcionando aquí: <a href="http://blog.ipalaus.es/dm.php?id=4">ipalaus-ajaxlogin-v0.2.rar</a></strong>.</p>
<p>¡Gracias a todos! ¡Espero que funcione!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/ajax-login-con-jquery-y-codeigniter-v2-archivos/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: HTML Helper modificado. script_tag(&#8220;archivo.js&#8221;); añadido.</title>
		<link>http://blog.ipalaus.es/codeigniter-html-helper-modificado-anade-javascript-facilmente</link>
		<comments>http://blog.ipalaus.es/codeigniter-html-helper-modificado-anade-javascript-facilmente#comments</comments>
		<pubDate>Fri, 20 Jun 2008 21:52:34 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/?p=14</guid>
		<description><![CDATA[Hola,
Después de mucho tiempo sin escribir, y habiendo salido ya la versión 1.6.2 de CodeIgniter, escribo para presentar una mejora a un helper de CodeIgniter. Concretamente se trata del HTML Helper, el cual incluye funcione para la ayuda en el HTML.
¿Qué hace? ¿Por qué? La última versión del framework añadía la posibilidad de crear tags <a href="http://blog.ipalaus.es/codeigniter-html-helper-modificado-anade-javascript-facilmente" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Hola,</p>
<p>Después de mucho tiempo sin escribir, y habiendo salido ya la versión 1.6.2 de <a href="http://www.codeigniter.com">CodeIgniter</a>, escribo para presentar una mejora a un <em>helper</em> de <a href="http://www.codeigniter.com">CodeIgniter</a>. Concretamente se trata del <a href="http://codeigniter.com/user_guide/helpers/html_helper.html">HTML Helper</a>, el cual incluye funcione para la ayuda en el HTML.</p>
<p>¿Qué hace? ¿Por qué? La última versión del <em>framework</em> añadía la posibilidad de crear tags <strong>&lt;link /&gt;</strong> con lo que podíamos añadir facilmente archivos <strong>CSS</strong>, <strong>shorcuts.ico</strong> u otros similares. Esto se hace mediante:</p>
<div id="wpshdo_18" class="wp-synhighlighter-outer"><div id="wpshdt_18" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_18"></a><a id="wpshat_18" class="wp-synhighlighter-title" href="#codesyntax_18"  onClick="javascript:wpsh_toggleBlock(18)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_18" onClick="javascript:wpsh_code(18)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_18" onClick="javascript:wpsh_print(18)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_18" onClick="javascript:wpsh_about(18)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_18" class="wp-synhighlighter-inner" style="display: block;">link_tag<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'archivo.css);</span></div></div>
<p>Y&#8230; ¿porqué no para incluir archivos JavaScript? Así que me decidí a hacer mi primer aportación al <em>core</em> de <a href="http://www.codeigniter.com">CodeIgniter</a> (y espero que la añadan, claro). Esto consiste en la función <strong>script_tag();</strong> para añadir tags <strong>&lt;script /&gt;</strong>.</p>
<p>Y&#8230; ¿Cómo se usa? Simplemente es una extensión del <em>helper</em> existente así que debemos colocar el archivo dentro de la carpeta <strong>helpers</strong> dentro de <strong>application</strong> con el nombre <strong>MY_html_helper.php</strong> teniendo en cuenta que el prefijo para las extensiones es &#8220;MY_&#8221; ($config['subclass_prefix'] = &#8216;MY_&#8217;; en config.php).</p>
<p>El código en cuestión es el siguiente:<br />
<div id="wpshdo_19" class="wp-synhighlighter-outer"><div id="wpshdt_19" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_19"></a><a id="wpshat_19" class="wp-synhighlighter-title" href="#codesyntax_19"  onClick="javascript:wpsh_toggleBlock(19)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_19" onClick="javascript:wpsh_code(19)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_19" onClick="javascript:wpsh_print(19)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_19" onClick="javascript:wpsh_about(19)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_19" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'BASEPATH'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No direct script access allowed'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009933; font-style: italic;">/**<br />
* Script<br />
*<br />
* Generates a script inclusion of a JavaScript file<br />
* Based on the CodeIgniters original Link Tag.<br />
*<br />
* Author(s): Isern Palaus &lt;ipalaus@ipalaus.es&gt;, Viktor Rutberg &lt;wishie@gmail.com&gt;<br />
*<br />
* @access &nbsp; &nbsp;public<br />
* @param &nbsp; &nbsp;mixed &nbsp; &nbsp;javascript sources or an array<br />
* @param &nbsp; &nbsp;string &nbsp; &nbsp;language<br />
* @param &nbsp; &nbsp;string &nbsp; &nbsp;type<br />
* @param &nbsp; &nbsp;boolean &nbsp; &nbsp;should index_page be added to the javascript path<br />
* @return &nbsp; &nbsp;string<br />
*/</span> &nbsp; &nbsp;<br />
<br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <a href="http://www.php.net/function_exists"><span style="color: #990000;">function_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'script_tag'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> script_tag<span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$language</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'javascript'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$type</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'text/javascript'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$index_page</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$CI</span> <span style="color: #339933;">=&amp;</span> get_instance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&lt;script '</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/is_array"><span style="color: #990000;">is_array</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'src'</span> AND <a href="http://www.php.net/strpos"><span style="color: #990000;">strpos</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'://'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$index_page</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' src=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$CI</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">site_url</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' src=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$CI</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">slash_item</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000088;">$v</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$k</span>=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #006699; font-weight: bold;">$v</span><span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <a href="http://www.php.net/strpos"><span style="color: #990000;">strpos</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'://'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' src=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$src</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; '</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$index_page</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' src=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$CI</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">site_url</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; '</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">' src=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$CI</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">slash_item</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000088;">$src</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; '</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'language=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$language</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; type=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$type</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&gt;'</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$script</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/script&gt;'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$script</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div></p>
<p>En cuanto su uso es sencillo:<br />
<div id="wpshdo_20" class="wp-synhighlighter-outer"><div id="wpshdt_20" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_20"></a><a id="wpshat_20" class="wp-synhighlighter-title" href="#codesyntax_20"  onClick="javascript:wpsh_toggleBlock(20)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_20" onClick="javascript:wpsh_code(20)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_20" onClick="javascript:wpsh_print(20)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_20" onClick="javascript:wpsh_about(20)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_20" class="wp-synhighlighter-inner" style="display: block;">script_tag<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'archivo.js);</span></div></div></p>
<p>Pronto os presentaré también otra modificación del <em>helper</em> <a href="http://codeigniter.com/user_guide/helpers/url_helper.html">URL Helper</a>. Hasta pronto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/codeigniter-html-helper-modificado-anade-javascript-facilmente/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: mod_rewrite</title>
		<link>http://blog.ipalaus.es/codeigniter-mod_rewrite</link>
		<comments>http://blog.ipalaus.es/codeigniter-mod_rewrite#comments</comments>
		<pubDate>Sun, 30 Mar 2008 15:17:12 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/?p=12</guid>
		<description><![CDATA[Uno de los principales inconvenientes de CodeIgniter es, en parte, visual en la dirección URL. Solemos tener nuestros programas con http://localhost/index.php/controlador/funcion y seguramente quedaría mucho mejor algo tipo: http://localhost/controlador/funcion, ¿verdad? Pues bien, para hacer esto necesitaremos usar Apache y el modulo mod_rewrite.
Para empezar será necesario saber si estamos usando mod_rewrite en Apache. Lo más fácil <a href="http://blog.ipalaus.es/codeigniter-mod_rewrite" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Uno de los principales inconvenientes de CodeIgniter es, en parte, visual en la dirección URL. Solemos tener nuestros programas con <em>http://localhost/index.php/controlador/funcion </em>y seguramente quedaría mucho mejor algo tipo: <em>http://localhost/controlador/funcion</em>, ¿verdad? Pues bien, para hacer esto necesitaremos usar <a href="http://www.apache.org">Apache</a> y el modulo <em>mod_rewrite</em>.</p>
<p>Para empezar será necesario saber si estamos usando <em>mod_rewrite</em> en Apache. Lo más fácil es, directamente, ir al archivo de configuración (el archivo <strong>http.conf</strong>) y buscar: mod_rewrite.so. Deberíamos encontrar la siguiente línea:</p>
<p>[code]LoadModule rewrite_module modules/mod_rewrite.so[/code]</p>
<p>Sin embargo, si esta contiene un símbolo de almohadilla (<strong>#</strong>) es que no esta activado. Si lo contiene al principio, lo borramos, guardamos y reiniciamos el servidor. Así, <em>mod_rewrite</em> se iniciará cada vez al iniciar Apache.</p>
<p>Ahora es el momento de crear nuestro archivo de configuración especifico en el directorio donde este nuestro <strong>index.php</strong>. A este archivo le pondremos de nombre <strong>.htaccess</strong> y contendrá lo siguiente:</p>
<div id="wpshdo_21" class="wp-synhighlighter-outer"><div id="wpshdt_21" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_21"></a><a id="wpshat_21" class="wp-synhighlighter-title" href="#codesyntax_21"  onClick="javascript:wpsh_toggleBlock(21)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_21" onClick="javascript:wpsh_code(21)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_21" onClick="javascript:wpsh_print(21)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_21" onClick="javascript:wpsh_about(21)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_21" class="wp-synhighlighter-inner" style="display: block;">RewriteEngine On<br />
RewriteBase /<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule ^(.*)$ index.php/$1 [L]<br />
<br />
# If we don't have mod_rewrite installed, all 404's<br />
# can be sent to index.php, and everything works as normal.<br />
# Submitted by: ElliotHaughin<br />
ErrorDocument 404 /index.php</div></div>
<p>Bien, con esto ya nos ocupamos de cuando se acceda a nuestra web automáticamente, lo que hace el servidor web, es catalogar como si accediéramos a la misma pero con <em>index.php/</em> al principio. Solo nos queda una cosa, que <a href="http://www.codeigniter.com">CodeIgniter</a> nos construya los enlaces sin el <strong>index.php/</strong>. De este modo, accedemos al archivo <strong>config.php</strong> y cambiaremos la variable <em>$config['index_page']</em>:<br />
De:<br />
<div id="wpshdo_22" class="wp-synhighlighter-outer"><div id="wpshdt_22" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_22"></a><a id="wpshat_22" class="wp-synhighlighter-title" href="#codesyntax_22"  onClick="javascript:wpsh_toggleBlock(22)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_22" onClick="javascript:wpsh_code(22)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_22" onClick="javascript:wpsh_print(22)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_22" onClick="javascript:wpsh_about(22)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_22" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'index_page'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;index.php&quot;</span><span style="color: #339933;">;</span></div></div></p>
<p>A:<br />
<div id="wpshdo_23" class="wp-synhighlighter-outer"><div id="wpshdt_23" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_23"></a><a id="wpshat_23" class="wp-synhighlighter-title" href="#codesyntax_23"  onClick="javascript:wpsh_toggleBlock(23)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_23" onClick="javascript:wpsh_code(23)" title="Show code only"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_23" onClick="javascript:wpsh_print(23)" title="Print code"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="#codesyntax_23" onClick="javascript:wpsh_about(23)" title="Show plugin information"><img border="0" style="border: 0 none" src="http://blog.ipalaus.es/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_23" class="wp-synhighlighter-inner" style="display: block;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'index_page'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span></div></div><br />
Y esto es todo para tener unas direcciones URL mucho más limpias. Espero que les haya ayudado de nuevo y hasta pronto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/codeigniter-mod_rewrite/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Activar $_GET en CodeIgniter</title>
		<link>http://blog.ipalaus.es/activar-get-en-codeigniter</link>
		<comments>http://blog.ipalaus.es/activar-get-en-codeigniter#comments</comments>
		<pubDate>Sun, 30 Mar 2008 14:55:16 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[activar]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[get]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/?p=11</guid>
		<description><![CDATA[Uno de los inconvenientes que nos encontramos, a veces, al programar en CodeIgniter es que no podemos pasar datos, por ejemplo, con QUERY_STRINGS, que es esa información que sigue después del símbolo ? en nuestra URL. Un ejemplo de este método sería una URL tipo: http://blog.ipalaus.es/?id=3.
Para solucionar este problema deberemos hacer solo dos cosas:

En nuestro <a href="http://blog.ipalaus.es/activar-get-en-codeigniter" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Uno de los inconvenientes que nos encontramos, a veces, al programar en <a href="http://www.codeigniter.com">CodeIgniter</a> es que no podemos pasar datos, por ejemplo, con QUERY_STRINGS, que es esa información que sigue después del símbolo <strong>?</strong> en nuestra URL. Un ejemplo de este método sería una URL tipo: <em>http://blog.ipalaus.es/?id=3</em>.</p>
<p>Para solucionar este problema deberemos hacer solo dos cosas:</p>
<ol>
<li>En nuestro <strong>config.php</strong> modificaremos el <em>$config['uri_protocolo'] </em>dejándolo similar a este:<br />
[code lang="php"]<br />
$config['uri_protocol'] = "PATH_INFO";<br />
[/code]</li>
<li>En nuestros controladores usaremos la siguiente función para reconstruir el array <strong>$_GET</strong>:<br />
[code lang="php"]<br />
parse_str($_SERVER['QUERY_STRING'],$_GET);<br />
[/code]</li>
</ol>
<p>Con esto, debería funcionar perfectamente. Pronto, más trucos, programas y ejemplos sobre <a href="http://www.codeigniter.com">CodeIgniter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/activar-get-en-codeigniter/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Consultas MySQL en CodeIgniter</title>
		<link>http://blog.ipalaus.es/consultas-mysql-en-codeigniter</link>
		<comments>http://blog.ipalaus.es/consultas-mysql-en-codeigniter#comments</comments>
		<pubDate>Mon, 17 Mar 2008 10:49:28 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[consultas mysql]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/consultas-mysql-en-codeigniter</guid>
		<description><![CDATA[Aunque pueda parecer difícil, hacer consultas en MySQL en CodeIgniter es la cosa más fácil del mundo. Y no solo con MySQL sino con todos los protocolos soportados por el framework.  Es importante, sobretodo, que tengamos nuestro CodeIgniter correctamente configurado. Podéis echarle una ojeada al artículo de configuración y iniciación para ver como configuramos <a href="http://blog.ipalaus.es/consultas-mysql-en-codeigniter" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Aunque pueda parecer difícil, hacer consultas en <a href="http://www.mysql.org">MySQL</a> en <a href="http://www.codeigniter.com">CodeIgniter</a> es la cosa más fácil del mundo. Y no solo con MySQL sino con todos los protocolos soportados por el <em>framework</em>.  Es importante, sobretodo, que tengamos nuestro <a href="http://www.codeigniter.com">CodeIgniter</a> correctamente configurado. Podéis echarle una ojeada al artículo de <a href="http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion">configuración y iniciación</a> para ver como configuramos los datos de MySQL.</p>
<p><a href="http://www.codeigniter.com">CodeIgniter</a>, a parte, nos da la posibilidad de trabajar con más de una base de datos a la vez, configurando y conectando específicamente a una u otra dependiendo de las necesidades. Sin embargo, no es el objeto de esta explicación. </p>
<p>Supongamos que queremos hacer una consulta parecida a la siguiente:<br />
<code>SELECT * FROM entradas</code></p>
<p>Lo normal en PHP sería usar un <em>mysql_query(&#8220;SELECT * FROM entradas&#8221;);</em>, sin embargo en <a href="http://www.codeigniter.com">CodeIgniter</a> (y usando librería específica) lo usaríamos de la siguiente forma:<br />
[code lang="php"]<br />
$this->db->query("SELECT * FROM entradas");<br />
[/code]</p>
<h2>GET</h2>
<p>Conclusión, podemos usarlo de la misma manera. Luego si quisiéramos estructurar los resultados podríamos usar la función <a href="http://www.php.net/foreach"><em>foreach</em></a> de PHP. Sin embargo, hay una manera mucho más fácil en <a href="http://www.codeigniter.com">CodeIgniter</a> de tratar las consultas. Ellos lo llaman el <em>Active Record Class</em> y se emplearía, para el ejemplo de antes, así:<br />
[code lang="php"]<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas;<br />
[/code]</p>
<p>También en <em>$this->db->get();</em> es posible usar un segundo parámetro para especificar un <em>LIMIT</em>:<br />
[code lang="php"]<br />
$query = $this->db->get("entradas", 10, 20);</p>
<p>// Genera: SELECT * FROM entradas LIMIT 20,10<br />
[/code]</p>
<h2>SELECT</h2>
<p>También podemos especificar el SELECT con $this->db->select(); tipo:<br />
[code lang="php"]<br />
$query = $this->db->select("id,title,body");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT id,title,body FROM entradas<br />
[/code]</p>
<p>Existen algunas funciones de MySQL que tienen una propiedad de <em>SELECT</em> específica en <a href="http://www.codeigniter.com">CodeIgniter</a>, sin embargo, solo los listaré ya que no los usaremos en aplicaciones básicas:</p>
<ul>
<li><em>$this->db->select_max();</em></li>
<li><em>$this->db->select_min();</em></li>
<li><em>$this->db->select_avg();</em></li>
<li><em>$this->db->select_sum();</em></li>
</ul>
<h2>JOIN</h2>
<p>Esto nos permite unir dos tablas tal que así:<br />
[code lang="php"]<br />
$query = $this->db->join("comentarios", "comentarios.id = entradas.id");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas JOIN comentarios ON comentarios.id = entradas.id<br />
[/code]</p>
<h2>WHERE</h2>
<p>[code lang="php"]<br />
$query = $this->db->where("id","38");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas WHERE id = '38'<br />
[/code]</p>
<p>Si quisiéramos podríamos unir varios WHERE, simplemente añadiendo otras condiciones:<br />
[code lang="php"]<br />
$query = $this->db->where("id","38");<br />
$query = $this->db->where("name","Isern");<br />
$query = $this->db->where("surname","Palaus");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas WHERE id = '38' AND name = 'Isern' AND surname = 'Palaus'<br />
[/code]</p>
<p>Pero claro, no todo son igualdades. Quizás queremos buscar una cosa que sea más pequeña que, o diferente, o mayor, etcétera. La forma es especificar en el primer campo, si no hay nada se tomará <em>=</em> por defecto:<br />
[code lang="php"]<br />
$query = $this->db->where("id >","38");<br />
$query = $this->db->where("name !=","Isern");<br />
$query = $this->db->where("surname","Palaus");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas WHERE id > '38' AND name != 'Isern' AND surname = 'Palaus'<br />
[/code]</p>
<p>Al igual que <strong>SELECT</strong>, hay muchas más propiedades:</p>
<ul>
<li><em>$this->db->or_where();</em></li>
<li><em>$this->db->where_in();</em></li>
<li><em>$this->db->or_where_in();</em></li>
<li><em>$this->db->where_not_in();</em></li>
<li><em>$this->db->or_where_not_in();</em></li>
</ul>
<h2>LIKE</h2>
<p>[code lang="php"]<br />
$query = $this->db->like("body","sentencia");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entras LIKE body = '%sentencia%'<br />
[/code]</p>
<p>Sin embargo, podría ser que no quisiéramos que las dos partes fueran aleatorias&#8230; De modo que podemos especificar en un tercer campo el <em>%</em> donde debe estar. Puede ser: <em>before</em>, <em>both</em> y <em>after</em>.<br />
[code lang="php"]<br />
$query = $this->db->like("body","sentencia1","before");<br />
$query = $this->db->like("title","sentencia2","both");<br />
$query = $this->db->like("slug","sentencia3","after");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas LIKE body = '%sentencia1' AND title = '%sentencia2%' AND slug = 'sentencia3%'<br />
[/code]</p>
<p>Otros tipos de <b>LIKE</b> que podemos usar son:</p>
<ul>
<li><em>$this->db->not_like();</em></li>
<li><em>$this->db->or_not_like();</em></li>
<li><em>$this->db->group_by();</em></li>
</ul>
<h2>GROUP BY</h2>
<p>En otras versiones se conocia como <em>$this->db->groupby();</em> pero ha sido eliminado.<br />
[code lang="php"]<br />
$query = $this->db->group_by("title");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas GROUP BY title<br />
[/code]</p>
<h2>DISTINCT</h2>
<p>Para añadir DISTINCT a la consulta:<br />
[code lang="php"]<br />
$query = $this->db->distinct();<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT DISTINCT * FROM entradas<br />
[/code]</p>
<h2>HAVING</h2>
<p>[code lang="php"]<br />
$query = $this->db->having("uid = 32");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas HAVING uid = 32<br />
[/code]</p>
<p>También es posible usar <em>$this->db->or_having();</em></p>
<h2>ORDER BY</h2>
<p><em>$this->db->order_by();</em> permite ordenar un resultado en una dirección especifica. En el primer parámetro especificamos el nombre de la columna y en el segundo la dirección. Las posibilidades del segundo parámetro son: <em>ASC</em>, <em>DESC</em> y <em>RANDOM</em>.<br />
[code lang="php"]<br />
$query = $this->db->order_by("id","DESC");<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas ORDER BYid DESC<br />
[/code]</p>
<h2>LIMIT</h2>
<p>Permite especificar el limite de resultados que quieres que devuelva:<br />
[code lang="php"]<br />
$query = $this->db->limit(30);<br />
$query = $this->db->get("entradas");</p>
<p>// Genera: SELECT * FROM entradas LIMIT 10<br />
[/code]</p>
<h2>COUNT ALL</h2>
<p>Permite contar el numero de entradas que hay en una tabla:<br />
[code lang="php"]<br />
$num = $this->db->count_all("entradas");</p>
<p>// Genera: un numero que lo podemos tratar como una variable o escribirlo<br />
[/code]</p>
<h2>COUNT ALL RESULTS</h2>
<p>A diferencia de <strong>COUNT ALL</strong>, nos permite contar el numero de resultados en la actual consulta:<br />
[code lang="php"]<br />
$query = $this->db->where("name","Isern");<br />
$query = $this->db->get("entradas");</p>
<p>$num = $this->db->count_all_results();</p>
<p>// Genera: un numero<br />
[/code]</p>
<h2>INSERT</h2>
<p>Para insertar datos usando el Active Record de <a href="http://www.codeigniter.com">CodeIgniter</a> debemos usar un array luego insertar:<br />
[code lang="php"]<br />
$insert = array("title" => "Test",<br />
                     "body" => "Test",<br />
                     "name" => "Isern",<br />
                     "surname" => "Palaus");</p>
<p>$this->db->insert("entradas",$insert);</p>
<p>// Genera: INSERT INTO entradas (title, body, name, surname) VALUES ('Test', 'Test', 'Isern', 'Palaus')<br />
[/code]</p>
<h2>UPDATE</h2>
<p>Al igual que <strong>INSERT</strong> usaremos un array para insertar, sin embargo si queremos actualizar, por ejemplo, una entrada deberemos especificar un where:<br />
[code lang="php"]<br />
$update = array("title" => "Test",<br />
                      "body" => "Test",<br />
                      "name" => "Isern",<br />
                      "surname" => "Palaus");</p>
<p>$this->db->where("id","3");<br />
$this->db->update("entradas",$update);</p>
<p>// Genera: UPDATE entradas SET title = 'Test', body = 'Test', name = 'Isern', surname = 'Palaus' WHERE id = 3<br />
[/code]</p>
<h2>DELETE</h2>
<p>Al igual que UPDATE usaremos un ID para especificar cual es la que queremos borrar:<br />
[code lang="php"]<br />
$this->db->where("id","3");<br />
$this->db->delete("entradas");</p>
<p>// Genera: DELETE FROM entradas WHERE id = 3<br />
[/code]</p>
<p>Y esto es más o menos todo lo que nos ofrece <a href="http://www.codeigniter.com">CodeIgniter</a> para tratar nuestras bases de datos. Espero que haya servido de ayuda a más de uno ya que muchas visitas recibidas buscaban como usar MySQL en <a href="http://www.codeigniter.com">CodeIgniter</a>.</h2>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/consultas-mysql-en-codeigniter/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: Paginar resultados</title>
		<link>http://blog.ipalaus.es/codeigniter-paginar-resultados</link>
		<comments>http://blog.ipalaus.es/codeigniter-paginar-resultados#comments</comments>
		<pubDate>Wed, 12 Mar 2008 15:50:19 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/codeigniter-paginar-resultados</guid>
		<description><![CDATA[CodeIgniter, como buen framework que es, tiene una librería para poder paginar nuestros resultados. En cuanto a paginar me refiero a tener la posibilidad de crear paginas entre resultados, por ejemplo, cada 10 resultados 1 pagina. Nosotros vamos a usar el código del blog que creamos en el artículo CodeIgniter: Aplicación Básica (I), Creación de <a href="http://blog.ipalaus.es/codeigniter-paginar-resultados" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codeigniter.com">CodeIgniter</a>, como buen <em>framework</em> que es, tiene una librería para poder <a href="http://codeigniter.com/user_guide/libraries/pagination.html">paginar nuestros resultados</a>. En cuanto a paginar me refiero a tener la posibilidad de crear paginas entre resultados, por ejemplo, cada 10 resultados 1 pagina. Nosotros vamos a usar el código del blog que creamos en el artículo <a href="http://blog.ipalaus.es/codeigniter-aplicacion-basica-i-creacion-de-un-blog">CodeIgniter: Aplicación Básica (I), Creación de un Blog</a>.</p>
<p>Para empezar vamos a recuperar el código que nos muestra las entradas del blog:</p>
<p>Archivo: /application/controllers/blog.php<br />
[code lang="php"]<br />
function index()<br />
{<br />
	$query = $this->db->orderby("id","desc");<br />
	$query = $this->db->;get("posts");</p>
<p>	$this->load->helper("date");<br />
	$datestring = "%d-%m-%Y";</p>
<p>	foreach ($query->result() as $row) {<br />
		$data["posts"][$row->id]["title"]	= $row->title;<br />
		$data["posts"][$row->id]["url"]		= $row->url_title;<br />
		$data["posts"][$row->id]["body"]	= $row->body;<br />
		$data["posts"][$row->id]["date"]	= mdate($datestring,$row->created_on);<br />
	}</p>
<p>	$this->load->view("blog_front",$data);<br />
}<br />
[/code]</p>
<p>Para no complicar mucho la cosa con rutas y .htaccess vamos a cambiar los enlaces permanentes a nuestras entradas a localhost/blog/goto/enlace-permamente. Lo primero que tenemos que hacer en nuestro controlador es cargar la librería de <a href="http://codeigniter.com/user_guide/libraries/pagination.html"><em>pagination</em></a>:</p>
<p>Archivo: /application/controllers/blog.php, Línea: 15<br />
[code lang="php"]<br />
$this->load->library("pagination");<br />
[/code]</p>
<p>Justo antes de <em>$this->load->helper(&#8220;date&#8221;);</em>. Para usar esta librería tenemos que configurar varias cosas como: la URL base, el total de entradas que tenemos en la base de datos y el total por entrada. Una vez configurado, lo cargamos:</p>
<p>Archivo: /application/controllers/blog.php<br />
[code lang="php"]<br />
$this->load->library("pagination");</p>
<p>$config["base_url"]   = base_url().index_page();<br />
$config["total_rows"] = $this->db->count_all("posts");<br />
$config["per_page"]   = "4";</p>
<p>$this->pagination->initialize($config);<br />
[/code]</p>
<p>También tenemos que especificar en que posición en la URL se va a especificar la pagina. Esto lo haremos con <em>$this->uri->segment();</em> como usamos en el artículo anterior.</p>
<p>[code lang="php"]<br />
$num = $this->uri->segment(1);<br />
[/code]</p>
<p>Y lo más importante: como hacer las consultas a la base de datos. Para hacerlo mucho más fácil, vamos a usar un modelo. Es decir, en el controlador solo gestionaremos los datos y mandaremos al modelo hacer las consultas. Sin embargo vamos a usar un pequeño truco para pasar esta la información:</p>
<p>[code lang="php"]<br />
if($num === "all"){<br />
	$data["posts"] = $this->blog_model->getPaginated("posts",$config["per_page"]);<br />
} else {<br />
	if(!isset($num) OR !is_numeric($num)) $num = 0;<br />
	$data["posts"] = $this->blog_model->getPaginated("posts",$config["per_page"],$num);<br />
}<br />
[/code]</p>
<p>Primero comprobamos si <strong>$num</strong> es igual a <em>all</em>, si es así, mostramos las primeras entradas (las más recientes) limitando al numero que hemos configurado por pagina. Si esto no se cumple comprobamos si <strong>$num</strong> esta especificado (recordar que lo recupera de la URI) o si es realmente un número, sino atribuye el valor de la variable a 0. A partir de aquí, busca también a partir de <strong>$num</strong> valores los siguientes siendo estos especificados por pagina. Si veis como es el modelo lo veréis más claro:</p>
<p>Archivo: /application/models/blog_model.php<br />
[code lang="php"]<br />
<?php<br />
class Blog_model extends Model<br />
{</p>
<p>	function __construct ()<br />
	{<br />
		parent::__construct();<br />
	}</p>
<p>	function  getPaginated($table,$num=-1,$offset=-1)<br />
	{<br />
		$sql = "SELECT * from ".$table." order by id desc";<br />
		if($num != -1)<br />
			$sql .= " limit ";<br />
		if($num != -1 AND $offset != -1)<br />
			$sql .= "$offset,";<br />
		if($num != -1)<br />
			$sql .= "$num";</p>
<p>		$query = $this->db->query($sql);</p>
<p>		$this->load->helper("date");<br />
		$datestring = "%d-%m-%Y";</p>
<p>		foreach ($query->result() as $row) {<br />
			$data["posts"][$row->id]["title"]	= $row->title;<br />
			$data["posts"][$row->id]["url"]		= $row->url_title;<br />
			$data["posts"][$row->id]["body"]	= $row->body;<br />
			$data["posts"][$row->id]["date"]	= mdate($datestring,$row->created_on);<br />
		}</p>
<p>		return $data["posts"];<br />
	}</p>
<p>}<br />
?><br />
[/code]</p>
<p>Como podéis comprobar gran parte del código es el que ya usábamos en el controlador. Es importante que se guarde este fichero con el nombre de <strong>blog_model.php</strong> y lo carguemos luego en el controlador con <em>$this->load->model(&#8220;blog_model&#8221;);</em>.</p>
<p>Bien, nuestro controlador <strong>blog.php</strong> debería ser algo así:</p>
<p>Archivo: /application/controllers/blog.php<br />
[code lang="php"]<br />
function show()<br />
{<br />
	$url_title = $this->uri->segment(2, 0);</p>
<p>	if($url_title) {<br />
		$this->load->helper("date");<br />
		$datestring = "%d-%m-%Y";</p>
<p>		$query = $this->db->where("url_title",$url_title);<br />
		$query = $this->db->get("posts");</p>
<p>		foreach ($query->result() as $row) {<br />
			$data["post"]["id"]		= $row->id;<br />
			$data["post"]["title"]	= $row->title;<br />
			$data["post"]["url"]	= $row->url_title;<br />
			$data["post"]["body"]	= $row->body;<br />
			$data["post"]["date"]	= mdate($datestring,$row->created_on);<br />
		}</p>
<p>		$this->load->view("blog_single",$data);<br />
	} else {<br />
		redirect();<br />
	}<br />
}<br />
[/code]</p>
<p>Y también tenemos que editar el <strong>routes.php</strong>:</p>
<p>[code lang="php"]<br />
$route['default_controller'] = "blog";<br />
$route['scaffolding_trigger'] = "";</p>
<p>$route["blog"]	= "blog";<br />
$route["add"]	= "blog/add";</p>
<p>$route["goto/:any"]	= "blog/show";</p>
<p>$route[":any"] = "blog";<br />
[/code]</p>
<p>Esto implica cambiar en <strong>blog_front.php</strong> y <strong>blog_single.php</strong> los enlaces permanentes por: /goto/enlace-permanente.</p>
<p>[code lang="php"]<br />
anchor("goto/".$post["url"],"Enlace Permanente").<br />
[/code]</p>
<p>Y para finalizar solo nos queda añadir los enlaces para crear las paginas. Esto lo hacemos con una función de la librería de <em>pagination</em> <em>$this->pagination->create_links();</em>, yo lo he añadido tal que así:</p>
<p>Archivo: /application/views/blog_front.php<br />
[code lang="php"]</p>
<div style="text-align: right"><?=anchor("add","A&ntilde;adir entrada");?></div>
<div style="text-align: center"><?=$this->pagination->create_links();?></div>
<p><?php<br />
	foreach ($posts as $id => $post) {</p>
<p>		echo "<br />
<h1>".anchor("goto/".$post["url"],"#".$id)." ".$post["title"]."</h1>
<p>";<br />
		echo "
<p>".$post["body"]."</p>
<p>";<br />
		echo "<code>".anchor("goto/".$post["url"],"Enlace Permanente")." - ".$post["date"]."</code>";</p>
<p>	}<br />
?></p>
<div style="text-align: center"><?=$this->pagination->create_links();?></div>
<p>Page rendered in {elapsed_time} seconds</p>
<p>[/code]</p>
<h2>Conclusión</h2>
<p>Con todo esto ya tenemos nuestras entradas al blog paginadas correctamente. Solo me queda decir que la idea me ha venido de una búsqueda que he visto en Google Analytics, así que espero que quien lo buscase pueda volver a encontrarlo otra vez.</p>
<p>Descargar el ejemplo del blog y la su contenido paginado: <a href="http://blog.ipalaus.es/dm.php?id=3">ipalaus-CodeIgniter_BlogExample_Pagination_v1.rar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/codeigniter-paginar-resultados/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: Aplicación Básica (I), Creación de un Blog</title>
		<link>http://blog.ipalaus.es/codeigniter-aplicacion-basica-i-creacion-de-un-blog</link>
		<comments>http://blog.ipalaus.es/codeigniter-aplicacion-basica-i-creacion-de-un-blog#comments</comments>
		<pubDate>Tue, 11 Mar 2008 11:35:04 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/codeigniter-aplicacion-basica-i-creacion-de-un-blog</guid>
		<description><![CDATA[Después de la introducción de como configurar CodeIgniter, lo mejor sería empezar con un ejemplo básico de como usar CodeIgniter. Lo más común son los sistemas de noticias o un weblog, que funcionarían igual (añadir a una base de datos, listar juntos, listar individuales), así que vamos a crear uno.
Lo primero que vamos a necesitar <a href="http://blog.ipalaus.es/codeigniter-aplicacion-basica-i-creacion-de-un-blog" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>Después de la introducción de <a href="http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion">como configurar CodeIgniter</a>, lo mejor sería empezar con un ejemplo básico de como usar <a href="http://www.codeigniter.com">CodeIgniter</a>. Lo más común son los sistemas de noticias o un weblog, que funcionarían igual (añadir a una base de datos, listar juntos, listar individuales), así que vamos a crear uno.</p>
<p>Lo primero que vamos a necesitar es <a href="http://www.codeigniter.com">CodeIgniter</a>, podéis recurrir a la web oficial para descargarlo o usar la pre-configuración del artículo <a href="http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion">CodeIgniter: Iniciación y Configuración</a> (concretamente <a href="http://blog.ipalaus.es/dm.php?id=1">este</a>). Una vez descomprimido vamos a renombrar algunos ficheros y configurar algunos.</p>
<p>Accedemos a <strong>/application/controllers/</strong> y cambiamos el nombre de <strong>welcome.php</strong> a <strong>blog.php</strong>. <strong>Blog.php</strong> será la base de nuestra aplicación, el controlador principal. Lo abrimos y veremos como es, por defecto, un controlador de CodeIgniter. En este primer ejemplo no vamos a usar modelos para no complicar las cosas, en un futuro, lo haremos. Editamos nuestro archivo <strong>blog.php</strong> para que quede tal que así:</p>
<p>Archivo: /application/controllers/blog.php<br />
[code lang="php"]<br />
<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');</p>
<p>class Blog extends Controller {</p>
<p>	function Blog()<br />
	{<br />
		parent::Controller();<br />
	}</p>
<p>	function index()<br />
	{</p>
<p>	}<br />
}<br />
?><br />
[/code]</p>
<p>Es sumamente importante que sea <em>class <strong>B</strong>log</em> y no <em>class blog</em>, al igual que <em>function <strong>B</strong>log()</em> y no <em>function blog()</em>.</p>
<p>Ahora vamos a configurar CodeIgniter para que su controlador principal sea <strong>blog.php</strong> de modo que cuando accedamos a la pagina web sin establecer controlador alguno, sea <strong>blog.php</strong> el controlador por defecto. Para hacer esto necesitamos configurar el archivo <strong>routes.php</strong> y podemos encontrarlo en <strong>/application/config</strong>. <strong>Routes.php</strong> se ocupa de las rutas de nuestra URI, se usa habitualmente para redirigir cosas a los controladores. Si por ejemplo queremos que una dirección tipo /producto/id/123 vaya a productos.php y /producto/nombre/abc también vaya a productos.php podríamos usar algo similar a esto:</p>
<p>[code lang="php"]<br />
$route['/producto/id/:num'] = "productos/productById";<br />
$route['/producto/name/:any'] = "productos/productByName";<br />
[/code]</p>
<p>Siendo <em>productById</em> y <em>productByName</em> dos funciones dentro del controlador <em>productos.php</em>. Bien, pero eso no es lo que necesitamos nosotros ahora mismo. El archivo <strong>routes.php</strong> también se usa para establecer el controlador por defecto y por defecto hay el <strong>welcome</strong>, nosotros lo cambiaremos por <strong>blog</strong>:</p>
<p>Archivo: /application/config/routes.php, Línea: 43<br />
[code lang="php"]<br />
$route['default_controller'] = "blog";<br />
[/code]</p>
<p>También será necesario usar <strong>autoload.php</strong>, también en <strong>/application/config/</strong> para cargar automáticamente una librería (<a href="http://codeigniter.com/user_guide/database/index.html">database</a>) y un helper (<a href="http://codeigniter.com/user_guide/helpers/url_helper.html">url</a>):</p>
<p>Archivo: /application/config/autoload.php, Línea: 42<br />
[code lang="php"]<br />
$autoload['libraries'] = array("database");<br />
[/code]</p>
<p>Archivo: /application/config/autoload.php, Línea: 54<br />
[code lang="php"]<br />
$autoload['helper'] = array("url");<br />
[/code]</p>
<p>Al añadir database al array de librerías, se cargar cada vez que accedamos a cualquier controlador. Como nuestra aplicación estará basada en la base de datos, y la usaremos todo el rato, ya nos va bien cargarla al principio. El helper url lo vamos a usar para</p>
<h2>Base de Datos</h2>
<p>Ahora realmente empezamos a trabajar con la aplicación, lo primero que necesitaremos será una base de datos MySQL. Para configurar los datos de la base de datos deberemos acceder a <strong>/application/config/database.php</strong> como ya expliqué en el artículo <a href="http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion">CodeIgniter: Iniciación y Configuración</a>. Una vez configurado, crearemos nuestra tabla. El esquema sería el siguiente:</p>
<p>[code]<br />
CREATE TABLE `posts` (<br />
`id` int(5) NOT NULL auto_increment,<br />
`title` varchar(64) NOT NULL,<br />
`url_title` varchar(64) NOT NULL,<br />
`body` text NOT NULL,<br />
`created_on` varchar(10) default NULL,<br />
PRIMARY KEY  (`id`)<br />
) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br />
[/code]</p>
<p>El único campo que puede confundir un poco es el campo <strong>url_title</strong>, este campo lo usaremos para crear URI tipo: <em>blog.iplauas.es/este-seria-el-url-title</em>.</p>
<h2>Controlador y vistas</h2>
<p>Vamos a crear nuestro controlador. Los controladores los podemos dividir mediante funciones, nosotros vamos a usar la función <strong>index()</strong> para mostrar las entradas, <strong>show()</strong> para ver una entrada en particular (enlace permanente) y <strong>add()</strong> para añadirlas.</p>
<p>Lo primero que haremos en nuestra función <strong>index()</strong> va a ser la consulta a MySQL. En esta consulta, pondremos en un array() todas las entradas que tengamos en nuestra tabla MySQL. Debería ser algo así:</p>
<p>Archivo: /application/controllers/blog.php<br />
[code lang="php"]<br />
function index()<br />
{<br />
	$query = $this->db->orderby("id","desc");<br />
	$query = $this->db->get("posts");</p>
<p>	foreach ($query->result() as $row) {<br />
		$data["posts"][$row->id]["title"]	= $row->title;<br />
		$data["posts"][$row->id]["url"]		= $row->url_title;<br />
		$data["posts"][$row->id]["body"]	= $row->body;<br />
		$data["posts"][$row->id]["date"]	= $row->created_on<br />
	}<br />
}<br />
[/code]</p>
<p>Como podéis comprobar, lo primero que hacemos es ordenarlos por ID y luego almacenamos en el array $data["posts"] el contenido de las entradas. Sin embargo, tengo planteado guardar la fecha en timestamp de modo que necesitaremos convertirla a una <em>fecha humana</em>. Para esto usaremos el <em>helper</em> <a href="http://codeigniter.com/user_guide/helpers/date_helper.html">date</a> de <a href="http://www.codeigniter.com">CodeIgniter</a>. Para cargar un <em>helper</em> debemos usar la expresión: <em>$this->load->helper();</em>. En nuestro caso, crearemos un patrón para las fechas que lo almacenaremos en una variable:</p>
<p>Archivo: /application/controllers/blog.php<br />
[code lang="php"]<br />
function index()<br />
{<br />
	$query = $this->db->orderby("id","desc");<br />
	$query = $this->db->get("posts");</p>
<p>	foreach ($query->result() as $row) {<br />
		$data["posts"][$row->id]["title"]	= $row->title;<br />
		$data["posts"][$row->id]["url"]		= $row->url_title;<br />
		$data["posts"][$row->id]["body"]	= $row->body;<br />
		$data["posts"][$row->id]["date"]	= $row->created_on<br />
	}<br />
}<br />
[/code]</p>
<p>De este modo la fecha se mostrará <em>DD-MM-AAAA</em>. Con esto tenemos nuestro controlador <strong>index()</strong> listo. Solo nos falta añadir la salida, lo que llamaremos <strong>view</strong> y podemos encontrar en <strong>/application/views/</strong>. Si accedemos al directorio veremos el archivo <strong>welcome_message.php</strong>, le cambiaremos el nombre a <strong>blog_front.php</strong>. Lo abrimos con nuestro editor de textos y veremos que hay establecidos unos estilos (CSS), vamos a usar los mismos.</p>
<p>Lo primero que necesitamos saber es como cargar la vista desde nuestro controlador, para cargar la vista lo haremos con <em><a href="http://codeigniter.com/user_guide/general/views.html">$this->load->view();</a></em>. Otro tema de las vistas es añadirle nuestro contenido dinámico, para pasar el contenido tendremos que añadir una variable. Veamos como lo haríamos en nuestro ejemplo, siendo nuestro contenido el array <strong>$data</strong>.</p>
<p>Archivo: /application/controllers/blog.php<br />
[code lang="php"]<br />
function index()<br />
{<br />
	$query = $this->db->orderby("id","desc");<br />
	$query = $this->db->get("posts");</p>
<p>	$this->load->helper('date');<br />
	$datestring = "%d-%m-%Y";</p>
<p>	foreach ($query->result() as $row) {<br />
		$data["posts"][$row->id]["title"]	= $row->title;<br />
		$data["posts"][$row->id]["url"]		= $row->url_title;<br />
		$data["posts"][$row->id]["body"]	= $row->body;<br />
		$data["posts"][$row->id]["date"]	= date($datestring,$row->created_on);<br />
	}</p>
<p>	$this->load->view("blog_front",$data);<br />
}<br />
[/code]</p>
<p>Si ejecutáis este código, funcionará al 100%. Sin embargo, en nuestra vista, no vamos a ver más que el mensaje estático del <strong>welcome_message.php</strong> que hemos renombrado. Ahora es el momento de empezar a crear como se verá. Vamos a hacerlo muy sencillo para que veáis como trabajar con las variables que hemos pasado. Entre las dos etiquetas <em>body</em> del archivo <strong>blog_front.php</strong>, vamos a poner este código:</p>
<p>[code lang="php"]<br />
	<?php<br />
		foreach ($posts as $id => $post) {</p>
<p>			echo "<br />
<h1>".anchor($post["url"],"#".$id)." ".$post["title"]."</h1>
<p>";<br />
			echo "
<p>".$post["body"]."</p>
<p>";<br />
			echo "<code>".anchor($post["url"],"Enlace Permanente")." - ".$post["date"]."</code>";</p>
<p>		}<br />
	?></p>
<p>Pagina generada en {elapsed_time} segundos</p>
<p>[/code]</p>
<p>Como podéis recordar, nosotros teníamos una variable <strong>$data["posts"]</strong>, que realmente es un array <strong>$posts</strong> dentro del array <strong>$data</strong>. Dentro del array <strong>$posts</strong> tenemos un array para cada ID de entrada. Para eso usamos la función <a href="http://www.php.net/foreach">foreach</a>, para &#8220;dividir&#8221; estos arrays y generar el contenido para cada ID. En cuanto al contenido dentro del ID podéis fijaros en la siguiente expresión:</p>
<p>[code lang="php"]<br />
anchor($post["url"],"#".$id)<br />
[/code]</p>
<p><strong>anchor()</strong> es una función que forma parte del <em>helper</em> <a href="http://codeigniter.com/user_guide/helpers/url_helper.html">url</a> que hemos usado en <strong>autoload.php</strong>. En el primer termino de la función especificamos la dirección a donde debe apuntar el enlace y, en la segunda, el texto a mostrar.</p>
<p>Con esto que tenemos ya podemos mostrar las entradas correctamente, ahora vamos a crear la función <strong>show()</strong> en <strong>blog.php</strong> para ver una específica. Para empezar, clonaremos el <strong>blog_front.php</strong> y lo nombraremos <strong>blog_single.php</strong>. De momento lo dejaremos así. Volveremos al controlador <strong>blog.php</strong> y añadiremos el siguiente código:</p>
<p>[code lang="php"]<br />
function show()<br />
{<br />
	$url_title = $this->uri->segment(1, 0);</p>
<p>	if($url_title) {<br />
		$this->load->helper('date');<br />
		$datestring = "%d-%m-%Y";</p>
<p>		$query = $this->db->where("url_title",$url_title);<br />
		$query = $this->db->get('posts');</p>
<p>		foreach ($query->result() as $row) {<br />
			$data["post"]["id"]		= $row->id;<br />
			$data["post"]["title"]	= $row->title;<br />
			$data["post"]["url"]	= $row->url_title;<br />
			$data["post"]["body"]	= $row->body;<br />
			$data["post"]["date"]	= mdate($datestring,$row->created_on);<br />
		}</p>
<p>		$this->load->view('blog_single',$data);<br />
	} else {<br />
		redirect();<br />
	}<br />
}<br />
[/code]</p>
<p>Podemos ver que el código es prácticamente igual al de la función <strong>index()</strong>, pero este tiene una particularidad: muestra solo una entrada. Como podéis ver, al principio del código establecemos el <strong>$url_title</strong> con <em><a href="http://codeigniter.com/user_guide/libraries/uri.html">$this->uri->segment(1, 0);</a></em>. Esto nos permite recibir un segmento determinado de la URI, en nuestro caso, el primero. Acto seguido comprobamos si existe algo establecido y si existe empezamos a montar la estructura. Hemos añadido una cosa en la sentencia <strong>$query</strong>, hemos usado <em><a href="http://codeigniter.com/user_guide/database/active_record.html">$this->db->where(&#8220;url_title&#8221;,$url_title);</a></em>  para establecer que el campo <em>url_title</em> de la base de datos sea igual al <strong>$url_title</strong>.</p>
<p>Si todo esto no se cumpliera, hay un <a href="http://codeigniter.com/user_guide/helpers/url_helper.html">redirect()</a> que los envía al  principio de la aplicación.</p>
<p>También tenemos que cambiar el código de nuestra vista, ya que solo hemos duplicado el archivo. Entre las etiquetas <body> y </body> debería haber algo así:</p>
<p>Archivo: /application/views/blog_single.php<br />
[code lang="php"]</p>
<h1><?=anchor($post["url"],"#".$post["id"]);?> <?=$post["title"];?></h1>
<div style="text-align: right"><?=anchor("","Volver");?></div>
<p><?=$post["body"];?></p>
<p><code><?=anchor($post["url"],"Enlace Permanente");?> - <?=$post["date"];?></code></p>
<p>Page rendered in {elapsed_time} seconds</p>
<p>[/code]</p>
<p>Solo nos falta un truco que hemos usado en archivo <strong>routes.php</strong> que hemos hablado antes:</p>
<p>Archivo: /application/config/routes.php, Línea: 46-49<br />
[code lang="php"]<br />
$route["blog"]	= "blog";<br />
$route["add"]	= "blog/add";</p>
<p>$route[":any"]	= "blog/show";<br />
[/code]</p>
<h2>Añadir entradas</h2>
<p>Esta es la última parte de nuestra aplicación básica, como añadir una entrada a la base de datos. Es muy sencillo. Para empezar esta vez crearemos primero la vista. Copiamos uno de las vistas y cambiamos el nombre por <strong>blog_add.php</strong>. Vamos a usar otra de <em>helpers</em> de <a href="http://www.codeigniter.com">CodeIgniter</a> para crear el campo de formulario, <em><a href="http://codeigniter.com/user_guide/helpers/form_helper.html">form</a></em>. Entre las etiquetas <body> y </body> debería quedar algo tal que así:</p>
<p>Archivo: /application/view/blog_add.php<br />
[code lang="php"]</p>
<h1>A&ntilde;adir entrada</h1>
<div style="text-align: right"><?=anchor("","Volver");?></div>
<p>
	<?=form_open("add");?></p>
<p><label for="title">T&iacute;tulo:</label></p>
<input type="text" name="title" id="title" />
<p><label for="body">Contenido</label><br />
		<textarea name="body" id="body" cols="65" rows="15"></textarea></p>
<p><label for="password">Contrase&ntilde;a</label><br />
<input type="password" name="password" id="password" /></p>
<input type="submit" value="Enviar" />
<p>	<?=form_close();?>
</p>
<p><?=$this->validation->error_string; ?></p>
<p>Page rendered in {elapsed_time} seconds</p>
<p>[/code]</p>
<p>Lo único que os puede despistar aquí es el <em><a href="http://codeigniter.com/user_guide/libraries/validation.html">$this->validation->error_string;</a></em>, forma parte de una de las librerías de <a href="http://www.codeigniter.com">CodeIgniter</a> que vamos a usar en nuestro controlador para validar los campos. Se usa para que, si al validar el formulario hay un error, mostrar en el mismo archivo el error. Para poder añadir la entrada a nuestro controlador <strong>blog.php</strong> vamos a añadirle el siguiente código:</p>
<p>[code lang="php"]<br />
function add()<br />
{<br />
	$this->load->library("validation");<br />
	$this->load->helper("form");</p>
<p>	$admin_password = "prueba";</p>
<p>	$rules["title"] 	= "trim|required|min_length[3]|max_length[64]";<br />
	$rules["body"] 		= "trim|required|min_lenght[50]";<br />
	$rules["password"]	= "trim|required";<br />
	$this->validation->set_rules($rules);</p>
<p>	$fields["title"] 		= "t&iacute;tulo";<br />
	$fields["body"] 		= "contenido";<br />
	$fields["password"]		= "contrase&ntilde;a";<br />
	$this->validation->set_fields($fields);</p>
<p>	if ($this->validation->run() &#038;&#038; $this->input->post("password") == $admin_password) {	</p>
<p>		$this->load->helper("date");</p>
<p>		$insert = array(<br />
			"title" 		=> $this->input->post("title"),<br />
			"url_title"		=> url_title($this->input->post("title")),<br />
			"body" 			=> $this->input->post("body"),<br />
			"created_on" 	=> now()<br />
		);</p>
<p>		$this->db->insert("posts", $insert);</p>
<p>		redirect("");<br />
	}</p>
<p>	$this->load->view("blog_add");<br />
}<br />
[/code]</p>
<p>Como podéis ver, al principio del código, lo primero que hacemos es cargar la librería <em>validation</em> que hemos comentado antes. También cargamos el <em>helper</em>  <em>form</em> para crear el formulario. El sistema de &#8220;protección&#8221; es algo cutre, pero no era la misión de este artículo precisamente. Hemos establecido una contraseña que se validará cuando enviemos la entrada. Seguidamente establecemos, gracias a la librería <em>validation</em>, que es lo que los campos deben cumplir. Acto seguido, por si algo falla, establecemos unos nombres &#8220;humanos&#8221; a los campos.</p>
<p>Si todo lo anterior valida, y la contraseña que hemos puesto en el formulario es igual a la establecida en el campo <strong>$admin_password</strong>, podremos montar el array <strong>$insert</strong> que luego usaremos para añadir el contenido a la base de datos. Como podéis ver en el campo &#8220;url_title&#8221; usamos la función <strong>url_title()</strong> para crear unos vínculos más accesibles y no un simple id. Una vez hemos añadido el contenido redirigimos a la pagina principal. Si esto falla volvemos a cargar la vista <strong>blog_add.php</strong>.</p>
<h2>Conclusión</h2>
<p>Con todo esto ya podéis crear vuestra primera aplicación en <a href="http://www.codeigniter.com">CodeIgniter</a> usando bases de datos, varias vistas y usando <strong>routes.php</strong> para redirigir las URI. Es una base bastante fuerte para empezar a desarrollar algo encima. Próximamente enseñaré como hacer un sistema de usuarios bastante para evitar que la gente vea nuestra administración.</p>
<p>Descargar el ejemplo &#8220;Aplicación Básica (I), Creación de un Blog&#8221;: <a href="http://blog.ipalaus.es/dm.php?id=2">ipalaus-CodeIgniter_BlogExample_v1.rar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/codeigniter-aplicacion-basica-i-creacion-de-un-blog/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>CodeIgniter: Iniciación y configuración</title>
		<link>http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion</link>
		<comments>http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion#comments</comments>
		<pubDate>Sun, 09 Mar 2008 12:00:48 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion</guid>
		<description><![CDATA[CodeIgniter es uno de lo los muchos frameworks PHP que existen hoy en día. Para describir qué es un framework que mejor que una definición de la Wikipedia:
En el desarrollo de software, un framework es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, un framework <a href="http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codeigniter.com">CodeIgniter</a> es uno de lo los muchos <em>frameworks</em> PHP que existen hoy en día. Para describir qué es un <em>framework</em> que mejor que una definición de la <a href="http://es.wikipedia.org">Wikipedia</a>:</p>
<blockquote><p>En el <a href="http://es.wikipedia.org/wiki/Desarrollo_de_software">desarrollo de software</a>, un <strong><em>framework</em></strong> es una estructura de soporte definida en la cual otro proyecto de <a href="http://es.wikipedia.org/wiki/Software">software</a> puede ser organizado y desarrollado. Típicamente, un framework puede incluir soporte de <a href="http://es.wikipedia.org/wiki/Programa_%28computaci%C3%B3n%29">programas</a>, <a href="http://es.wikipedia.org/wiki/Biblioteca_%28programaci%C3%B3n%29">bibliotecas</a> y un <a href="http://es.wikipedia.org/wiki/Lenguaje_interpretado">lenguaje interpretado</a> entre otros software para ayudar a desarrollar y unir los diferentes componentes de un proyecto.</p></blockquote>
<p>Lo primero que necesitamos es <a href="http://www.codeigniter.com/download.php">descargar la última versión</a> de <a href="http://www.codeigniter.com">CodeIgniter</a>, nosotros trabajaremos con la versión <a href="http://www.codeigniter.com/download_files/CodeIgniter_1.6.1.zip">1.6.1</a> que es la última hoy en día. Una vez descargada descomprimimos el archivo <em>.rar</em> y veremos una estructura tal que así:</p>
<p>[code]<br />
/system/<br />
/user_guide/<br />
/index.php<br />
/license.txt<br />
[/code]</p>
<p>En la carpeta <strong>system</strong> hay todo el contenido del <em>framework</em>: <em>helpers</em>, librerías, <em>plugins</em>&#8230; Y lo más importante, la carpeta <strong>application</strong> que es realmente donde nuestra aplicación va a estar. Acto seguido tenemos el directorio <strong>user_guide</strong>, es la misma <a href="http://codeigniter.com/user_guide/">Guía del Usuario</a> (en inglés) que hay en la web de <a href="http://www.codeigniter.com">CodeIgniter</a>. A mi me parece una de las mejores guías que he leído nunca. El <strong>index.php</strong> gestiona la aplicación y el <strong>liecense.txt</strong> es la licencia, seria interesante que la leyerais.</p>
<h2>Requisitos</h2>
<ul>
<li>Servidor
<ul>
<li><a href="http://www.php.net">PHP</a> 4.3.2 o superior</li>
<li>Una base de datos es lo más común en este tipo de aplicaciones, hay soporte para: <a href="http://www.mysql.com">MySQL</a> (4.1+), MySQLi, <a href="http://www.microsoft.com/sql/default.mspx">MS SQL</a>, <a href="http://www.postgresql.org/">Postgre</a>, <a href="http://www.oracle.com/global/es/products/database/index.html">Oracle</a>, <a href="http://www.sqlite.org/">SQLite</a> y ODBC.</li>
</ul>
</li>
</ul>
<h2>Instalación</h2>
<p>La instalación de este <em>framework</em> es muy sencilla, y más si dejamos la configuración del mismo para otro apartado. Solo deberíamos subir los archivos a nuestro servidor (configurados) y ya estaría lista pero por motivos de seguridad, nosotros vamos a cambiar la jerarquía de los directorios. De un amigo, <a href="http://blog.daijo.org">Víctor Román</a>, aprendí que el acceso a la aplicación solo debería tenerla el servidor por lo que los directorios como <strong>application</strong> y <strong>system</strong> no deberían ser públicos. Para realizar esto usaremos un truco que, obviamente, podéis saltar si no os interesa o vuestro <em>hosting</em> no os lo permite.</p>
<p>Para empezar, necesitamos saber si podemos hacer una redirección de un dominio o subdominio, por ejemplo <em>blog.ipalaus.es</em>, a <em>/ipalaus_es/subdominios/blog/public_html</em>. Esto nos permitirá tener nuestros archivos del blog en un mismo directorio pero los públicos solo estarán en la carpeta <strong>public_html</strong>. Para empezar crearemos el directorio <strong>public_html</strong> en nuestra versión local y moveremos a esa misma carpeta el archivo <strong>index.php</strong> que teníamos en la raíz. Otra manía personal es poner los directorios <strong>application</strong> y <strong>system</strong> separados, porque podríamos, por ejemplo, usar siempre el mismo system para 3 o 4 aplicaciones y solo actualizar uno en vez de tener que hacerlo para cada uno&#8230; Así que movemos el <strong>application</strong> fuera de <strong>system</strong>. Debería quedarnos una jerarquía tal que así:</p>
<p>[code]<br />
/application/<br />
/public_html/<br />
/public_html/index.php<br />
/system/<br />
[/code]<br />
(<em>El license.txt y la carpeta user_guide han sido borrados</em>)</p>
<p>Ahora accedemos a editar el <strong>/public_html/index.php</strong> con cualquier editor de texto. Y editamos las siguientes lineas:</p>
<p>Archivo: /public_html/index.php, Línea: 26<br />
[code lang="php"]<br />
$system_folder = "../system";<br />
[/code]</p>
<p>Archivo: /public_html/index.php, Línea: 43<br />
[code lang="php"]<br />
$application_folder = "../application";<br />
[/code]</p>
<p>Y con esto ya tenemos configurada nuestra jerarquía. Ahora toca hacer una configuración básica del sistema.</p>
<h2>Configuración</h2>
<p>La configuración básica de nuestra aplicación se basará en la configuración de los archivos <strong>config.php </strong>y <strong>database.php</strong>, ambos en <strong>/application/config/</strong>. Para empezar, el <strong>config.php</strong>, lo abrimos con nuestro editor de textos favorito. Hay algunas cosas que simplemente las paso por alto, variables que no nos hacen falta para nada en una configuración básica.</p>
<p>Archivo: /application/config/config.php, Línea: 14<br />
[code lang="php"]<br />
$config['base_url']	= "http://blog.ipalaus.es/";<br />
[/code]</p>
<p>La variable <strong>$config['base_url']</strong> corresponde a la dirección que <a href="http://www.codeigniter.com">CodeIgniter</a> interpretará como base cuando tenga que incluir ficheros o similar. Es muy importante que sea correcta. Otros ejemplos podrían ser: <em>http://localhost/blog</em>, <em>http://www.ipalaus.es/</em>&#8230;</p>
<p>Archivo: /application/config/config.php, Línea: 26<br />
[code lang="php"]<br />
$config['index_page'] = "index.php";<br />
[/code]</p>
<p>Esta variable la usaremos en caso de que hayamos renombrado nuestro archivo <strong>index.php</strong> (en <strong>/public_html</strong>), cosa que dudo&#8230; De todos modos, si queremos usar <strong>mod_rewrite</strong> de <a href="http://www.apache.org">Apache</a> tendremos que dejar en blanco. En otra entrada explicaré como usar <strong>mod_rewrite</strong> en <a href="http://www.codeigniter.com">CodeIgniter</a>.</p>
<p>Archivo: /application/config/config.php, Línea: 57<br />
[code lang="php"]<br />
$config['url_suffix'] = "";<br />
[/code]</p>
<p>Hay gente que tiene la &#8220;manía&#8221; de ponerle sufijos a las direcciones web&#8230; Quizá para ocultar que realmente es PHP o poner una extensión significativa. Si pusiéramos algo tipo <strong>$config['url_suffix'] = &#8220;html&#8221;;</strong>, todas las direcciones nos saldrían tipo: <em>http://blog.ipalaus.es/entradas/codeigniter-configuracion-basica.html</em>, siendo este archivo, PHP.</p>
<p>Archivo: /application/config/config.php, Línea: 69<br />
[code lang="php"]<br />
$config['language']	= "spanish";<br />
[/code]</p>
<p>Desde la web de uno de los creadores de <a href="http://www.codeigniter.com">CodeIgniter</a>, <a href="http://www.derekallard.com/">Derek Allard</a>, podemos <a href="http://www.derekallard.com/img/post_resources/spanish_1_6_1.zip">descargar el archivo de idioma</a> <em>spanish</em>. Su instalación es tan sencilla como, descomprimir el fichero y mover su contenido a <strong>/application/language/spanish/</strong>. Dentro del directorio <em>spanish</em> deben estar los archivos .php y no ningún directorio más. Este archivo de lenguaje es, generalmente, para errores y mensajes relacionados con las librerías del <em>framework</em>.</p>
<p>Archivo: /application/config/config.php, Línea: 234-241<br />
[code lang="php"]<br />
$config['sess_cookie_name']	= 'blogipalaus_session';<br />
$config['sess_expiration']	= 7200;<br />
$config['sess_encrypt_cookie']	= FALSE;<br />
$config['sess_use_database']	= FALSE;<br />
$config['sess_table_name']	= 'ci_sessions';<br />
$config['sess_match_ip']	= FALSE;<br />
$config['sess_match_useragent']	= TRUE;<br />
$config['sess_time_to_update'] 	= 300;<br />
[/code]</p>
<p>Esta parte es usada solo si usamos sesiones en nuestras aplicaciones&#8230; Aunque si vamos a usar PHP para programar nuestro sitio web, lo más probable es que las usemos. Lo más característico de esta parte es poder usar la base de datos para gestionar las sesiones. Si lo quisiéramos, deberíamos cambiar la variable <strong>$config['sess_use_database']</strong> a <strong>TRUE</strong>.</p>
<p>Archivo: /application/config/config.php, Línea: 266<br />
[code lang="php"]<br />
$config['global_xss_filtering'] = TRUE;<br />
[/code]</p>
<p>Activaremos el filtro de XSS por si las moscas&#8230; Nunca se sabe <img src='http://blog.ipalaus.es/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>Ahora ya hemos terminado con el <strong>config.php</strong> y pasamos a la configuración de <strong>database.php</strong> que, obviamente, es más sencilla. En <a href="http://www.codeigniter.com">CodeIgniter</a> es posible usar varios perfiles de base de datos, por si tenemos una base de datos de desarrollo y una de producción o miles de configuraciones más.</p>
<p>Archivo: /application/config/config.php, Línea: 40-51<br />
[code lang="php"]<br />
$db['default']['hostname'] = "localhost";<br />
$db['default']['username'] = "ipalaus";<br />
$db['default']['password'] = "ejemplo";<br />
$db['default']['database'] = "blog";<br />
$db['default']['dbdriver'] = "mysql";<br />
$db['default']['dbprefix'] = "";<br />
$db['default']['pconnect'] = TRUE;<br />
$db['default']['db_debug'] = TRUE;<br />
$db['default']['cache_on'] = FALSE;<br />
$db['default']['cachedir'] = "";<br />
$db['default']['char_set'] = "utf8";<br />
$db['default']['dbcollat'] = "utf8_general_ci";<br />
[/code]</p>
<p>Como podéis comprobar es bien sencillo. Colocar el nombre de usuario, la base de datos, el <em>host</em>  de la misma&#8230; Si quisiéramos usar una base de datos diferente a MySQL deberíamos cambiar el <strong>$db['default']['dbdriver']</strong> por el deseado. A parte, es posible usar cache para las consultas MySQL&#8230; pero es algo bastante avanzado y que a usuarios de a pié no es muy necesario.</p>
<h2>Conclusión</h2>
<p>Espero que esta pequeña introducción a <a href="http://www.codeigniter.com">CodeIgniter</a>, a nivel <strong>muy básico</strong>, sirva a alguien para animarse a programar usando este <em>framework</em>. Pretendo continuar añadiendo configuraciones y pequeños programas y ejemplos para que podáis incrementar vuestro nivel de conocimiento en <a href="http://www.codeigniter.com">CodeIgniter</a>.</p>
<p>Descarga CodeIgniter en Español y semiconfigurado: <a href="http://blog.ipalaus.es/dm.php?id=1">CodeIgniter_1.6.1-spanish.rar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/codeigniter-iniciacion-y-configuracion/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>AJAX Login con jQuery y Code Igniter (PHP)</title>
		<link>http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php</link>
		<comments>http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php#comments</comments>
		<pubDate>Fri, 07 Mar 2008 22:23:37 +0000</pubDate>
		<dc:creator>Isern Palaus</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ajax login]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.ipalaus.es/?p=1</guid>
		<description><![CDATA[Nueva versión del tutorial: AJAX Login con jQuery y CodeIgniter – v2 + archivos
Uno de los principales problemas a la hora de empezar a programar es que muchos usuarios necesitamos donde mirar por tal de tener una base para empezar nuestro programa. No es lo mejor a la larga porque siempre terminamos basando nuestro trabajo <a href="http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php" class="more-link">Más &#62;</a>]]></description>
			<content:encoded><![CDATA[<p><strong>Nueva versión del tutorial: <a href="http://blog.ipalaus.es/ajax-login-con-jquery-y-codeigniter-v2-archivos">AJAX Login con jQuery y CodeIgniter – v2 + archivos</a></strong></p>
<p>Uno de los principales problemas a la hora de empezar a programar es que muchos usuarios necesitamos donde mirar por tal de tener una base para empezar nuestro programa. No es lo mejor a la larga porque siempre terminamos basando nuestro trabajo en otros proyectos, pero es una buena forma de empezar a programar. En este caso explicaré como hacer un sistema que valide a lo usuarios mediante un formulario AJAX y el <em>framework</em> PHP <a href="http://www.codeigniter.com">Code Igniter</a>.</p>
<p>Lo primero que necesitamos en este caso es jQuery que podemos descargarlo desde <a href="http://www.jquery.com">la web oficial</a>. jQuery es una librería de JavaScript que nos facilita muchísimo las cosas a la hora de programar. Obviamente también necesitaremos Code Igniter y me reservo el derecho en publicar una entrada futura sobre el mismo.</p>
<p>Para empezar lo haremos con una cosa sencilla, la base de datos que vamos a usar. Es bien simple: id, usuario, contraseña, correo y hora de &#8220;registro&#8221;.</p>
<p>[code lang="mysql"]<br />
CREATE TABLE `users` (<br />
`uid` int(10) NOT NULL auto_increment,<br />
`username` varchar(16) NOT NULL,<br />
`password` varchar(32) NOT NULL,<br />
`email` varchar(128) NOT NULL,<br />
`time` int(10) NOT NULL,<br />
PRIMARY KEY (`uid`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=latin1;</p>
<p>[/code]</p>
<p>Ahora es hora del controlador que llamaré <strong>user.php</strong>, este user.php se ocupará de las funciones básicas como son: comprobar el usuario y la desconexión del mismo.</p>
<p>[code lang="php"]<br />
load-&gt;model("user_model");<br />
$this-&gt;load-&gt;model("dalia_model");</p>
<p>$this-&gt;load-&gt;helper("security");<br />
$this-&gt;load-&gt;helper("form");<br />
}</p>
<p>/* Checks if the password that the user gives is equal at the DB ones */<br />
function _check_login($username) {<br />
$password = md5($this-&gt;validation-&gt;password);</p>
<p>if(!$this-&gt;user_model-&gt;checkUserLogin($username,$password,"users"))<br />
return FALSE;</p>
<p>return TRUE;<br />
}</p>
<p>function index() {<br />
$this-&gt;load-&gt;view("userLogin");<br />
}</p>
<p>function checkLogin()<br />
{<br />
$this-&gt;load-&gt;library('validation');<br />
$rules['username'] = 'trim|required|callback__check_login';<br />
$rules['password'] = 'trim|required';<br />
$this-&gt;validation-&gt;set_rules($rules);</p>
<p>$fields['username'] = 'username';<br />
$fields['password'] = 'password';<br />
$this-&gt;validation-&gt;set_fields($fields);</p>
<p>if ($this-&gt;validation-&gt;run()) {<br />
$username     = $this-&gt;validation-&gt;username;<br />
$uid         = $this-&gt;user_model-&gt;getUserId($username,"users");</p>
<p>$this-&gt;session-&gt;set_userdata("logged_in",$uid);</p>
<p>$output = '{ "success": "yes", "welcome": "Welcome" }';<br />
} else {<br />
$output = '{ "success": "no", "message": "This is not working" }';<br />
}</p>
<p>$output = str_replace("\r", "", $output);<br />
$output = str_replace("\n", "", $output);</p>
<p>echo $output;<br />
}</p>
<p>function logout()<br />
{<br />
$this-&gt;session-&gt;sess_destroy();<br />
redirect("");<br />
}</p>
<p>}</p>
<p>?&gt;<br />
[/code]</p>
<p>Para el login en AJAX vamos a tener que usar una comprobación en PHP que la llamaremos mediante jQuery. Es tan simple como saber si el usuario que intentamos acceder es válido o no lo es. Esta función de comprobar el usuario es checkLogin() y la analizamos desde el principio. En primer termino nos encontramos con:</p>
<p>[code lang="php"]<br />
$rules['username'] = 'trim|required|callback__check_login';<br />
[/code]</p>
<p>Que hace una llamada a la función _check_login(). Es la función que realmente comprueba en al base de datos si el usuario existe o no en la misma:</p>
<p>[code lang="php"]<br />
function _check_login($username) {<br />
$password = md5($this-&gt;validation-&gt;password);</p>
<p>if(!$this-&gt;user_model-&gt;checkUserLogin($username,$password,"users"))<br />
return FALSE;</p>
<p>return TRUE;<br />
}<br />
[/code]</p>
<p>Lo primero que hacemos es obtener la contraseña y codificarla en md5, ya que es como reside en la base de datos. Mediante el modelo <em>user_model</em>, que analizaremos más adelante, comprobamos con el nombre de usuario y contraseña que el usuario ha ingresado si coinciden con los que corresponden. Si esto es verdad, y coinciden, devolveremos un <em>TRUE</em>&#8230; del contrario, <em>FALSE</em>.</p>
<p>El modelo que usamos para comprobar el usuario, llamado <strong>user_model.php</strong>, es muy sencillo. El código es el siguiente:</p>
<p>[code lang="php"]<br />
db-&gt;where("username",$username);<br />
$query = $this-&gt;db-&gt;where("password",$password);<br />
$query = $this-&gt;db-&gt;limit(1,0);<br />
$query = $this-&gt;db-&gt;get($table);</p>
<p>if ($query-&gt;num_rows() == 0) {<br />
return NULL;<br />
}</p>
<p>return TRUE;<br />
}<br />
}<br />
?&gt;<br />
[/code]</p>
<p>Simplemente devuelve <em>TRUE</em> o <em>FALSE</em> dependiendo de si son válidos los datos que pasamos a la función.</p>
<p>Una vez tenemos casi todo el código, es hora de la <em>View</em> donde mostraremos el formulario en AJAX. Tengo las vistas separadas de modo que pueda cargar un <em>header</em>, el contenido y un <em>footer</em>. Mi formulario irá al <em>header</em> pero podría funcionar en cualquier otro sitio.</p>
<p>[code lang="php"]</p>
<p><!-- Extra Head Content --></p>
<p><!-- Extra Head Content --></p>
<div id="content">
<div id="header">
<div id="logo"><img src="&lt;?=base_url();?&gt;content/img/logo.png" alt=" " width="321px" height="111px" /></div>
<div id="login">session-&gt;userdata('logged_in')) {<br />
?&gt;</p>
<div id="logged">Welcome, you're already logged In.</div>
<div id="loginform">'userlogin'));?&gt;<br />
<label for="username">Username:</label></p>
<input id="username" class="logininput" name="username" type="text" />
<label for="password">Password:</label></p>
<input id="password" class="logininput" name="password" type="password" />
<input class="loginsubmit" type="submit" value="Login" /></div>
</div>
</div>
<div id="body">[/code]</p>
<p>Como comprobaciones en medio de la vista nos podemos dar cuenta de la siguiente:</p>
<p>[code lang="php"]<br />
if($this-&gt;session-&gt;userdata('logged_in')) {<br />
[/code]</p>
<p>Simplemente lo usamos para comprobar si es un usuario que ya ha logeado o si es un nuevo usuario. Si es nuevo, esta comprobación fallará y nos mostrará el nuevo formulario de login. No tiene ningún tipo de complicación. Lo que más puede generar dudas es el código de jQuery, que también es muy simple y son pocas lineas:</p>
<p>[code lang="javascript"]<br />
$(document).ready(<br />
function(){</p>
<p>$("#userlogin").ajaxForm({<br />
type: "POST",<br />
url: "/user/checkLogin",<br />
dataType: "json",<br />
data: "username="+$("#username").val()+"&amp;password;="+$("#password").val(),<br />
success: updateLogin<br />
});</p>
<p>}<br />
)<br />
[/code]</p>
<p>Para usar este tipo de llamada (ajaxForm) vamos a necesitar el plugin jQuery Form que podemos descargar desde la <a href="http://www.malsup.com/jquery/form/">página del autor</a>. Como curiosidad destacar el <em>success: updateLogin</em> que se encargará de actualizar nuestro formulario sin necesidad de cargar de nuevo la página. Esta es otra función a parte que llama una vez ha ejecutado el <em>script</em>. El código es el siguiente:</p>
<p>[code lang="javascript"]<br />
function updateLogin(data) {<br />
$('#logged').html('');<br />
$('#logged').hide();</p>
<p>$("#loginform").fadeOut("slow",<br />
function() {<br />
if (data.success == 'yes') {<br />
$('#logged').html(data.welcome).fadeIn("slow");<br />
}</p>
<p>if (data.success == 'no') {<br />
$('#loginerror').html(data.message).fadeIn("slow").fadeOut("slow",<br />
function() {<br />
$("#loginform").fadeIn("slow");<br />
}<br />
);<br />
}<br />
}<br />
);</p>
<p>}<br />
[/code]</p>
<p>Dependiendo de si el script PHP ha devuelto <em>success == yes</em> o <em>success == no</em>, ejecutará y actualizará de un modo o de otro. Los <em>data.welcome</em> o <em>data.message</em> son los mensajes que hemos enviado usando JSON a la hora de validar el script en el controlador <em>user.php</em>.</p>
<p>Bien, espero que con esto puedan crear su primer login en AJAX usando jQuery y PHP. Pronto, más sobre AJAX, PHP y CodeIgniter!</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.ipalaus.es/ajax-login-con-jquery-y-code-igniter-php/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>
