<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>David Rojas</title>
	
	<link>http://www.davidrojas.net</link>
	<description>Diseño y desarrollo web</description>
	<lastBuildDate>Sun, 07 Mar 2010 14:46:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DavidRojas" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="davidrojas" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Videotutorial: Cómo hacer un plugin jQuery – Menú acordeón multinivel</title>
		<link>http://www.davidrojas.net/index.php/jquery/screencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel/</link>
		<comments>http://www.davidrojas.net/index.php/jquery/screencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 18:39:11 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Screencasts]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=704</guid>
		<description><![CDATA[Respondiendo a la multitud de peticiones en los comentarios del artículo sobre cómo crear un menú en acordeón, aquí os muestro cómo hacer el mismo menú pero con soporte para varios niveles.
Este menú está basado en el anterior, y como apenas necesitaba un pequeño cambio en el javascript para hacerlo multinivel, he aprovechado para convertirlo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2010/03/jquery_accordion_screencast.png" alt="" title="jquery_accordion_screencast" width="163" height="104" class="derecha alignright size-full wp-image-718" />Respondiendo a la multitud de peticiones en los comentarios del artículo sobre <a href="http://www.davidrojas.net/index.php/diseno-web/menu-vertical-en-acordeon-con-css-y-jquery/" title="Menú vertical en acordeón con CSS y jQuery">cómo crear un menú en acordeón</a>, aquí os muestro cómo hacer el mismo menú pero con soporte para varios niveles.<br />
Este menú está basado en el anterior, y como apenas necesitaba un pequeño cambio en el javascript para hacerlo multinivel, he aprovechado para convertirlo en un plugin y enseñaros en un screencast cómo hacer vuestros propios plugins en jQuery.</p>
<p><em class="linkem"><a href='http://www.davidrojas.net/demos/acordeon_multinivel.html' title="Demo menú vertical en acordeón multinivel" target="_blank">Ver Demo menú acordeón multinivel</a></em><br />
<span id="more-704"></span></p>
<h3>Ver screencast (duración: 8:17)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgcqcaQA" type="application/x-shockwave-flash" width="490" height="397" allowscriptaccess="always" allowfullscreen="true"></embed>
</div>
<ul>
<li><a href="http://blip.tv/file/get/Davidrojas-7CmoHacerUnPluginJQueryMenAcordenMultinivel831.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (25 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-7CmoHacerUnPluginJQueryMenAcordenMultinivel409.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (13 MB)</a></li>
</ul>
<p></p>
<p>No olvidéis echarle un vistazo al resto de videos en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño, desarrollo web, jquery, codeigniter, CSS3">página de videotutoriales</a>, o suscribiros al <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=326994250" title="Enlace a videopodcast de David Rojas en iTunes">podcast de iTunes</a>.</p>
<h3>Cómo usarlo</h3>
<p>Para ver el HTML y CSS no tenéis mas que ver el código fuente del ejemplo de arriba, es bastante similar al del artículo anterior. En el html se añade un nivel más de anidamiento de listas, y en el CSS se le añade la regla <code>#menu ul li li{padding-left: 10px;}</code> para que los niveles inferiores tengan padding (esto podéis modificarlo como queráis).<br />
Para cargar el javascript, podéis copiar el código en la cabecera tal como está en el ejemplo, o bien <em class="linkem"><a href='http://www.davidrojas.net/wp-content/uploads/2010/03/jquery.accordion.js'>descargaros el archivo JS con el plugin</a></em> e insertarlo de esta manera:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery.accordion.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> charset<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;utf-8&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Después sólo os queda llamar al plugin:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> charset<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;utf-8&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#menu'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">accordion</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p></p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F&amp;title=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel&amp;bodytext=Respondiendo%20a%20la%20multitud%20de%20peticiones%20en%20los%20comentarios%20del%20art%C3%ADculo%20sobre%20c%C3%B3mo%20crear%20un%20men%C3%BA%20en%20acorde%C3%B3n%2C%20aqu%C3%AD%20os%20muestro%20c%C3%B3mo%20hacer%20el%20mismo%20men%C3%BA%20pero%20con%20soporte%20para%20varios%20niveles.%0D%0AEste%20men%C3%BA%20est%C3%A1%20basado%20en%20el%20anterior%2C%20y%20como%20apena" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F&amp;title=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel&amp;notes=Respondiendo%20a%20la%20multitud%20de%20peticiones%20en%20los%20comentarios%20del%20art%C3%ADculo%20sobre%20c%C3%B3mo%20crear%20un%20men%C3%BA%20en%20acorde%C3%B3n%2C%20aqu%C3%AD%20os%20muestro%20c%C3%B3mo%20hacer%20el%20mismo%20men%C3%BA%20pero%20con%20soporte%20para%20varios%20niveles.%0D%0AEste%20men%C3%BA%20est%C3%A1%20basado%20en%20el%20anterior%2C%20y%20como%20apena" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F&amp;t=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F&amp;title=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel&amp;annotation=Respondiendo%20a%20la%20multitud%20de%20peticiones%20en%20los%20comentarios%20del%20art%C3%ADculo%20sobre%20c%C3%B3mo%20crear%20un%20men%C3%BA%20en%20acorde%C3%B3n%2C%20aqu%C3%AD%20os%20muestro%20c%C3%B3mo%20hacer%20el%20mismo%20men%C3%BA%20pero%20con%20soporte%20para%20varios%20niveles.%0D%0AEste%20men%C3%BA%20est%C3%A1%20basado%20en%20el%20anterior%2C%20y%20como%20apena" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F&amp;title=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F&amp;t=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel&amp;s=Respondiendo%20a%20la%20multitud%20de%20peticiones%20en%20los%20comentarios%20del%20art%C3%ADculo%20sobre%20c%C3%B3mo%20crear%20un%20men%C3%BA%20en%20acorde%C3%B3n%2C%20aqu%C3%AD%20os%20muestro%20c%C3%B3mo%20hacer%20el%20mismo%20men%C3%BA%20pero%20con%20soporte%20para%20varios%20niveles.%0D%0AEste%20men%C3%BA%20est%C3%A1%20basado%20en%20el%20anterior%2C%20y%20como%20apena" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20C%C3%B3mo%20hacer%20un%20plugin%20jQuery%20-%20Men%C3%BA%20acorde%C3%B3n%20multinivel%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fjquery%2Fscreencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/swQxDkC41pQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/jquery/screencast-como-hacer-un-plugin-jquery-menu-acordeon-multinivel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>URLs amigables en CodeIgniter: Controlador ‘catch-all’</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/urls-amigables-en-codeigniter-controlador-catch-all/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/urls-amigables-en-codeigniter-controlador-catch-all/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 22:46:45 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=661</guid>
		<description><![CDATA[Supongamos que estamos programando un CMS en CodeIgniter para integrarlo en nuestros proyectos, y queremos generar urls del estilo www.dominio.com/titulo-de-la-pagina. Una manera de enfocarlo sería por ejemplo crear un controlador Paginas con un método cargar, al que se le pasará como parámetro el título de la página en cuestión. De esta manera se llamaría a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/09/codeigniter_logo.png" alt="" title="codeigniter_logo" width="163" height="104" class="derecha alignright size-full wp-image-360" />Supongamos que estamos programando un CMS en CodeIgniter para integrarlo en nuestros proyectos, y queremos generar urls del estilo <em>www.dominio.com/titulo-de-la-pagina</em>. Una manera de enfocarlo sería por ejemplo crear un controlador <em>Paginas</em> con un método <em>cargar</em>, al que se le pasará como parámetro el título de la página en cuestión. De esta manera se llamaría a la url <em>www.dominio.com/paginas/cargar/titulo-de-la-pagina</em>. Para eliminar <em>/paginas/cargar/</em> de la url editaríamos el fichero <a href="http://www.codeignitor.com/user_guide/general/routing.html" title="Rutas en CodeIgniter">routing.php</a>.</p>
<p>Esto supone un problema: si añadimos una regla genérica a las rutas para redirigir cualquier url al controlador <em>paginas/cargar</em>, no funcionaría el resto de controladores de nuestra aplicación. Deberíamos añadir una regla para cada página o bien para cada controlador que tengamos, con lo cual perdemos dinamismo y nos obliga a editar el fichero de rutas con cada cambio.<br />
<span id="more-661"></span></p>
<h3>Extendiendo la librería Router</h3>
<p>Lo que nos interesa es un controlador &#8216;catch-all&#8217;, que capture cualquier texto de la url y lo procese siempre que no exista otro controlador con ese nombre. Para ello vamos a extender la librería de rutas creando un archivo <em>MY_Router.php</em> y guardándolo en <em>application/libraries/</em>. El método estándar para extender librerías es crear un archivo con el mismo nombre añadiendo el prefijo <em>MY_</em>. Aquí tenéis el código de <em>MY_Router.php</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> MY_Router <span style="color: #000000; font-weight: bold;">extends</span> CI_Router <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> MY_Router<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">CI_Router</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> _validate_request<span style="color: #009900;">&#40;</span><span style="color: #000088;">$segments</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Comprueba que el controlador no existe</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span>APPPATH<span style="color: #339933;">.</span><span style="color: #0000ff;">'controllers/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$segments</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span>EXT<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$segments</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;paginas&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;cargar&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$segments</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> parent<span style="color: #339933;">::</span>_validate_request<span style="color: #009900;">&#40;</span><span style="color: #000088;">$segments</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Como veis lo que hacemos es extender el método <em>_validate_request</em> de la librería <em>Router</em>, que es el que procesa los segmentos de nuestra url. En él comprobamos si el nombre del primer segmento de la url corresponde a un controlador existente, si no es así añadimos al array de segmentos nuestro controlador y método <em>paginas</em> y <em>cargar</em> y llamamos al método <em>_validate_request</em> de la librería Router original pasándole estos parámetros.</p>
<p>Finalmente nos queda crear el controlador <em>Paginas.php</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Paginas <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        	parent<span style="color: #339933;">::</span><span style="color: #004000;">Controller</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> cargar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$title</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    	<span style="color: #339933;">.....</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Dentro de la función <em>cargar</em>, <code>$title</code> contendrá el título de nuestra url, es decir el primer segmento que le pasamos: <em>www.dominio.com/titulo-de-la-pagina</em>. En dicha función lo gestionaremos como nos interese, siendo lo más lógico utilizar ese título como identificador de nuestra página y buscarla en la base de datos para mostrarla.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F&amp;title=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27&amp;bodytext=Supongamos%20que%20estamos%20programando%20un%20CMS%20en%20CodeIgniter%20para%20integrarlo%20en%20nuestros%20proyectos%2C%20y%20queremos%20generar%20urls%20del%20estilo%20www.dominio.com%2Ftitulo-de-la-pagina.%20Una%20manera%20de%20enfocarlo%20ser%C3%ADa%20por%20ejemplo%20crear%20un%20controlador%20Paginas%20con%20un%20m%C3%A9" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F&amp;title=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27&amp;notes=Supongamos%20que%20estamos%20programando%20un%20CMS%20en%20CodeIgniter%20para%20integrarlo%20en%20nuestros%20proyectos%2C%20y%20queremos%20generar%20urls%20del%20estilo%20www.dominio.com%2Ftitulo-de-la-pagina.%20Una%20manera%20de%20enfocarlo%20ser%C3%ADa%20por%20ejemplo%20crear%20un%20controlador%20Paginas%20con%20un%20m%C3%A9" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F&amp;t=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F&amp;title=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27&amp;annotation=Supongamos%20que%20estamos%20programando%20un%20CMS%20en%20CodeIgniter%20para%20integrarlo%20en%20nuestros%20proyectos%2C%20y%20queremos%20generar%20urls%20del%20estilo%20www.dominio.com%2Ftitulo-de-la-pagina.%20Una%20manera%20de%20enfocarlo%20ser%C3%ADa%20por%20ejemplo%20crear%20un%20controlador%20Paginas%20con%20un%20m%C3%A9" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F&amp;title=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F&amp;t=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27&amp;s=Supongamos%20que%20estamos%20programando%20un%20CMS%20en%20CodeIgniter%20para%20integrarlo%20en%20nuestros%20proyectos%2C%20y%20queremos%20generar%20urls%20del%20estilo%20www.dominio.com%2Ftitulo-de-la-pagina.%20Una%20manera%20de%20enfocarlo%20ser%C3%ADa%20por%20ejemplo%20crear%20un%20controlador%20Paginas%20con%20un%20m%C3%A9" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=URLs%20amigables%20en%20CodeIgniter%3A%20Controlador%20%27catch-all%27%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Furls-amigables-en-codeigniter-controlador-catch-all%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/sLwuBq3B-Js" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/urls-amigables-en-codeigniter-controlador-catch-all/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Videotutorial: Mejora progresiva con CSS3</title>
		<link>http://www.davidrojas.net/index.php/diseno-web/screencast-mejora-progresiva-con-css3/</link>
		<comments>http://www.davidrojas.net/index.php/diseno-web/screencast-mejora-progresiva-con-css3/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 19:00:05 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=598</guid>
		<description><![CDATA[En este videotutorial voy a enseñaros algunas propiedades de CSS3 que nos servirán para mejorar visualmente nuestros diseños sin necesidad de usar imágenes o javascript, concretamente el manejo de sombras, gradientes y transformaciones sólo con CSS. Puesto que CSS3 aún no es un estándar, tendremos que usar las extensiones propietarias que implementan los navegadores más [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2010/01/css3_screencast.png" alt="" title="css3_screencast" width="163" height="104" class="derecha alignright size-full wp-image-640" />En este videotutorial voy a enseñaros algunas propiedades de <a href="http://www.css3.info/preview/" title="Información sobre CSS3 (inglés)">CSS3</a> que nos servirán para mejorar visualmente nuestros diseños sin necesidad de usar imágenes o javascript, concretamente el manejo de sombras, gradientes y transformaciones sólo con CSS. Puesto que <a href="http://www.w3.org/TR/css3-roadmap/" title="Roadmap de CSS3">CSS3 aún no es un estándar</a>, tendremos que usar las extensiones propietarias que implementan los navegadores más modernos, como las últimas versiones de Safari, Chrome y Firefox. Estas propiedades generalmente contiene el prefijo <code>-moz</code> para Firefox y <code>-webkit</code> para Safari y Chrome (webkit es que el motor utilizado en estos navegadores).</p>
<p><em class="linkem"><a href='http://www.davidrojas.net/demos/css3/' title="Demo mejora con CSS3" target="_blank">Ver Demo CSS3</a></em><br />
<span id="more-598"></span></p>
<h3>Ver screencast (duración: 15:49)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgb2DQwA" type="application/x-shockwave-flash" width="490" height="397" allowscriptaccess="always" allowfullscreen="true"></embed>
</div>
<ul>
<li><a href="http://blip.tv/file/get/Davidrojas-6MejoraProgresivaConCSS3843.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (46 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-6MejoraProgresivaConCSS3510.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (24 MB)</a></li>
</ul>
<p></p>
<p>Como siempre, podéis encontrar todos los screencasts en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño, desarrollo web, codeigniter, CSS3">página de videotutoriales</a>, o suscribiros al <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=326994250" title="Enlace a videopodcast de David Rojas en iTunes">podcast de iTunes</a>.</p>
<h3>HTML y CSS</h3>
<p>En el fuente del ejemplo de arriba tenéis código completo, pero voy a destacaros aquí las partes importantes. En el CSS:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">a.foto<span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> -webkit-gradient<span style="color: #00AA00;">&#40;</span>linear<span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">left</span> <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">,</span> from<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">rgb</span><span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #00AA00;">,</span> <span style="color: #cc66cc;">255</span><span style="color: #00AA00;">,</span> <span style="color: #cc66cc;">255</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> to<span style="color: #00AA00;">&#40;</span><span style="color: #993333;">rgb</span><span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">207</span><span style="color: #00AA00;">,</span> <span style="color: #cc66cc;">207</span><span style="color: #00AA00;">,</span> <span style="color: #cc66cc;">207</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -webkit-border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">8px</span><span style="color: #00AA00;">;</span>
  -moz-border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">8px</span><span style="color: #00AA00;">;</span>
  -webkit-box-shadow<span style="color: #00AA00;">:</span><span style="color: #933;">0px</span> <span style="color: #933;">0px</span> <span style="color: #933;">20px</span> <span style="color: #cc00cc;">#6F5F4C</span><span style="color: #00AA00;">;</span>
  -moz-box-shadow<span style="color: #00AA00;">:</span><span style="color: #933;">0px</span> <span style="color: #933;">0px</span> <span style="color: #933;">20px</span> <span style="color: #cc00cc;">#6F5F4C</span><span style="color: #00AA00;">;</span>
  -webkit-transition<span style="color: #3333ff;">:all </span>.3s linear<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
a<span style="color: #6666ff;">.foto</span><span style="color: #3333ff;">:hover</span><span style="color: #00AA00;">&#123;</span>
  -webkit-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>-5deg<span style="color: #00AA00;">&#41;</span> scale<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">1.08</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
  -moz-transform<span style="color: #00AA00;">:</span> rotate<span style="color: #00AA00;">&#40;</span>-5deg<span style="color: #00AA00;">&#41;</span> scale<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">1.08</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
a<span style="color: #6666ff;">.foto</span> span<span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #933;">2px</span> <span style="color: #cc00cc;">#9F886D</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Y el HTML:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;foto&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>
   <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;underworld_evolution.jpg&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Underworld&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
   <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span>&gt;</span>Texto descriptivo a pie de foto<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span></pre></div></div>

<h3>¿Cuándo utilizar estas propiedades?</h3>
<p>Es importante tener siempre presente que estas propiedades no son soportadas por todos los navegadores, por lo tanto tenemos que restringir su uso a mejoras estéticas, que no influyan en la maquetación o la usabilidad de la web. Los navegadores que no las soporten (como Internet Explorer) simplemente verán una versión un poco &#8220;descafeinada&#8221; de nuestro sitio.</p>
<p>También es interesante conocer todo el potencial de CSS3 que nos proporciona <a href="http://developer.apple.com/safari/articles/cssrecipes.html" title="trucos CSS para webkit">webkit</a> si estamos interesados en el desarrollo web móvil, ya que además de Safari y Chrome, los navegadores de iPhone, Android, las nuevas Blackberry, Nokia y Palm Pre están basados en webkit.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F&amp;title=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3&amp;bodytext=En%20este%20videotutorial%20voy%20a%20ense%C3%B1aros%20algunas%20propiedades%20de%20CSS3%20que%20nos%20servir%C3%A1n%20para%20mejorar%20visualmente%20nuestros%20dise%C3%B1os%20sin%20necesidad%20de%20usar%20im%C3%A1genes%20o%20javascript%2C%20concretamente%20el%20manejo%20de%20sombras%2C%20gradientes%20y%20transformaciones%20s%C3%B3lo%20con%20" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F&amp;title=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3&amp;notes=En%20este%20videotutorial%20voy%20a%20ense%C3%B1aros%20algunas%20propiedades%20de%20CSS3%20que%20nos%20servir%C3%A1n%20para%20mejorar%20visualmente%20nuestros%20dise%C3%B1os%20sin%20necesidad%20de%20usar%20im%C3%A1genes%20o%20javascript%2C%20concretamente%20el%20manejo%20de%20sombras%2C%20gradientes%20y%20transformaciones%20s%C3%B3lo%20con%20" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F&amp;t=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F&amp;title=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3&amp;annotation=En%20este%20videotutorial%20voy%20a%20ense%C3%B1aros%20algunas%20propiedades%20de%20CSS3%20que%20nos%20servir%C3%A1n%20para%20mejorar%20visualmente%20nuestros%20dise%C3%B1os%20sin%20necesidad%20de%20usar%20im%C3%A1genes%20o%20javascript%2C%20concretamente%20el%20manejo%20de%20sombras%2C%20gradientes%20y%20transformaciones%20s%C3%B3lo%20con%20" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F&amp;title=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F&amp;t=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3&amp;s=En%20este%20videotutorial%20voy%20a%20ense%C3%B1aros%20algunas%20propiedades%20de%20CSS3%20que%20nos%20servir%C3%A1n%20para%20mejorar%20visualmente%20nuestros%20dise%C3%B1os%20sin%20necesidad%20de%20usar%20im%C3%A1genes%20o%20javascript%2C%20concretamente%20el%20manejo%20de%20sombras%2C%20gradientes%20y%20transformaciones%20s%C3%B3lo%20con%20" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20Mejora%20progresiva%20con%20CSS3%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fscreencast-mejora-progresiva-con-css3%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/6NFhFSSUrVQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/diseno-web/screencast-mejora-progresiva-con-css3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Videotutorial: Hooks y creación de librerías con Codeigniter</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 16:47:17 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=582</guid>
		<description><![CDATA[A petición popular he creado un último screencast sobre CodeIgniter. En él os voy a enseñar un par de conceptos importantes para extender la funcionalidad del framework: los hooks y la creación de librerias. Como ejemplo crearé un sistema muy simple de autenticación, con una librería que contendrá una función para hacer login y otra [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/12/codeigniter_screencast_hook.png" alt="codeigniter_screencast_hook" title="codeigniter_screencast_hook" width="163" height="104" class="derecha alignright size-full wp-image-583" />A petición popular he creado un último screencast sobre CodeIgniter. En él os voy a enseñar un par de conceptos importantes para extender la funcionalidad del framework: los hooks y la creación de librerias. Como ejemplo crearé un sistema muy simple de autenticación, con una librería que contendrá una función para hacer login y otra para logout, y un hook que se disparará cada vez que se ejecute cualquier controlador. Los <a href="http://codeigniter.com/user_guide/general/hooks.html">hooks</a> son una utilidad que nos permite llamar a una función en determinadas fases de la ejecución del framework, por ejemplo antes o después de ejecutar cualquier controlador, el constructor de éste, etc.</p>
<p>Podéis encontrar el resto de screencasts en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño, desarrollo web y codeigniter">página de videotutoriales</a>, o suscribiros al <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=326994250" title="Enlace a videopodcast de David Rojas en iTunes">podcast de iTunes</a>.<br />
<span id="more-582"></span><br />
<em class="linkem"><a href='http://www.davidrojas.net/wp-content/uploads/2009/12/5_hooks_y_creacion_de_librerias_en_codeigniter_archivos.zip' title="Código ejemplo hooks y creación de librerias CodeIgniter, sistema de login básico">Descargar ficheros con el código del ejemplo.</a></em></p>
<h3>Ver screencast (duración: 24:02)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgbrSYQA" type="application/x-shockwave-flash" width="490" height="397" allowscriptaccess="always" allowfullscreen="true"></embed>
</div>
<ul>
<li><a href="http://blip.tv/file/get/Davidrojas-5HooksYCreacinDeLibrerasConCodeIgniter793.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (67 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-5HooksYCreacinDeLibrerasConCodeIgniter290.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (35 MB)</a></li>
</ul>
<p></p>
<p>&raquo; Advertencia: El audio está un poco desincronizado con el vídeo. En algunas partes apenas se nota, pero en otras sí, sobre todo por el final. De todas formas creo que se entienden bastante bien los conceptos, y como es un video largo no he creído necesario volverlo a grabar.</p>
<p>Y con este sí finalizo la serie de videos sobre CodeIgniter. Mi próximo screencast será sobre algo relacionado con CSS y frontend, así que os recomiendo que os sigáis pasando por aquí a todos los que estéis interesados en todos los aspectos del desarrollo web en general y no sólo en la programación pura de backend.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F&amp;title=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter&amp;bodytext=A%20petici%C3%B3n%20popular%20he%20creado%20un%20%C3%BAltimo%20screencast%20sobre%20CodeIgniter.%20En%20%C3%A9l%20os%20voy%20a%20ense%C3%B1ar%20un%20par%20de%20conceptos%20importantes%20para%20extender%20la%20funcionalidad%20del%20framework%3A%20los%20hooks%20y%20la%20creaci%C3%B3n%20de%20librerias.%20Como%20ejemplo%20crear%C3%A9%20un%20sistema%20muy%20s" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F&amp;title=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter&amp;notes=A%20petici%C3%B3n%20popular%20he%20creado%20un%20%C3%BAltimo%20screencast%20sobre%20CodeIgniter.%20En%20%C3%A9l%20os%20voy%20a%20ense%C3%B1ar%20un%20par%20de%20conceptos%20importantes%20para%20extender%20la%20funcionalidad%20del%20framework%3A%20los%20hooks%20y%20la%20creaci%C3%B3n%20de%20librerias.%20Como%20ejemplo%20crear%C3%A9%20un%20sistema%20muy%20s" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F&amp;t=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F&amp;title=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter&amp;annotation=A%20petici%C3%B3n%20popular%20he%20creado%20un%20%C3%BAltimo%20screencast%20sobre%20CodeIgniter.%20En%20%C3%A9l%20os%20voy%20a%20ense%C3%B1ar%20un%20par%20de%20conceptos%20importantes%20para%20extender%20la%20funcionalidad%20del%20framework%3A%20los%20hooks%20y%20la%20creaci%C3%B3n%20de%20librerias.%20Como%20ejemplo%20crear%C3%A9%20un%20sistema%20muy%20s" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F&amp;title=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F&amp;t=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter&amp;s=A%20petici%C3%B3n%20popular%20he%20creado%20un%20%C3%BAltimo%20screencast%20sobre%20CodeIgniter.%20En%20%C3%A9l%20os%20voy%20a%20ense%C3%B1ar%20un%20par%20de%20conceptos%20importantes%20para%20extender%20la%20funcionalidad%20del%20framework%3A%20los%20hooks%20y%20la%20creaci%C3%B3n%20de%20librerias.%20Como%20ejemplo%20crear%C3%A9%20un%20sistema%20muy%20s" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20Hooks%20y%20creaci%C3%B3n%20de%20librer%C3%ADas%20con%20Codeigniter%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/lDnQfdd3UuA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-hooks-y-creacion-de-librerias-con-codeigniter/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Fuentes en la web con @font-face</title>
		<link>http://www.davidrojas.net/index.php/diseno-web/fuentes-en-la-web-con-font-face/</link>
		<comments>http://www.davidrojas.net/index.php/diseno-web/fuentes-en-la-web-con-font-face/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 20:59:19 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Diseño Web]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=541</guid>
		<description><![CDATA[Una de las grandes limitaciones que siempre hemos tenido diseñando en la web ha sido la incapacidad de poder usar fuentes mas allá de las que el usuario tiene instaladas por defecto en su sistema. Por ello las opciones que teníamos era utilizar imágenes (sólo recomendable para encabezados y menús) y las clásicas fuentes Arial, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/12/font-face_img.png" alt="" title="font-face_img" width="163" height="104" class="derecha alignright size-full wp-image-563" />Una de las grandes limitaciones que siempre hemos tenido diseñando en la web ha sido la incapacidad de poder usar fuentes mas allá de las que el usuario tiene instaladas por defecto en su sistema. Por ello las opciones que teníamos era utilizar imágenes (sólo recomendable para encabezados y menús) y las clásicas fuentes Arial, Verdana, Georgia, &#8230;etc., las llamadas fuentes &#8220;web-safe&#8221; que sabemos se encuentran en la mayoría de los sistemas. Recientemente han salido herramientas como Cufón y Typekit, que nos permiten mostrar fuentes usando javascript, pero estos sistemas no son la solución más óptima.</p>
<p>Hoy día gracias al avance de los navegadores podemos usar cualquier fuente utilizando la propiedad CSS <em>@font-face</em>, siempre que tengamos en cuenta y respetemos la licencia de cada una, que debe permitir empotrado mediante @font-face. Podemos ver un listado de fuentes y licencias que permiten este uso en <a href="http://webfonts.info/wiki/index.php?title=Fonts_available_for_%40font-face_embedding" title ="Fonts availabe for @font-face embedding">el wiki de webfonts.info</a>.<br />
A continuación os explicaré cómo utilizar @font-face para poder usar fuentes de verdad en la web.<br />
<span id="more-541"></span></p>
<h3>La forma fácil</h3>
<p>La forma más sencilla es utilizar el <a href="http://www.fontsquirrel.com/fontface/generator">generador de fontsquirrel</a>. Simplemente tenemos que subir la fuente que queramos utilizar, marcar los formatos EOT, SVG y WOFF, y nos descargaremos un paquete que contiene nuestra fuente en los distintos formatos y un ejemplo con el código CSS para hacerlo funcionar.</p>
<h3>Explicación del CSS. ¿Por qué tantos formatos?</h3>
<p>Echemos un vistazo al css para poder usar la fuente Quicksand Light:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #a1a100;">@font-face {</span>
   <span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'QuicksandLight'</span><span style="color: #00AA00;">;</span>
   src<span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'Quicksand_Light.eot'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
   src<span style="color: #00AA00;">:</span> local<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'Quicksand Light'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> local<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'QuicksandLight-Regular'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> 
   <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'Quicksand_Light.woff'</span><span style="color: #00AA00;">&#41;</span> format<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'woff'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> 
   <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'Quicksand_Light.otf'</span><span style="color: #00AA00;">&#41;</span> format<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'opentype'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span> 
   <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'Quicksand_Light.svg#QuicksandLight-Regular'</span><span style="color: #00AA00;">&#41;</span> format<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'svg'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
h1<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span> <span style="color: #933;">60px</span>/<span style="color: #933;">68px</span> <span style="color: #ff0000;">'QuicksandLight'</span><span style="color: #00AA00;">,</span> Arial<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>En primer lugar definimos el nombre de la fuente con <em>font-family</em>. Este nombre es el que usaremos cuando asignemos dicha fuente mediante la propiedad </em>font</em>, en este ejemplo al <em>h1</em>. Después se debe poner inmediatamente el src con la versión <em>EOT</em>, que es el formato utilizado por Internet Explorer. De esta manera IE descargará y utilizará este formato, y no seguirá buscando los siguientes ya que no reconoce el valor <em>local()</em> del segundo src.<br />
El resto de navegadores ignorarán el EOT y probarán los siguientes formatos hasta que encuentren uno que funcione en ellos. WOFF es el nuevo formato que será soportado por Firefox 3.6 y apunta a ser el futuro en los formatos de fuentes empotradas, así que no está de mas incluirlo. Firefox 3.5, Safari, Opera y Chrome 4 usarán el fichero OTF o TTF.<br />
El formato SVG es necesario para versiones antiguas de Chrome y Safari para iPhone.<br />
Después solo nos queda añadir la propiedad <em>font</em> a los elementos que queramos, sin olvidarnos de añadir otras fuentes web-safe por si algo falla (en este caso Arial y sans-serif).</p>
<p>Aquí podemos ver una <a href="http://www.fontsquirrel.com/fontfacedemo/Quicksand" title="Fuente Quicksand usando @font-face">una demo utilizando la fuente Quicksand</a>.</p>
<p>Finalmente, si no queremos pasar por el proceso de buscar una fuente con licencia empotrable y convertirla, podemos utilizar los <a href="http://www.fontsquirrel.com/fontface" title="Kits font-face">kits de fontsquirrel</a>, entre los que tenemos una amplia selección de fuentes preparadas para descargar en paquetes que contienen todos los formatos necesarios, con un fichero html y css de ejemplo de uso.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F&amp;title=Fuentes%20en%20la%20web%20con%20%40font-face&amp;bodytext=Una%20de%20las%20grandes%20limitaciones%20que%20siempre%20hemos%20tenido%20dise%C3%B1ando%20en%20la%20web%20ha%20sido%20la%20incapacidad%20de%20poder%20usar%20fuentes%20mas%20all%C3%A1%20de%20las%20que%20el%20usuario%20tiene%20instaladas%20por%20defecto%20en%20su%20sistema.%20Por%20ello%20las%20opciones%20que%20ten%C3%ADamos%20era%20utilizar%20im" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F&amp;title=Fuentes%20en%20la%20web%20con%20%40font-face&amp;notes=Una%20de%20las%20grandes%20limitaciones%20que%20siempre%20hemos%20tenido%20dise%C3%B1ando%20en%20la%20web%20ha%20sido%20la%20incapacidad%20de%20poder%20usar%20fuentes%20mas%20all%C3%A1%20de%20las%20que%20el%20usuario%20tiene%20instaladas%20por%20defecto%20en%20su%20sistema.%20Por%20ello%20las%20opciones%20que%20ten%C3%ADamos%20era%20utilizar%20im" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F&amp;t=Fuentes%20en%20la%20web%20con%20%40font-face" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F&amp;title=Fuentes%20en%20la%20web%20con%20%40font-face&amp;annotation=Una%20de%20las%20grandes%20limitaciones%20que%20siempre%20hemos%20tenido%20dise%C3%B1ando%20en%20la%20web%20ha%20sido%20la%20incapacidad%20de%20poder%20usar%20fuentes%20mas%20all%C3%A1%20de%20las%20que%20el%20usuario%20tiene%20instaladas%20por%20defecto%20en%20su%20sistema.%20Por%20ello%20las%20opciones%20que%20ten%C3%ADamos%20era%20utilizar%20im" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Fuentes%20en%20la%20web%20con%20%40font-face&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F&amp;title=Fuentes%20en%20la%20web%20con%20%40font-face" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F&amp;t=Fuentes%20en%20la%20web%20con%20%40font-face&amp;s=Una%20de%20las%20grandes%20limitaciones%20que%20siempre%20hemos%20tenido%20dise%C3%B1ando%20en%20la%20web%20ha%20sido%20la%20incapacidad%20de%20poder%20usar%20fuentes%20mas%20all%C3%A1%20de%20las%20que%20el%20usuario%20tiene%20instaladas%20por%20defecto%20en%20su%20sistema.%20Por%20ello%20las%20opciones%20que%20ten%C3%ADamos%20era%20utilizar%20im" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Fuentes%20en%20la%20web%20con%20%40font-face%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Ffuentes-en-la-web-con-font-face%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/F37bh3N9Q0w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/diseno-web/fuentes-en-la-web-con-font-face/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Manejo de errores en MySQL con CodeIgniter</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/manejo-de-errores-en-la-base-de-datos-con-codeigniter/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/manejo-de-errores-en-la-base-de-datos-con-codeigniter/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 08:24:11 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=503</guid>
		<description><![CDATA[Cuando tenemos un error conectando o realizando operaciones con la base de datos (MySQL) usando CodeIgniter, lo normal es que el sistema nos muestre un mensaje por defecto con el código, descripción y query ejecutado, tal que así:

Esta página de error se puede personalizar editando la plantilla /errors/error_db.php en nuestra carpeta de la aplicación. El [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/12/codeigniter_mysql_errors.png" alt="codeigniter_mysql_errors" title="codeigniter_mysql_errors" width="163" height="104" class="derecha alignright size-full wp-image-530" />Cuando tenemos un error conectando o realizando operaciones con la base de datos (MySQL) usando CodeIgniter, lo normal es que el sistema nos muestre un mensaje por defecto con el código, descripción y query ejecutado, tal que así:</p>
<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/12/error_db_ci.png" alt="error_db_ci" title="error_db_ci" width="280" height="144" class="alignright size-full wp-image-533" /></p>
<p>Esta página de error se puede personalizar editando la plantilla <em>/errors/error_db.php</em> en nuestra carpeta de la aplicación. El problema es que este mensaje se mostrará en lugar de nuestra vista o en medio de ella, y además se mostrará siempre a menos que desactivemos la opción de debug de la base de datos, y si lo hacemos nuestra aplicación fallará silenciosamente, no tenemos forma de capturar este error y realizar las operaciones que nos convengan, lo cual sería especialmente útil cuando hacemos peticiones ajax.</p>
<p>Para solucionar esto existen dos métodos no documentados en la clase DB que nos permite capturar el mensaje de error y el número:<br />
<em class="bold">$this->db->_error_message()</em> y <em class="bold">$this->db->_error_number()</em>.<br />
<span id="more-503"></span></p>
<p>Estos métodos son envoltorios de las funciones <em>mysql_error()</em> y <em>mysql_errno()</em> de php. En la documentación de mysql podemos encontrar el <a href="http://dev.mysql.com/doc/refman/5.1/en/error-handling.html" title="listado errores mysql">listado de códigos de errores</a> que nos devuelve <em>mysql_errno()</em> (y por lo tanto <em>$this->db->_error_number()</em>), por si nos interesa realizar distintas operaciones según el tipo de error ocurrido.</p>
<p>Como ejemplo os mostraré una forma sencilla de gestionar estos mensajes de error:</p>
<p>En primer lugar debemos desactivar el debug de la base de datos poniendo la opción <em class="bold">$db['default']['db_debug']</em> a <em class="bold">FALSE</em> en el archivo <em>/config/database.php</em>.</p>
<p>Después en nuestro método del modelo, tras el query a la BD podemos poner:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'error'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span>_error_message<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$data</span><span style="color: #339933;">;</span></pre></div></div>

<p>En el controlador recogeremos esta variable devuelta y la pasaremos a la vista, y en la parte de la vista que nos interese pondremos:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;error&quot;&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$error</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>De la misma manera podemos manejar los errores vía ajax devolviendo esta variable codificada con <em>json</em> en nuestro controlador y gestionándola en el javascript de la vista.</p>
<p>Finalmente, ante la avalancha de peticiones espero volver en breve con un último videotutorial sobre CodeIgniter.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F&amp;title=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter&amp;bodytext=Cuando%20tenemos%20un%20error%20conectando%20o%20realizando%20operaciones%20con%20la%20base%20de%20datos%20%28MySQL%29%20usando%20CodeIgniter%2C%20lo%20normal%20es%20que%20el%20sistema%20nos%20muestre%20un%20mensaje%20por%20defecto%20con%20el%20c%C3%B3digo%2C%20descripci%C3%B3n%20y%20query%20ejecutado%2C%20tal%20que%20as%C3%AD%3A%0D%0A%0D%0A%0D%0A%0D%0AEsta%20p%C3%A1g" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F&amp;title=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter&amp;notes=Cuando%20tenemos%20un%20error%20conectando%20o%20realizando%20operaciones%20con%20la%20base%20de%20datos%20%28MySQL%29%20usando%20CodeIgniter%2C%20lo%20normal%20es%20que%20el%20sistema%20nos%20muestre%20un%20mensaje%20por%20defecto%20con%20el%20c%C3%B3digo%2C%20descripci%C3%B3n%20y%20query%20ejecutado%2C%20tal%20que%20as%C3%AD%3A%0D%0A%0D%0A%0D%0A%0D%0AEsta%20p%C3%A1g" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F&amp;t=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F&amp;title=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter&amp;annotation=Cuando%20tenemos%20un%20error%20conectando%20o%20realizando%20operaciones%20con%20la%20base%20de%20datos%20%28MySQL%29%20usando%20CodeIgniter%2C%20lo%20normal%20es%20que%20el%20sistema%20nos%20muestre%20un%20mensaje%20por%20defecto%20con%20el%20c%C3%B3digo%2C%20descripci%C3%B3n%20y%20query%20ejecutado%2C%20tal%20que%20as%C3%AD%3A%0D%0A%0D%0A%0D%0A%0D%0AEsta%20p%C3%A1g" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F&amp;title=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F&amp;t=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter&amp;s=Cuando%20tenemos%20un%20error%20conectando%20o%20realizando%20operaciones%20con%20la%20base%20de%20datos%20%28MySQL%29%20usando%20CodeIgniter%2C%20lo%20normal%20es%20que%20el%20sistema%20nos%20muestre%20un%20mensaje%20por%20defecto%20con%20el%20c%C3%B3digo%2C%20descripci%C3%B3n%20y%20query%20ejecutado%2C%20tal%20que%20as%C3%AD%3A%0D%0A%0D%0A%0D%0A%0D%0AEsta%20p%C3%A1g" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Manejo%20de%20errores%20en%20MySQL%20con%20CodeIgniter%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fmanejo-de-errores-en-la-base-de-datos-con-codeigniter%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/TqpOs0mV95E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/manejo-de-errores-en-la-base-de-datos-con-codeigniter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Videotutorial: CRUD con scaffolding, rendimiento y unit testing en Codeigniter</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/screencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/screencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 17:31:51 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=466</guid>
		<description><![CDATA[Para terminar la serie de screencasts sobre CodeIgniter voy a mostraros algunos componentes interesantes que tiene el framework, como el scaffolding para hacer CRUD y las librerías benchmark y unit testing. Estas librerías son muy útiles cuando desarrollemos aplicaciones complejas en las que necesitemos medir el rendimiento y hacer pruebas unitarias, y nos pueden ayudar [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/08/codeigniter_screencast.png" alt="codeigniter_screencast" title="codeigniter_screencast" width="163" height="104" class="derecha alignright size-full wp-image-261" />Para terminar la serie de screencasts sobre CodeIgniter voy a mostraros algunos componentes interesantes que tiene el framework, como el scaffolding para hacer CRUD y las librerías <a href="http://codeigniter.com/user_guide/libraries/benchmark.html" title="User Guide: Benchmark">benchmark</a> y <a href="http://codeigniter.com/user_guide/libraries/unit_testing.html" title="User Guide: Unit Testing">unit testing</a>. Estas librerías son muy útiles cuando desarrollemos aplicaciones complejas en las que necesitemos medir el rendimiento y hacer pruebas unitarias, y nos pueden ayudar a depurar errores y encontrar bloques que necesitemos optimizar. Sobre el scaffolding, es conveniente utilizarlo sólo en la fase de desarrollo, ya que el uso de la palabra secreta no proporciona la seguridad suficiente para poder usarlo en producción.</p>
<p>Podéis encontrar el resto de screencasts en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño, desarrollo web y codeigniter">página de videotutoriales</a>, o suscribiros al <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=326994250" title="Enlace a videopodcast de David Rojas en iTunes">podcast de iTunes</a>.<br />
<span id="more-466"></span><br />
<em class="linkem"><a href="http://www.davidrojas.net/wp-content/uploads/2009/11/4_crud_rendimiento_unit_test_codeigniter_archivos.zip" title="Código ejemplo controlador scaffolding, benchmark, unit test">Descargar ficheros con el código del ejemplo.</a></em></p>
<h3>Ver screencast (duración: 11:29)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgbHXdwA" type="application/x-shockwave-flash" width="490" height="397" allowscriptaccess="always" allowfullscreen="true"></embed>
</div>
<ul>
<li><a href="http://blip.tv/file/get/Davidrojas-4CRUDConScaffoldingRendimientoYUnitTestingConCodeIgnite281.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (32 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-4CRUDConScaffoldingRendimientoYUnitTestingConCodeIgnite191.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (17 MB)</a></li>
</ul>
<p></p>
<p>Por último recomendaros que os paséis por el <a href="http://aliviana.com/foro/">foro de CodeIgniter en Español</a>, donde podréis encontrar multitud de recursos sobre este framework.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F&amp;title=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter&amp;bodytext=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20CodeIgniter%20voy%20a%20mostraros%20algunos%20componentes%20interesantes%20que%20tiene%20el%20framework%2C%20como%20el%20scaffolding%20para%20hacer%20CRUD%20y%20las%20librer%C3%ADas%20benchmark%20y%20unit%20testing.%20Estas%20librer%C3%ADas%20son%20muy%20%C3%BAtiles%20cuando%20de" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F&amp;title=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter&amp;notes=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20CodeIgniter%20voy%20a%20mostraros%20algunos%20componentes%20interesantes%20que%20tiene%20el%20framework%2C%20como%20el%20scaffolding%20para%20hacer%20CRUD%20y%20las%20librer%C3%ADas%20benchmark%20y%20unit%20testing.%20Estas%20librer%C3%ADas%20son%20muy%20%C3%BAtiles%20cuando%20de" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F&amp;t=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F&amp;title=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter&amp;annotation=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20CodeIgniter%20voy%20a%20mostraros%20algunos%20componentes%20interesantes%20que%20tiene%20el%20framework%2C%20como%20el%20scaffolding%20para%20hacer%20CRUD%20y%20las%20librer%C3%ADas%20benchmark%20y%20unit%20testing.%20Estas%20librer%C3%ADas%20son%20muy%20%C3%BAtiles%20cuando%20de" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F&amp;title=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F&amp;t=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter&amp;s=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20CodeIgniter%20voy%20a%20mostraros%20algunos%20componentes%20interesantes%20que%20tiene%20el%20framework%2C%20como%20el%20scaffolding%20para%20hacer%20CRUD%20y%20las%20librer%C3%ADas%20benchmark%20y%20unit%20testing.%20Estas%20librer%C3%ADas%20son%20muy%20%C3%BAtiles%20cuando%20de" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20CRUD%20con%20scaffolding%2C%20rendimiento%20y%20unit%20testing%20en%20Codeigniter%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/O2mDrXlyQHc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/screencast-crud-con-scaffolding-rendimiento-y-unit-testing-en-codeigniter/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Menú vertical en acordeón con CSS y jquery</title>
		<link>http://www.davidrojas.net/index.php/diseno-web/menu-vertical-en-acordeon-con-css-y-jquery/</link>
		<comments>http://www.davidrojas.net/index.php/diseno-web/menu-vertical-en-acordeon-con-css-y-jquery/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 11:16:00 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=396</guid>
		<description><![CDATA[A pesar del buen feedback recibido sobre mi serie de tutoriales de CodeIgniter, los artículos sobre menús animados con CSS y javascript siguen siendo los más populares en este sitio, y parece que son bastante útiles para la gente que está empezando. Por ello hoy me tomo un pequeño respiro de los videotutoriales y voy [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/10/menu_acordeon.png" alt="menu_acordeon" title="menu_acordeon" width="156" height="120" class="derecha alignright size-full wp-image-430" />A pesar del buen <em>feedback</em> recibido sobre mi serie de <a href="http://www.davidrojas.net/index.php/category/codeigniter/">tutoriales de CodeIgniter</a>, los artículos sobre <a href="http://www.davidrojas.net/index.php/diseno-web/menu-animado-desplegable-con-css-y-jquery/">menús animados con CSS y javascript</a> siguen siendo los más populares en este sitio, y parece que son bastante útiles para la gente que está empezando. Por ello hoy me tomo un pequeño respiro de los videotutoriales y voy a enseñaros cómo hacer el clásico menú vertical en acordeón con CSS y jQuery.<br />
El resultado lo puedes ver aquí: <em class="linkem"><a href="http://www.davidrojas.net/demos/menu_acordeon.html" target="_blank">Ver demo</a></em><br />
<span id="more-396"></span></p>
<h3>HTML</h3>
<p>Para el html del menú vamos a emplear la estructura típica de listas anidadas. La última entrada será un enlace directo, sin submenú:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;menu&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Menu 1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 4<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Menu 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 4<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Menu 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Submenu 4<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span>&gt;</span>Menu sin submenu<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span></pre></div></div>

<h3>Añadiendo el CSS</h3>
<p>Para dar estilo al menú tenemos primero que quitar los estilos por defecto de las listas, eliminar los bullets y márgenes y añadirle <em>display:block</em> para que queden perfectamente alineados los elementos uno debajo de otro. Después tenemos que ocultar con <em>display:none</em> los submenús para que aparezcan todos colapsados por defecto. Vamos a añadir algunas extensiones de CSS3 para mejorar visualmente nuestro menú. Estás extensiones sólo serán visibles en navegadores modernos (Firefox, Chrome y Safari), pero no en Internet Explorer. De esta manera podemos añadir bordes redondeados y sombras al menú y al texto. La propiedad <em>-webkit-transition</em> solo funciona en navegadores basados en webkit (Safari y Chrome), y la utilizaremos para mejor el hover añadiendo un fundido en el color del texto y el background. En los navegadores que no soporten estas propiedades simplemente veremos el menú con esquinas normales, hover típico on-off de CSS y sin sombras.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#menu</span><span style="color: #00AA00;">&#123;</span>
	-moz-border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	-webkit-border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	-webkit-box-shadow<span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #933;">3px</span> <span style="color: #cc00cc;">#888</span><span style="color: #00AA00;">;</span>
	-moz-box-shadow<span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #933;">3px</span> <span style="color: #cc00cc;">#888</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">border-bottom</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#FFF</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> ul li<span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#menu</span> li<span style="color: #3333ff;">:last-child</span><span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">&#125;</span>	
a<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#FFF</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">text-decoration</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span><span style="color: #ff0000;">'Helvetica'</span><span style="color: #00AA00;">,</span> Arial<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">13px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">3px</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #933;">1px</span> <span style="color: #cc00cc;">#325179</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> a<span style="color: #3333ff;">:hover</span><span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#F9B855</span><span style="color: #00AA00;">;</span>
	-webkit-transition<span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">color</span> 0.2s linear<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> ul a<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#6594D1</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> ul a<span style="color: #3333ff;">:hover</span><span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#FFF</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#2961A9</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
	-webkit-transition<span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">background-color</span> 0.2s linear<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
ul<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#2961A9</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">130px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">list-style</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> ul<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#6594D1</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#menu</span> li ul <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<h3>Añadiendo la funcionalidad con jQuery</h3>
<p>Ahora vamos a ver lo sencillo que es hacer funcionar nuestro menú vertical. Primero añadimos el evento <em>click</em> a cada enlace del menú. Después comprobamos si el siguiente elemento tras el enlace es un <em>ul</em>, ya que si es así este contendrá un submenú, si no será un elemento de un submenú o bien un elemento principal que no contiene submenú (en nuestro ejemplo, el último enlace). Si contiene un submenú, al hacer click este se expandirá o colapsará (<em>slideToggle()</em>), a la vez que colapsaremos el submenú que esté visible que no sea el actual. La función <em>event.preventDefault()</em> sirve para evitar que cuando hagamos click el navegador siga el enlace del <em>href</em> tras ejecutar nuestra función javascript.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> charset<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;utf-8&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#menu li a'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> elem <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>elem.<span style="color: #000066; font-weight: bold;">is</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ul'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			event.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#menu ul:visible'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span>elem<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			elem.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Podéis escribir en los comentarios cualquier duda que tengáis e intentaré responderla, así como sugerencias para próximos tutoriales.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F&amp;title=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery&amp;bodytext=A%20pesar%20del%20buen%20feedback%20recibido%20sobre%20mi%20serie%20de%20tutoriales%20de%20CodeIgniter%2C%20los%20art%C3%ADculos%20sobre%20men%C3%BAs%20animados%20con%20CSS%20y%20javascript%20siguen%20siendo%20los%20m%C3%A1s%20populares%20en%20este%20sitio%2C%20y%20parece%20que%20son%20bastante%20%C3%BAtiles%20para%20la%20gente%20que%20est%C3%A1%20empeza" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F&amp;title=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery&amp;notes=A%20pesar%20del%20buen%20feedback%20recibido%20sobre%20mi%20serie%20de%20tutoriales%20de%20CodeIgniter%2C%20los%20art%C3%ADculos%20sobre%20men%C3%BAs%20animados%20con%20CSS%20y%20javascript%20siguen%20siendo%20los%20m%C3%A1s%20populares%20en%20este%20sitio%2C%20y%20parece%20que%20son%20bastante%20%C3%BAtiles%20para%20la%20gente%20que%20est%C3%A1%20empeza" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F&amp;t=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F&amp;title=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery&amp;annotation=A%20pesar%20del%20buen%20feedback%20recibido%20sobre%20mi%20serie%20de%20tutoriales%20de%20CodeIgniter%2C%20los%20art%C3%ADculos%20sobre%20men%C3%BAs%20animados%20con%20CSS%20y%20javascript%20siguen%20siendo%20los%20m%C3%A1s%20populares%20en%20este%20sitio%2C%20y%20parece%20que%20son%20bastante%20%C3%BAtiles%20para%20la%20gente%20que%20est%C3%A1%20empeza" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F&amp;title=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F&amp;t=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery&amp;s=A%20pesar%20del%20buen%20feedback%20recibido%20sobre%20mi%20serie%20de%20tutoriales%20de%20CodeIgniter%2C%20los%20art%C3%ADculos%20sobre%20men%C3%BAs%20animados%20con%20CSS%20y%20javascript%20siguen%20siendo%20los%20m%C3%A1s%20populares%20en%20este%20sitio%2C%20y%20parece%20que%20son%20bastante%20%C3%BAtiles%20para%20la%20gente%20que%20est%C3%A1%20empeza" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Men%C3%BA%20vertical%20en%20acorde%C3%B3n%20con%20CSS%20y%20jquery%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdiseno-web%2Fmenu-vertical-en-acordeon-con-css-y-jquery%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/lAV1iuVyOzU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/diseno-web/menu-vertical-en-acordeon-con-css-y-jquery/feed/</wfw:commentRss>
		<slash:comments>68</slash:comments>
		</item>
		<item>
		<title>Videotutorial: Ajax con Jquery en Codeigniter</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-ajax-con-jquery-en-codeigniter/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-ajax-con-jquery-en-codeigniter/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 06:11:01 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=374</guid>
		<description><![CDATA[En este screencast voy a mostraros un sencillo ejemplo de cómo utilizar jQuery para cargar contenido mediante ajax en CodeIgniter. El código está basado en el ejemplo del primer video &#8220;Introducción a CodeIgniter&#8221;, así que os recomiendo que le echéis un vistazo primero si no lo habéis hecho ya. Vamos a modificar ese código para [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/09/codeigniter_screencast_jque.png" alt="codeigniter_screencast_jque" title="codeigniter_screencast_jquery" width="163" height="104" class="derecha alignright size-full wp-image-376" />En este screencast voy a mostraros un sencillo ejemplo de cómo utilizar jQuery para cargar contenido mediante ajax en CodeIgniter. El código está basado en el ejemplo del primer video <a href="http://www.davidrojas.net/index.php/desarrollo-web/screencast-introduccion-al-framework-php-codeigniter/" title="Videotutorial: Introducción a CodeIgniter">&#8220;Introducción a CodeIgniter&#8221;</a>, así que os recomiendo que le echéis un vistazo primero si no lo habéis hecho ya. Vamos a modificar ese código para que liste sólo los títulos de las entradas, y al hacer click en un título se cargue debajo el contenido de la entrada.</p>
<p>Este es el tercer videotutorial de la serie CodeIgniter, podéis encontrarlos todos en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño, desarrollo web y codeigniter">página de screencasts</a>, o suscribiros al <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=326994250" title="Enlace a podcast de David Rojas en iTunes">podcast de iTunes</a>.<br />
<span id="more-374"></span><br />
<em class="linkem"><a href="http://www.davidrojas.net/wp-content/uploads/2009/09/3_ajax_con_jquery_en_codeigniter.zip">Descargar ficheros con el código del ejemplo.</a></em></p>
<h3>Ver screencast (duración: 11:21)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgaLNRgA" type="application/x-shockwave-flash" width="490" height="397" allowscriptaccess="always" allowfullscreen="true"></embed>
</div>
<ul>
<li><a href="http://blip.tv/file/get/Davidrojas-3AjaxConJqueryEnCodeIgniter659.mp4" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MP4 (47 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-3AjaxConJqueryEnCodeIgniter994.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (37 MB)</a></li>
</ul>
<p></p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F&amp;title=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter&amp;bodytext=En%20este%20screencast%20voy%20a%20mostraros%20un%20sencillo%20ejemplo%20de%20c%C3%B3mo%20utilizar%20jQuery%20para%20cargar%20contenido%20mediante%20ajax%20en%20CodeIgniter.%20El%20c%C3%B3digo%20est%C3%A1%20basado%20en%20el%20ejemplo%20del%20primer%20video%20%22Introducci%C3%B3n%20a%20CodeIgniter%22%2C%20as%C3%AD%20que%20os%20recomiendo%20que%20le%20ec" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F&amp;title=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter&amp;notes=En%20este%20screencast%20voy%20a%20mostraros%20un%20sencillo%20ejemplo%20de%20c%C3%B3mo%20utilizar%20jQuery%20para%20cargar%20contenido%20mediante%20ajax%20en%20CodeIgniter.%20El%20c%C3%B3digo%20est%C3%A1%20basado%20en%20el%20ejemplo%20del%20primer%20video%20%22Introducci%C3%B3n%20a%20CodeIgniter%22%2C%20as%C3%AD%20que%20os%20recomiendo%20que%20le%20ec" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F&amp;t=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F&amp;title=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter&amp;annotation=En%20este%20screencast%20voy%20a%20mostraros%20un%20sencillo%20ejemplo%20de%20c%C3%B3mo%20utilizar%20jQuery%20para%20cargar%20contenido%20mediante%20ajax%20en%20CodeIgniter.%20El%20c%C3%B3digo%20est%C3%A1%20basado%20en%20el%20ejemplo%20del%20primer%20video%20%22Introducci%C3%B3n%20a%20CodeIgniter%22%2C%20as%C3%AD%20que%20os%20recomiendo%20que%20le%20ec" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F&amp;title=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F&amp;t=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter&amp;s=En%20este%20screencast%20voy%20a%20mostraros%20un%20sencillo%20ejemplo%20de%20c%C3%B3mo%20utilizar%20jQuery%20para%20cargar%20contenido%20mediante%20ajax%20en%20CodeIgniter.%20El%20c%C3%B3digo%20est%C3%A1%20basado%20en%20el%20ejemplo%20del%20primer%20video%20%22Introducci%C3%B3n%20a%20CodeIgniter%22%2C%20as%C3%AD%20que%20os%20recomiendo%20que%20le%20ec" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20Ajax%20con%20Jquery%20en%20Codeigniter%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-ajax-con-jquery-en-codeigniter%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/xxkdp286Da0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-ajax-con-jquery-en-codeigniter/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
<enclosure url="http://blip.tv/file/get/Davidrojas-3AjaxConJqueryEnCodeIgniter659.mp4" length="49920346" type="video/mp4" />
<enclosure url="http://blip.tv/file/get/Davidrojas-3AjaxConJqueryEnCodeIgniter994.m4v" length="39013354" type="video/mp4" />
		</item>
		<item>
		<title>Publicado CodeIgniter 1.7.2</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/publicado-codeigniter-1-7-2/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/publicado-codeigniter-1-7-2/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 18:38:12 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Desarrollo Web]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=348</guid>
		<description><![CDATA[Hace unos días se liberó la versión 1.7.2 de CodeIgniter, que podéis descargar aquí. Sus principales mejoras, además de un buen número de bugs corregidos, son:

Compatibilidad con PHP 5.3.0.
Añadida la clase Cart Class.
Ciertas mejoras en el Form helper.
Añadida función is_php() para comparar versiones de PHP.
Modificada la función show_error() para permitir enviar códigos de respuesta HTTP.

Lo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/09/codeigniter_1.7.2.png" alt="codeigniter_1.7.2" title="codeigniter_1.7.2" width="163" height="104" class="derecha alignright size-full wp-image-368" />Hace unos días se liberó la <a href="http://codeigniter.com/news/codeigniter_v1.7.2_released/" title="CodeIgniter 1.7.2">versión 1.7.2 de CodeIgniter</a>, que podéis <a href="http://codeigniter.com/download.php" title="Descargar CodeIgniter 1.7.2">descargar aquí</a>. Sus principales mejoras, además de un buen número de bugs corregidos, son:</p>
<ul class="bullets">
<li>Compatibilidad con PHP 5.3.0.</li>
<li>Añadida la clase <a href="http://codeigniter.com/user_guide/libraries/cart.html" title="documentación sobre la nueva Cart Class">Cart Class</a>.</li>
<li>Ciertas mejoras en el <a href="http://codeigniter.com/user_guide/helpers/form_helper.html" title="Form helper">Form helper</a>.</li>
<li>Añadida función <a href="http://codeigniter.com/user_guide/general/common_functions.html" title="Common functions CodeIgniter">is_php()</a> para comparar versiones de PHP.</li>
<li>Modificada la función <a href="http://codeigniter.com/user_guide/general/errors.html" title="Función show_error">show_error()</a></em> para permitir enviar códigos de respuesta HTTP.</li>
</ul>
<p>Lo más interesante que veo es la compatibilidad con PHP 5.3 (sobre todo desde que MacOS X Snow Leopard viene con esta versión de serie), y la nueva clase Cart. Esta clase es útil para programar una tienda virtual, ya que proporciona una interfaz sencilla para crear y actualizar un carrito de la compra. Aunque ya se rumoreaba desde hace tiempo que se iba a incluir esta clase, se esperaba para la versión 2.0, ya que es raro que introduzcan librerías nuevas en versiones menores.</p>
<p>Cuando tenga un hueco espero en breve seguir con mi serie de <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Video tutoriales CodeIgniter">video tutoriales de CodeIgniter</a>.</p>



Si te ha gustado este artículo, por favor compártelo:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F&amp;partner=sociable" title="Print"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F&amp;title=Publicado%20CodeIgniter%201.7.2&amp;bodytext=Hace%20unos%20d%C3%ADas%20se%20liber%C3%B3%20la%20versi%C3%B3n%201.7.2%20de%20CodeIgniter%2C%20que%20pod%C3%A9is%20descargar%20aqu%C3%AD.%20Sus%20principales%20mejoras%2C%20adem%C3%A1s%20de%20un%20buen%20n%C3%BAmero%20de%20bugs%20corregidos%2C%20son%3A%0D%0A%0D%0ACompatibilidad%20con%20PHP%205.3.0.%0D%0AA%C3%B1adida%20la%20clase%20Cart%20Class.%0D%0ACiertas%20mejoras%20en" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F&amp;title=Publicado%20CodeIgniter%201.7.2&amp;notes=Hace%20unos%20d%C3%ADas%20se%20liber%C3%B3%20la%20versi%C3%B3n%201.7.2%20de%20CodeIgniter%2C%20que%20pod%C3%A9is%20descargar%20aqu%C3%AD.%20Sus%20principales%20mejoras%2C%20adem%C3%A1s%20de%20un%20buen%20n%C3%BAmero%20de%20bugs%20corregidos%2C%20son%3A%0D%0A%0D%0ACompatibilidad%20con%20PHP%205.3.0.%0D%0AA%C3%B1adida%20la%20clase%20Cart%20Class.%0D%0ACiertas%20mejoras%20en" title="del.icio.us"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F&amp;t=Publicado%20CodeIgniter%201.7.2" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F&amp;title=Publicado%20CodeIgniter%201.7.2&amp;annotation=Hace%20unos%20d%C3%ADas%20se%20liber%C3%B3%20la%20versi%C3%B3n%201.7.2%20de%20CodeIgniter%2C%20que%20pod%C3%A9is%20descargar%20aqu%C3%AD.%20Sus%20principales%20mejoras%2C%20adem%C3%A1s%20de%20un%20buen%20n%C3%BAmero%20de%20bugs%20corregidos%2C%20son%3A%0D%0A%0D%0ACompatibilidad%20con%20PHP%205.3.0.%0D%0AA%C3%B1adida%20la%20clase%20Cart%20Class.%0D%0ACiertas%20mejoras%20en" title="Google Bookmarks"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="mailto:?subject=Publicado%20CodeIgniter%201.7.2&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F" title="email"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/email_link.png" title="email" alt="email" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F&amp;title=Publicado%20CodeIgniter%201.7.2" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F&amp;t=Publicado%20CodeIgniter%201.7.2&amp;s=Hace%20unos%20d%C3%ADas%20se%20liber%C3%B3%20la%20versi%C3%B3n%201.7.2%20de%20CodeIgniter%2C%20que%20pod%C3%A9is%20descargar%20aqu%C3%AD.%20Sus%20principales%20mejoras%2C%20adem%C3%A1s%20de%20un%20buen%20n%C3%BAmero%20de%20bugs%20corregidos%2C%20son%3A%0D%0A%0D%0ACompatibilidad%20con%20PHP%205.3.0.%0D%0AA%C3%B1adida%20la%20clase%20Cart%20Class.%0D%0ACiertas%20mejoras%20en" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Publicado%20CodeIgniter%201.7.2%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fpublicado-codeigniter-1-7-2%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>


<br/><br/><img src="http://feeds.feedburner.com/~r/DavidRojas/~4/AMH7yfKIa08" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/publicado-codeigniter-1-7-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
