<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>David Rojas &#187; Screencasts</title>
	<atom:link href="http://www.davidrojas.net/index.php/category/screencasts/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.davidrojas.net</link>
	<description>Diseño y desarrollo web</description>
	<lastBuildDate>Fri, 23 Jul 2010 21:31:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Videotutorial &#8211; Patrones de diseño en PHP &#8211; Chain-of-command</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/videotutorial-patrones-de-diseno-en-php-chain-of-command/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/videotutorial-patrones-de-diseno-en-php-chain-of-command/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 21:31:56 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=831</guid>
		<description><![CDATA[Para terminar la serie de screencasts sobre patrones de diseño en PHP, os enseñaré en qué consiste el chain-of-command pattern (cadena de mando), también llamado patrón cadena de responsabilidad. En él creamos una serie de objetos receptores y un objeto emisor que les envía una petición, estableciendo una cadena en la que el comando de [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2010/03/screencast_php_patterns.png" alt="" title="screencast_php_patterns" width="163" height="104" class="derecha alignright size-full wp-image-774" />Para terminar la serie de screencasts sobre patrones de diseño en PHP, os enseñaré en qué consiste el chain-of-command pattern (cadena de mando), también llamado patrón <em>cadena de responsabilidad</em>. En él creamos una serie de objetos receptores y un objeto emisor que les envía una petición, estableciendo una cadena en la que el comando de petición recorre todos los posibles objetos receptores hasta que uno de ellos responde ejecutando el comando.</p>
<p>De esta manera el emisor no tiene conocimiento de qué receptor va a ejecutar el comando, favoreciendo el <a href="http://en.wikipedia.org/wiki/Loose_coupling" title="Loose coupling">acoplamiento débil</a>.<br />
<span id="more-831"></span></p>
<h3>Ver screencast (duración: 8:05)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgfCvXw" 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-11PatronesDeDiseoEnPHPChainofcommandPattern502.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (14 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-11PatronesDeDiseoEnPHPChainofcommandPattern252.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (9 MB)</a></li>
</ul>
<p></p>
<p>Podéis ver el resto de videotutoriales en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño y desarrollo web, codeigniter, PHP, CSS3">página de screencasts</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>Ejemplo de implementación</h3>
<p>Primero creamos el interfaz que implementarán los objetos receptores, seguido de la clase emisora <em>CommandChain</em>, que será la encargada de mantener la lista de instancias de los objetos receptores y pasarles las peticiones a éstos.</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;">interface</span> ICommand<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">function</span> onCommand<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comando</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</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;">class</span> CommandChain<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_commands</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> addCommand<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_commands<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cmd</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> runCommand<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comando</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_commands <span style="color: #b1b100;">as</span> <span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">onCommand</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comando</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A continuación creamos las clases de los objetos receptores <em>SMSCommand</em> y <em>MailCommand</em>, que implementan el interfaz <em>ICommand</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> SMSCommand implements ICommand<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onCommand<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comando</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comando</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">'NotifyUser'</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'metodo'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">'sms'</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SMSCommand ejecutando <span style="color: #006699; font-weight: bold;">$comando</span>. Notificando usuario &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'user'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; via SMS.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> MailCommand implements ICommand<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onCommand<span style="color: #009900;">&#40;</span><span style="color: #000088;">$comando</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$comando</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">'NotifyUser'</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'metodo'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">'mail'</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SMSCommand ejecutando <span style="color: #006699; font-weight: bold;">$comando</span>. Notificando usuario &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'user'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; via Email.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Finalmente, para utilizarlo instanciamos el gestor <em>CommandChain</em> y le añadimos los objetos receptores, para después llamar a su método <em>runCommand</em> que enviará el comando a dichos objetos y sólo uno de ellos responderá dependiendo de un criterio, en este caso del argumento <em>metodo</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CommandChain<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$c</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addCommand</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SMSCommand<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: #000088;">$c</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addCommand</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> MailCommand<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: #000088;">$c</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">runCommand</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'NotifyUser'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'metodo'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mail'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'test'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p></p>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%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></li>
	<li><a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F&amp;title=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command&amp;bodytext=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%2C%20os%20ense%C3%B1ar%C3%A9%20en%20qu%C3%A9%20consiste%20el%20chain-of-command%20pattern%20%28cadena%20de%20mando%29%2C%20tambi%C3%A9n%20llamado%20patr%C3%B3n%20cadena%20de%20responsabilidad.%20En%20%C3%A9l%20creamos%20una%20serie%20de%20objetos%20receptores%20y" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F&amp;title=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command&amp;notes=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%2C%20os%20ense%C3%B1ar%C3%A9%20en%20qu%C3%A9%20consiste%20el%20chain-of-command%20pattern%20%28cadena%20de%20mando%29%2C%20tambi%C3%A9n%20llamado%20patr%C3%B3n%20cadena%20de%20responsabilidad.%20En%20%C3%A9l%20creamos%20una%20serie%20de%20objetos%20receptores%20y" 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></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F&amp;t=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><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%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F&amp;title=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command&amp;annotation=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%2C%20os%20ense%C3%B1ar%C3%A9%20en%20qu%C3%A9%20consiste%20el%20chain-of-command%20pattern%20%28cadena%20de%20mando%29%2C%20tambi%C3%A9n%20llamado%20patr%C3%B3n%20cadena%20de%20responsabilidad.%20En%20%C3%A9l%20creamos%20una%20serie%20de%20objetos%20receptores%20y" 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></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%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></li>
	<li><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F&amp;title=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><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%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F&amp;t=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command&amp;s=Para%20terminar%20la%20serie%20de%20screencasts%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%2C%20os%20ense%C3%B1ar%C3%A9%20en%20qu%C3%A9%20consiste%20el%20chain-of-command%20pattern%20%28cadena%20de%20mando%29%2C%20tambi%C3%A9n%20llamado%20patr%C3%B3n%20cadena%20de%20responsabilidad.%20En%20%C3%A9l%20creamos%20una%20serie%20de%20objetos%20receptores%20y" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%20-%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Chain-of-command%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-chain-of-command%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/videotutorial-patrones-de-diseno-en-php-chain-of-command/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Videotutorial: Patrones de diseño en PHP &#8211; Observer Pattern</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/videotutorial-patrones-de-diseno-en-php-observer-pattern/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/videotutorial-patrones-de-diseno-en-php-observer-pattern/#comments</comments>
		<pubDate>Mon, 03 May 2010 09:21:24 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=804</guid>
		<description><![CDATA[En este screencast voy a explicaros el patrón de diseño Observer (observador) en PHP, que consiste en crear objetos observables que mantienen una lista de observadores y les notifica a éstos de cualquier cambio en su estado, normalmente llamando a uno de sus métodos. Este patrón suele utilizarse para implementar un sistema de manejo de [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2010/03/screencast_php_patterns.png" alt="" title="screencast_php_patterns" width="163" height="104" class="derecha alignright size-full wp-image-774" />En este screencast voy a explicaros el patrón de diseño <em>Observer</em> (observador) en PHP, que consiste en crear objetos observables que mantienen una lista de observadores y les notifica a éstos de cualquier cambio en su estado, normalmente llamando a uno de sus métodos. Este patrón suele utilizarse para implementar un sistema de manejo de eventos distribuido, por ejemplo construir un sistema de logging en el que registramos el observador (clase que se ocupa de escribir el log) en cada objeto que queramos que envíe mensajes al log.<br />
<span id="more-804"></span></p>
<h3>Ver screencast (duración: 12:09)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgduLFQA" 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-10PatronesDeDiseoEnPHPObserverPattern958.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (22 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-10PatronesDeDiseoEnPHPObserverPattern678.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (16 MB)</a></li>
</ul>
<p></p>
<p>Podéis ver el resto de screencasts en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño y desarrollo web, codeigniter, PHP, 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>. Os recomiendo especialmente que no os perdáis los tutoriales de dos de los patrones más usados: el <a href="http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-singleton-pattern/">Singleton</a> y el <a href="http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-factory-pattern/">Factory Pattern</a>.</p>
<h3>Ejemplo de implementación</h3>
<p>En primer lugar creamos la clase abstracta de la que heredarán las clases observables, y el interfaz que implementarán los observadores.</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>
abstract <span style="color: #000000; font-weight: bold;">class</span> Observable<span style="color: #009900;">&#123;</span>
	protected <span style="color: #000088;">$observers</span><span style="color: #339933;">;</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>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</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;">public</span> <span style="color: #000000; font-weight: bold;">function</span> registrarObserver<span style="color: #009900;">&#40;</span><span style="color: #000088;">$observer</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$observer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$observer</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> deregistrarObserver<span style="color: #009900;">&#40;</span><span style="color: #000088;">$observer</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$observer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		    <span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$observer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		    <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	abstract <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> notificarObservers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">interface</span> Observer<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> notificar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sender</span><span style="color: #339933;">,</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>A continuación creamos las clases específicas, en este caso una clase observable y dos clases de logging que actuarán de observadores.</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> MiObservable <span style="color: #000000; font-weight: bold;">extends</span> Observable<span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</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>__construct<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;">public</span> <span style="color: #000000; font-weight: bold;">function</span> notificarObservers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$observer</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$observer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">notificar</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">param</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Evento<span style="color: #009900;">&#40;</span><span style="color: #000088;">$texto</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">param</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$texto</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">notificarObservers</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>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #990000;">Log</span> implements Observer<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> notificar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sender</span><span style="color: #339933;">,</span> <span style="color: #000088;">$param</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #990000;">get_class</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sender</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; envio <span style="color: #006699; font-weight: bold;">$param</span> a las &quot;</span><span style="color: #339933;">.</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'h:i:s'</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><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: #0000ff;">&quot;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> SalvarLog implements Observer<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> notificar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sender</span><span style="color: #339933;">,</span> <span style="color: #000088;">$param</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Guardando en BD <span style="color: #006699; font-weight: bold;">$param</span> enviado por &quot;</span><span style="color: #339933;">.</span><span style="color: #990000;">get_class</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sender</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;... &lt;br /&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Para utilizarlo, instanciaremos las clases y registraremos los observadores de esta manera:</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: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MiObservable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registrarObserver</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #990000;">Log</span><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: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registrarObserver</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SalvarLog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Evento</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Test 1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Evento</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Test 2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deregistrarObserver</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SalvarLog<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: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Evento</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Test 3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p></p>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%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></li>
	<li><a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern&amp;bodytext=En%20este%20screencast%20voy%20a%20explicaros%20el%20patr%C3%B3n%20de%20dise%C3%B1o%20Observer%20%28observador%29%20en%20PHP%2C%20que%20consiste%20en%20crear%20objetos%20observables%20que%20mantienen%20una%20lista%20de%20observadores%20y%20les%20notifica%20a%20%C3%A9stos%20de%20cualquier%20cambio%20en%20su%20estado%2C%20normalmente%20llamando%20a" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern&amp;notes=En%20este%20screencast%20voy%20a%20explicaros%20el%20patr%C3%B3n%20de%20dise%C3%B1o%20Observer%20%28observador%29%20en%20PHP%2C%20que%20consiste%20en%20crear%20objetos%20observables%20que%20mantienen%20una%20lista%20de%20observadores%20y%20les%20notifica%20a%20%C3%A9stos%20de%20cualquier%20cambio%20en%20su%20estado%2C%20normalmente%20llamando%20a" 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></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F&amp;t=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><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%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern&amp;annotation=En%20este%20screencast%20voy%20a%20explicaros%20el%20patr%C3%B3n%20de%20dise%C3%B1o%20Observer%20%28observador%29%20en%20PHP%2C%20que%20consiste%20en%20crear%20objetos%20observables%20que%20mantienen%20una%20lista%20de%20observadores%20y%20les%20notifica%20a%20%C3%A9stos%20de%20cualquier%20cambio%20en%20su%20estado%2C%20normalmente%20llamando%20a" 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></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%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></li>
	<li><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><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%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F&amp;t=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern&amp;s=En%20este%20screencast%20voy%20a%20explicaros%20el%20patr%C3%B3n%20de%20dise%C3%B1o%20Observer%20%28observador%29%20en%20PHP%2C%20que%20consiste%20en%20crear%20objetos%20observables%20que%20mantienen%20una%20lista%20de%20observadores%20y%20les%20notifica%20a%20%C3%A9stos%20de%20cualquier%20cambio%20en%20su%20estado%2C%20normalmente%20llamando%20a" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Observer%20Pattern%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fvideotutorial-patrones-de-diseno-en-php-observer-pattern%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/videotutorial-patrones-de-diseno-en-php-observer-pattern/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Videotutorial: Patrones de diseño en PHP &#8211; Factory Pattern</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-factory-pattern/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-factory-pattern/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 11:43:25 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=785</guid>
		<description><![CDATA[Continuamos la serie de videos sobre patrones de diseño en PHP con el patrón creacional Factory, que consiste en un método para crear objetos cuando no sabemos la clase exacta del objeto que va a ser creado. De esta manera encapsulamos clases en una clase general de la que heredarán distintas subclases. Aunque el ejemplo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2010/03/screencast_php_patterns.png" alt="" title="screencast_php_patterns" width="163" height="104" class="derecha alignright size-full wp-image-774" />Continuamos la serie de videos sobre patrones de diseño en PHP con el patrón creacional Factory, que consiste en un método para crear objetos cuando no sabemos la clase exacta del objeto que va a ser creado. De esta manera encapsulamos clases en una clase general de la que heredarán distintas subclases. Aunque el ejemplo utilizado es muy sencillo, este patrón es bastante interesante si tenemos en cuenta que podemos redefinir métodos en cada subclase, así como automatizar la creación de objetos utilizando variables (que podemos obtener de un fichero de settings).<br />
<span id="more-785"></span></p>
<h3>Ver screencast (duración: 5:41)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgdS9aAA" 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-9PatronesDeDiseoEnPHPFactoryPattern135.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (9 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-9PatronesDeDiseoEnPHPFactoryPattern389.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (6 MB)</a></li>
</ul>
<p></p>
<p>Podéis ver el resto de screencasts en la <a href="http://www.davidrojas.net/index.php/category/screencasts/" title="Videotutoriales de diseño y desarrollo web, codeigniter, PHP, 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>Ejemplo de implementación</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
abstract <span style="color: #000000; font-weight: bold;">class</span> Vehiculo<span style="color: #009900;">&#123;</span>
	protected <span style="color: #000088;">$numruedas</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getNumruedas<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">numruedas</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Coche <span style="color: #000000; font-weight: bold;">extends</span> Vehiculo<span style="color: #009900;">&#123;</span>
	protected <span style="color: #000088;">$numruedas</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Bici <span style="color: #000000; font-weight: bold;">extends</span> Vehiculo<span style="color: #009900;">&#123;</span>
	protected <span style="color: #000088;">$numruedas</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> VehiculoFactory<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> crearVehiculo<span style="color: #009900;">&#40;</span><span style="color: #000088;">$tipo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$clasebase</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Vehiculo'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">class_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tipo</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_subclass_of</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tipo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$clasebase</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000088;">$tipo</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">else</span>
			throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;No se reconoce el tipo de vehiculo <span style="color: #006699; font-weight: bold;">$tipo</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$vehiculo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">Array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Bici'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Coche'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$vehiculo</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;El vehiculo <span style="color: #006699; font-weight: bold;">$v</span> tiene &quot;</span><span style="color: #339933;">.</span>VehiculoFactory<span style="color: #339933;">::</span><span style="color: #004000;">crearVehiculo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getNumruedas</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; ruedas&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-factory-pattern%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></li>
	<li><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-patrones-de-diseno-en-php-factory-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern&amp;bodytext=Continuamos%20la%20serie%20de%20videos%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%20con%20el%20patr%C3%B3n%20creacional%20Factory%2C%20que%20consiste%20en%20un%20m%C3%A9todo%20para%20crear%20objetos%20cuando%20no%20sabemos%20la%20clase%20exacta%20del%20objeto%20que%20va%20a%20ser%20creado.%20De%20esta%20manera%20encapsulamos%20clases%20en%20u" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-factory-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern&amp;notes=Continuamos%20la%20serie%20de%20videos%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%20con%20el%20patr%C3%B3n%20creacional%20Factory%2C%20que%20consiste%20en%20un%20m%C3%A9todo%20para%20crear%20objetos%20cuando%20no%20sabemos%20la%20clase%20exacta%20del%20objeto%20que%20va%20a%20ser%20creado.%20De%20esta%20manera%20encapsulamos%20clases%20en%20u" 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></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-factory-pattern%2F&amp;t=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><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-patrones-de-diseno-en-php-factory-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern&amp;annotation=Continuamos%20la%20serie%20de%20videos%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%20con%20el%20patr%C3%B3n%20creacional%20Factory%2C%20que%20consiste%20en%20un%20m%C3%A9todo%20para%20crear%20objetos%20cuando%20no%20sabemos%20la%20clase%20exacta%20del%20objeto%20que%20va%20a%20ser%20creado.%20De%20esta%20manera%20encapsulamos%20clases%20en%20u" 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></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-factory-pattern%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></li>
	<li><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-factory-pattern%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-factory-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><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-patrones-de-diseno-en-php-factory-pattern%2F&amp;t=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern&amp;s=Continuamos%20la%20serie%20de%20videos%20sobre%20patrones%20de%20dise%C3%B1o%20en%20PHP%20con%20el%20patr%C3%B3n%20creacional%20Factory%2C%20que%20consiste%20en%20un%20m%C3%A9todo%20para%20crear%20objetos%20cuando%20no%20sabemos%20la%20clase%20exacta%20del%20objeto%20que%20va%20a%20ser%20creado.%20De%20esta%20manera%20encapsulamos%20clases%20en%20u" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Factory%20Pattern%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-factory-pattern%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-factory-pattern/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Videotutorial: Patrones de diseño en PHP &#8211; Singleton Pattern</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-singleton-pattern/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-singleton-pattern/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 12:38:49 +0000</pubDate>
		<dc:creator>David Rojas</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.davidrojas.net/?p=755</guid>
		<description><![CDATA[Hoy os traigo el primero de una serie de videos cortos en los que voy a explicar algunos de los patrones diseño OOP más comunes en PHP. Un patrón de diseño consiste en una solución a un problema común en el desarrollo de software. En el caso de PHP, estos patrones son los que nos [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2010/03/screencast_php_patterns.png" alt="" title="screencast_php_patterns" width="163" height="104" class="derecha alignright size-full wp-image-774" />Hoy os traigo el primero de una serie de videos cortos en los que voy a explicar algunos de los patrones diseño OOP más comunes en PHP. Un patrón de diseño consiste en una solución a un problema común en el desarrollo de software. En el caso de PHP, estos patrones son los que nos permiten aprovechar realmente toda la potencia de orientación a objetos de PHP5. Estos videos no pretenden ser tutoriales exhaustivos, sino simplemente una visión general y rápida de en qué consiste cada patrón, para aquellos que no estén familiarizados con esta metodología.</p>
<p>Empezaremos con el patrón <em>Singleton</em>, ya que es el más fácil de entender y utilizar. Hay varias maneras de implementar una clase singleton, pero aquí os voy a mostrar la forma más sencilla.<br />
<span id="more-755"></span></p>
<h3>Ver screencast (duración: 6:00)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgdHaMAA" 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-8PatronesDeDiseoEnPHPSingletonPattern307.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (12 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-8PatronesDeDiseoEnPHPSingletonPattern667.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (7 MB)</a></li>
</ul>
<p></p>
<p>Podéis ver el resto de 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>¿Qué es un Singleton?</h3>
<p>Un singleton consiste en una clase que solo puede tener una instancia y provee de un punto global de acceso a ella. Para ello se crea una instancia de la clase la primera vez que se referencia, y se devuelve ésta en posteriores llamadas. Esto ayuda a crear clases reusables y no depender de variables globales.</p>
<p>Un claro ejemplo de uso es cuando diseñamos una clase para gestionar la conexion y querys con la base de datos. A lo largo de nuestro script crearemos instancias de esa clase, pero nos interesa que siempre sea la misma ya que todas las conexiones compartirán los mismos parámetros y solo cambiará el contenido del query, por lo que no necesitamos una nueva instancia cada vez, consiguiendo con ello una mejora en el rendimiento.</p>
<h3>Ejemplo de implementación</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Singleton
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> static <span style="color: #000088;">$singleInstancia</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</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> <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> getInstancia<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$singleInstancia</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$singleInstancia</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000000; font-weight: bold;">self</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: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$singleInstancia</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* A partir de aquí vamos añadiendo los métodos la clase */</span>
	<span style="color: #000000; font-weight: bold;">function</span> Metodo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$singleInstancia</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Usaremos la clase de esta manera:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$mysingleton</span> <span style="color: #339933;">=</span> Singleton<span style="color: #339933;">::</span><span style="color: #004000;">getInstancia</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mysingleton</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Metodo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Para hacer nuestro singleton más robusto podríamos definir algunos de los <a href="http://php.net/manual/en/language.oop5.magic.php">metódos &#8216;mágicos&#8217;</a> de PHP para evitar el clonado y manejar la serialización, pero los he omitido para mantener la sencillez del ejemplo.</p>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-singleton-pattern%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></li>
	<li><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-patrones-de-diseno-en-php-singleton-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern&amp;bodytext=Hoy%20os%20traigo%20el%20primero%20de%20una%20serie%20de%20videos%20cortos%20en%20los%20que%20voy%20a%20explicar%20algunos%20de%20los%20patrones%20dise%C3%B1o%20OOP%20m%C3%A1s%20comunes%20en%20PHP.%20Un%20patr%C3%B3n%20de%20dise%C3%B1o%20consiste%20en%20una%20soluci%C3%B3n%20a%20un%20problema%20com%C3%BAn%20en%20el%20desarrollo%20de%20software.%20En%20el%20caso%20de" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-singleton-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern&amp;notes=Hoy%20os%20traigo%20el%20primero%20de%20una%20serie%20de%20videos%20cortos%20en%20los%20que%20voy%20a%20explicar%20algunos%20de%20los%20patrones%20dise%C3%B1o%20OOP%20m%C3%A1s%20comunes%20en%20PHP.%20Un%20patr%C3%B3n%20de%20dise%C3%B1o%20consiste%20en%20una%20soluci%C3%B3n%20a%20un%20problema%20com%C3%BAn%20en%20el%20desarrollo%20de%20software.%20En%20el%20caso%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></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-singleton-pattern%2F&amp;t=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern" title="Facebook"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><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-patrones-de-diseno-en-php-singleton-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern&amp;annotation=Hoy%20os%20traigo%20el%20primero%20de%20una%20serie%20de%20videos%20cortos%20en%20los%20que%20voy%20a%20explicar%20algunos%20de%20los%20patrones%20dise%C3%B1o%20OOP%20m%C3%A1s%20comunes%20en%20PHP.%20Un%20patr%C3%B3n%20de%20dise%C3%B1o%20consiste%20en%20una%20soluci%C3%B3n%20a%20un%20problema%20com%C3%BAn%20en%20el%20desarrollo%20de%20software.%20En%20el%20caso%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></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-singleton-pattern%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></li>
	<li><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-singleton-pattern%2F" title="Meneame"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-singleton-pattern%2F&amp;title=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern" title="StumbleUpon"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><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-patrones-de-diseno-en-php-singleton-pattern%2F&amp;t=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern&amp;s=Hoy%20os%20traigo%20el%20primero%20de%20una%20serie%20de%20videos%20cortos%20en%20los%20que%20voy%20a%20explicar%20algunos%20de%20los%20patrones%20dise%C3%B1o%20OOP%20m%C3%A1s%20comunes%20en%20PHP.%20Un%20patr%C3%B3n%20de%20dise%C3%B1o%20consiste%20en%20una%20soluci%C3%B3n%20a%20un%20problema%20com%C3%BAn%20en%20el%20desarrollo%20de%20software.%20En%20el%20caso%20de" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20Patrones%20de%20dise%C3%B1o%20en%20PHP%20-%20Singleton%20Pattern%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-patrones-de-diseno-en-php-singleton-pattern%2F" title="Twitter"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/screencast-patrones-de-diseno-en-php-singleton-pattern/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Videotutorial: Cómo hacer un plugin jQuery &#8211; 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>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li class="sociablelast"><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></li>
</ul>
</div>
]]></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>13</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>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li class="sociablelast"><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></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/diseno-web/screencast-mejora-progresiva-con-css3/feed/</wfw:commentRss>
		<slash:comments>7</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>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li class="sociablelast"><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></li>
</ul>
</div>
]]></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>62</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>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li class="sociablelast"><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></li>
</ul>
</div>
]]></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>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>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li><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></li>
	<li class="sociablelast"><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></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-ajax-con-jquery-en-codeigniter/feed/</wfw:commentRss>
		<slash:comments>23</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>Videotutorial: Creación y validación de formularios con Codeigniter</title>
		<link>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-creacion-y-validacion-de-formularios-con-codeigniter/</link>
		<comments>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-creacion-y-validacion-de-formularios-con-codeigniter/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 20:35:23 +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=319</guid>
		<description><![CDATA[En este video tutorial voy a enseñaros cómo crear formularios en CodeIgniter con ayuda del helper form y validarlos de manera sencilla mediante la librería form_validation.
Este es el segundo videotutorial de la serie CodeIgnitor, podéis encontrarlos todos en la página de screencasts, o suscribiros al podcast de iTunes.

Descargar ficheros con el código del ejemplo.
Ver screencast [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.davidrojas.net/wp-content/uploads/2009/08/codeigniter_screencast_form.png" alt="codeigniter_screencast_form" title="codeigniter_screencast_form" width="163" height="104" class="derecha alignright size-full wp-image-335" />En este video tutorial voy a enseñaros cómo crear formularios en CodeIgniter con ayuda del <a href="http://codeigniter.com/user_guide/helpers/form_helper.html" title="CodeIgniter User Guide: form helper">helper form</a> y validarlos de manera sencilla mediante la librería <a href="http://codeigniter.com/user_guide/libraries/form_validation.html" title="CodeIgniter User Guide: form_validation library">form_validation</a>.</p>
<p>Este es el segundo videotutorial de la serie CodeIgnitor, 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-319"></span><br />
<em class="linkem"><a href='http://www.davidrojas.net/wp-content/uploads/2009/08/2_creacion_y_validacion_formularios_codeigniter_archivos.zip'>Descargar ficheros con el código del ejemplo.</a></em></p>
<h3>Ver screencast (duración: 20:51)</h3>
<div class="video">
<embed src="http://blip.tv/play/hJIhgZm3CQA" 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-2CreacionYValidacionDeFormulariosConCodeIgniter755.mov" title="Descargar versión alta calidad">Descargar videotutorial en alta calidad &#8211; MOV (60 MB)</a></li>
<li><a href="http://blip.tv/file/get/Davidrojas-2CreacionYValidacionDeFormulariosConCodeIgniter211.m4v" title="Descargar versión iPod/iPhone">Descargar videotutorial optimizado para iPod/iPhone &#8211; M4V (32 MB)</a></li>
</ul>
<p></p>

<div class="sociable">
<div class="sociable_tagline">
<em>Si te ha gustado este artículo, por favor compártelo:</em>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-creacion-y-validacion-de-formularios-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></li>
	<li><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-creacion-y-validacion-de-formularios-con-codeigniter%2F&amp;title=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%20con%20Codeigniter&amp;bodytext=En%20este%20video%20tutorial%20voy%20a%20ense%C3%B1aros%20c%C3%B3mo%20crear%20formularios%20en%20CodeIgniter%20con%20ayuda%20del%20helper%20form%20y%20validarlos%20de%20manera%20sencilla%20mediante%20la%20librer%C3%ADa%20form_validation.%0D%0A%0D%0AEste%20es%20el%20segundo%20videotutorial%20de%20la%20serie%20CodeIgnitor%2C%20pod%C3%A9is%20encon" title="Digg"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-creacion-y-validacion-de-formularios-con-codeigniter%2F&amp;title=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%20con%20Codeigniter&amp;notes=En%20este%20video%20tutorial%20voy%20a%20ense%C3%B1aros%20c%C3%B3mo%20crear%20formularios%20en%20CodeIgniter%20con%20ayuda%20del%20helper%20form%20y%20validarlos%20de%20manera%20sencilla%20mediante%20la%20librer%C3%ADa%20form_validation.%0D%0A%0D%0AEste%20es%20el%20segundo%20videotutorial%20de%20la%20serie%20CodeIgnitor%2C%20pod%C3%A9is%20encon" 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></li>
	<li><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-creacion-y-validacion-de-formularios-con-codeigniter%2F&amp;t=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%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></li>
	<li><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-creacion-y-validacion-de-formularios-con-codeigniter%2F&amp;title=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%20con%20Codeigniter&amp;annotation=En%20este%20video%20tutorial%20voy%20a%20ense%C3%B1aros%20c%C3%B3mo%20crear%20formularios%20en%20CodeIgniter%20con%20ayuda%20del%20helper%20form%20y%20validarlos%20de%20manera%20sencilla%20mediante%20la%20librer%C3%ADa%20form_validation.%0D%0A%0D%0AEste%20es%20el%20segundo%20videotutorial%20de%20la%20serie%20CodeIgnitor%2C%20pod%C3%A9is%20encon" 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></li>
	<li><a rel="nofollow"  target="_blank" href="mailto:?subject=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%20con%20Codeigniter&amp;body=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-creacion-y-validacion-de-formularios-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></li>
	<li><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-creacion-y-validacion-de-formularios-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></li>
	<li><a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-creacion-y-validacion-de-formularios-con-codeigniter%2F&amp;title=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%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></li>
	<li><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-creacion-y-validacion-de-formularios-con-codeigniter%2F&amp;t=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%20con%20Codeigniter&amp;s=En%20este%20video%20tutorial%20voy%20a%20ense%C3%B1aros%20c%C3%B3mo%20crear%20formularios%20en%20CodeIgniter%20con%20ayuda%20del%20helper%20form%20y%20validarlos%20de%20manera%20sencilla%20mediante%20la%20librer%C3%ADa%20form_validation.%0D%0A%0D%0AEste%20es%20el%20segundo%20videotutorial%20de%20la%20serie%20CodeIgnitor%2C%20pod%C3%A9is%20encon" title="Tumblr"><img src="http://www.davidrojas.net/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Videotutorial%3A%20Creaci%C3%B3n%20y%20validaci%C3%B3n%20de%20formularios%20con%20Codeigniter%20-%20http%3A%2F%2Fwww.davidrojas.net%2Findex.php%2Fdesarrollo-web%2Fscreencast-tutorial-creacion-y-validacion-de-formularios-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></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.davidrojas.net/index.php/desarrollo-web/screencast-tutorial-creacion-y-validacion-de-formularios-con-codeigniter/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
<enclosure url="http://blip.tv/file/get/Davidrojas-2CreacionYValidacionDeFormulariosConCodeIgniter755.mov" length="63277630" type="video/quicktime" />
<enclosure url="http://blip.tv/file/get/Davidrojas-2CreacionYValidacionDeFormulariosConCodeIgniter211.m4v" length="33760800" type="video/mp4" />
		</item>
	</channel>
</rss>
