<?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>Joan Ballester Moragues &#187; PHP</title>
	<atom:link href="http://joanballestermoragues.com/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://joanballestermoragues.com</link>
	<description>Joan Ballester Moragues &#124; Programación, Software libre, GNU/Linux</description>
	<lastBuildDate>Tue, 31 Jan 2012 07:35:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Zend Framework: Algo más sobre su MVC</title>
		<link>http://joanballestermoragues.com/programacion-desarrollo/zend-framework-mvc-2.html</link>
		<comments>http://joanballestermoragues.com/programacion-desarrollo/zend-framework-mvc-2.html#comments</comments>
		<pubDate>Tue, 29 Jun 2010 09:00:54 +0000</pubDate>
		<dc:creator>joanballester</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.joanballestermoragues.com/?p=744</guid>
		<description><![CDATA[Las últimas 2 entradas sobre Zend Framework fueron &#8220;Antes de empezar con ZF&#8221; y &#8220;Hello world en ZF&#8220;, hoy continuaremos algunos  conceptos muy básicos del MVC de Zend Framework. Por ejemplo, vamos a crear una vista de un listado con el controlador index: En &#8220;application/controllers/&#8221; tenemos nuestro &#8220;indexController.php&#8221;, no vamos a crear otros controladores de [...]]]></description>
			<content:encoded><![CDATA[<p>Las últimas 2 entradas sobre Zend Framework fueron &#8220;<a href="http://www.joanballestermoragues.com/programacion-desarrollo/zend-framework-antes-de-empezar.html" target="_blank">Antes de empezar con ZF</a>&#8221; y &#8220;<a href="http://www.joanballestermoragues.com/programacion-desarrollo/zend-framework-hello-world.html" target="_blank">Hello world en ZF</a>&#8220;, hoy continuaremos algunos  <strong>conceptos muy básicos del MVC</strong> de Zend Framework.</p>
<p>Por ejemplo, vamos a crear una vista de un listado con el controlador index:</p>
<p>En &#8220;application/controllers/&#8221; tenemos nuestro &#8220;indexController.php&#8221;, no vamos a crear otros controladores de momento, vamos a ir a lo básico.<br />
En &#8220;application/views/scripts/index/&#8221; tenemos &#8220;index.phtml&#8221; y vamos a crear &#8220;lista.phtml&#8221; de momento vacío, más abajo le metemos mano.<br />
Luego, en  &#8221;application/layouts/scripts/&#8221; tenemos nuestro &#8220;layout.phtml&#8221;, que puede quedarse igual de momento.</p>
<p>Let&#8217;s go:</p>
<p><strong>application/controllers/indexController.php</strong></p>
<p>Dentro de esta clase, meteríamos este método:</p>
<pre>public function listaAction()
    {
		$this-&gt;view-&gt;listado = "Listado...";
		$this-&gt;render();
    }</pre>
<p>Evidentemente cuando hacemos el &#8220;$this-&gt;view-&gt;listado&#8221; ya nos ocuparíamos de recoger ese listado de base de datos, o de sesión, etc&#8230; pero por ahora vamos con lo básico.</p>
<p>Si os fijáis simplemente renderizamos.</p>
<p><strong>application/views/scripts/index/lista.phtml</strong></p>
<pre>echo $this-&gt;listado;</pre>
<p>Y en la vista (&#8220;lista.phtml&#8221;) no hay más historia que pintar el listado que le pasamos desde el controlador.</p>
<p>Desde el controlador, más adelante, accederemos a la base de datos, sesión, etc&#8230; lo único que nos tiene que preocupar ahora mismo, es entender que al ejecutar en el navegador:</p>
<pre>http://localhost/nombredelaaplicacion/index/lista</pre>
<p>Se ejecutará dentro del indexController.php el método listaAction() y sacará su resultado (si lo tiene, renderizado&#8230;) en la vista index/lista.phtml</p>
<p>Si ejecutáramos:</p>
<pre>http://localhost/nombredelaaplicacion/index/test</pre>
<p>Se ejecutará dentro del indexController.php el método testAction() y sacará su resultado (si lo tiene, renderizado&#8230;) en la vista index/test.phtml, como no tenemos ni uno ni otro, saltaría error (que también aprenderemos a atraparlos y configurarlos)</p>
]]></content:encoded>
			<wfw:commentRss>http://joanballestermoragues.com/programacion-desarrollo/zend-framework-mvc-2.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework: Antes de empezar</title>
		<link>http://joanballestermoragues.com/programacion-desarrollo/zend-framework-antes-de-empezar.html</link>
		<comments>http://joanballestermoragues.com/programacion-desarrollo/zend-framework-antes-de-empezar.html#comments</comments>
		<pubDate>Mon, 29 Mar 2010 19:24:49 +0000</pubDate>
		<dc:creator>joanballester</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.joanballestermoragues.com/?p=669</guid>
		<description><![CDATA[Vamos a presuponer que quien abre este apunte es porque ya tiene conocimientos de programación, y supongo, que también del lenguaje PHP (Zend Framework está programado en PHP), por tanto vamos a obviar muchos términos.. Objetivo del apunte: 1. Refrescar la memoria con el patrón MVC. 2. Mostrar el Árbol de archivos en una aplicación básica [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a presuponer que quien abre este apunte es porque ya tiene conocimientos de programación, y supongo, que también del lenguaje PHP (<a href="http://framework.zend.com/" target="_blank">Zend Framework</a> está programado en <a href="http://php.net/" target="_blank">PHP</a>), por tanto vamos a obviar muchos términos..</p>
<p>Objetivo del apunte:</p>
<ul>
<li>1. Refrescar la memoria con el patrón MVC.</li>
<li>2. Mostrar el Árbol de archivos en una aplicación básica de Zend Framework.</li>
</ul>
<p><strong>1. Patrón MVC</strong></p>
<p>Para quien no haya trabajado con el <strong>patrón MVC</strong> (<a href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador" target="_blank">modelo vista controlador</a>) lo explicaré un poco por encima, y así a partir de aquí será más sencillo entenderlo todo.</p>
<p>La lógica a la hora de programar nos dice que el interfaz de usuario cambia con más frecuencia que los almacenamientos de datos y la lógica de negocio, por tanto si mezclamos en nuestras aplicaciones los componentes de interfaz, los de negocio y los de almacenamiento tendremos como consecuencia <strong>las famosísimas ñapas[1]</strong> ya que cuando queramos cambiar la interfaz tendremos que modificar muchos componentes de negocio (o todos!).</p>
<p>El patrón MVC se basa en la reusabilidad y la facilidad de cambios (mantenimiento del software) y separa los datos, la interfaz y la lógica de negocio en tres componentes: Modelos, Vistas y Controladores.</p>
<ul>
<li>Modelo: El modelo se limita a lo relativo de la vista y su controlador facilitando las presentaciones visuales complejas. El sistema también puede operar con más datos no relativos a la presentación, haciendo uso integrado de otras lógicas de negocio y de datos afines con el sistema modelado.</li>
<li>Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente la interfaz de usuario. En el caso de Zend Framework se compone básicamente de archivos .phtml que se podrán reutilizar a modo de plantillas (o no, a gusto del consumidor)</li>
<li>Controlador: Este responde a eventos, usualmente acciones del usuario, e invoca peticiones al modelo y, probablemente, a la vista.</li>
</ul>
<p><strong>2. Árbol de archivos en una aplicación básica de Zend Framework.</strong></p>
<p>Os dejo la estructura básica de archivos que se utiliza en el Zend Framework:</p>
<p><span style="text-decoration: underline;">Aplicación</span><br />
application/<br />
&#8212;&#8212; configs/<br />
&#8212;&#8212; controllers/<br />
&#8212;&#8212; forms/<br />
&#8212;&#8212; layouts/<br />
&#8212;&#8212; models/<br />
&#8212;&#8212; modules/<br />
&#8212;&#8212; views/<br />
library/<br />
&#8212;&#8212; Zend/<br />
public/<br />
tests /</p>
<p>Como podéis apreciar, a primera vista ya se ve el MVC: controllers, models, views.<br />
Más adelante explico detalladamente el corazón de una aplicación.</p>
<p>En el próximo post de Zend Framework haremos nuestro &#8220;hello world&#8221; ;p</p>
<p><strong>[1] </strong><em>Que si, que también hay y habrá ñapas con el patrón MVC, pero os aseguro que os facilitará la vida a la hora de detectar errores.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://joanballestermoragues.com/programacion-desarrollo/zend-framework-antes-de-empezar.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>¿Cómo crear Widgets para WordPress?</title>
		<link>http://joanballestermoragues.com/programacion-desarrollo/como-crear-widgets-para-wordpress.html</link>
		<comments>http://joanballestermoragues.com/programacion-desarrollo/como-crear-widgets-para-wordpress.html#comments</comments>
		<pubDate>Tue, 27 Oct 2009 09:00:49 +0000</pubDate>
		<dc:creator>joanballester</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.joanballestermoragues.com/blog/?p=491</guid>
		<description><![CDATA[Vayamos por partes (como dijo Jack El Destripador :-)) ¿Qué es un Widget?: Pequeña aplicación o programa, usualmente presentado en archivos o ficheros pequeños que son ejecutados por un motor de widgets o Widget Engine. Entre sus objetivos están los de dar fácil acceso a funciones frecuentemente usadas y proveer de información visual. WordPress: ¿Todavía [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-493" style="margin: 0pt 10px 5px 0pt; width: 140px; height: auto; float: left;" title="wordpress" src="http://www.joanballestermoragues.com/blog/wp-content/uploads/wordpress-400x400.jpg" alt="wordpress" width="400" height="400" /></p>
<p>Vayamos por partes (como dijo Jack El Destripador :-))</p>
<p><a href="http://es.wikipedia.org/wiki/Widget" target="_blank">¿Qué es un Widget?</a>: Pequeña aplicación o programa, usualmente presentado en archivos o ficheros pequeños que son ejecutados por un motor de widgets o Widget Engine. Entre sus objetivos están los de dar fácil acceso a funciones frecuentemente usadas y proveer de información visual.</p>
<p><a href="http://wordpress.org/" target="_blank">WordPress</a>: ¿Todavía alguien no sabe qué es WordPress? Es un sistema de gestión de contenido enfocado a la creación de blogs (sitios web periódicamente actualizados).</p>
<p>Como todos sabéis, su desarrollo se basa principalmente en PHP y MySQL, vayamos pues a montar un widget.</p>
<p>Atención a este Widget para WordPress:</p>
<pre>/*
Plugin Name: Test Plugin
Plugin URI: http://www.widgetifyr.com
Description: Test Plugin
Author: widgetifyr.com
Version: 0.01
Author URI: http://www.widgetifyr.com

*/

// We're putting the plugin's functions inside the init function to ensure the
// required Sidebar Widget functions are available.

  function widget_test_init()
	  {
	  /* Your custom code starts here */
	  /* ---------------------------- */

	  /* Your Function */
	  function test()
	  {

		  /* Your Code ----------------- */ 

		  echo 'hello world';

		  /* End of Your Code ---------- */

	  }

	  /* -------------------------- */
	  /* Your custom code ends here */

	  function widget_test($args)
	  {

	  	  // Collect our widget's options, or define their defaults.
		  $options = get_option('widget_test');
		  $title = empty($options['title']) ? __('test') : $options['title'];

		  extract($args);
		  echo $before_widget;
		  echo $before_title;
		  echo $title;
		  echo $after_title;
		  test();
		  echo $after_widget;
	  }  

	  // This is the function that outputs the form to let users edit
	  // the widget's title. It's an optional feature, but were're doing
	  // it all for you so why not!

	  function widget_test_control()
	  {

		// Collect our widget options.
		$options = $newoptions = get_option('widget_test');

		// This is for handing the control form submission.
		if ( $_POST['widget_test-submit'] )
		{
			// Clean up control form submission options
			$newoptions['title'] = strip_tags(stripslashes($_POST['widget_test-title']));
		}

		// If original widget options do not match control form
		// submission options, update them.
		if ( $options != $newoptions )
		{
			$options = $newoptions;
			update_option('widget_test', $options);
		}

		$title = attribute_escape($options['title']);

		echo '
		&lt;label for="test-title"&gt;';
		echo 'Title: &lt;input id="widget_test-title" style="width: 250px;" name="widget_test-title" type="text" value="';
		echo $title;
		echo '" /&gt;';
		echo '
		';
		echo '&lt;input id="widget_test-submit" name="widget_test-submit" type="hidden" value="1" /&gt;';
	  }

	// This registers the widget.
    register_sidebar_widget('test', 'widget_test');

	// This registers the (optional!) widget control form.
    register_widget_control('test', 'widget_test_control');

  }

  add_action('plugins_loaded', 'widget_test_init');</pre>
<p>?&gt;</p>
<p>Interesante, ¿verdad?</p>
<p>Ahora me vendrá alguien y dirá&#8230; ¡pero si eso sólamente hace un &#8220;Hello world&#8221;!</p>
<p>Cierto.</p>
<p>Hace unos días estuve ojeando <a href="http://widgetifyr.com" target="_blank">http://widgetifyr.com</a>, en esta web nos ayudan a generar Widgets a partir de código nuestro. No está nada mal, hice un par de cosillas y funcionaron bastante bien. Sin duda ahorras algo de tiempo :-)</p>
<p>Os animo a montar los vuestros, yo llevo unos días montando algunos (ahora los estoy testeando) y es bastante interesante.</p>
<p>Espero que os sirva la URL de referencia :-)</p>
<p><!-- RSS:IMPORT:0k5d21o93q3cnn8ydtu1xaguqhoysq6bopnmd1qx --></p>
]]></content:encoded>
			<wfw:commentRss>http://joanballestermoragues.com/programacion-desarrollo/como-crear-widgets-para-wordpress.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Symfony minuto 0: Empezando</title>
		<link>http://joanballestermoragues.com/programacion-desarrollo/symfony-minuto-0-empezando.html</link>
		<comments>http://joanballestermoragues.com/programacion-desarrollo/symfony-minuto-0-empezando.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 15:07:51 +0000</pubDate>
		<dc:creator>joanballester</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.joanballestermoragues.com/blog/?p=318</guid>
		<description><![CDATA[Gracias a @mariotux y a su blog pensandoenred.com, me entró el gusanillo de probar symfony. Pero de probarlo de verdad, ya que a veces hacemos incursiones con algún framework pero no llegamos a investigar como funciona realmente, ni porque. Por tanto a partir de esta noche, voy a empezar a investigar sus entrañas y practicar [...]]]></description>
			<content:encoded><![CDATA[<p>Gracias a <a href="http://www.twitter.com/mariotux" target="_blank">@mariotux</a> y a su blog <a href="http://www.pensandoenred.com/" target="_blank">pensandoenred.com</a>, me entró el gusanillo de probar <a href="http://www.symfony-project.org/" target="_blank">symfony</a>. Pero de probarlo de verdad, ya que a veces hacemos incursiones con algún <a href="http://es.wikipedia.org/wiki/Framework" target="_blank">framework</a> pero no llegamos a investigar como funciona realmente, ni porque.</p>
<p>Por tanto a partir de esta noche, voy a empezar a investigar sus entrañas y practicar un poco con este framework (<a href="http://es.wikipedia.org/wiki/Symfony" target="_blank">symfony</a>).</p>
<p><img class="alignnone size-full wp-image-319" title="jobeet_pmn" src="http://www.joanballestermoragues.com/blog/wp-content/uploads/jobeet_pmn.jpg" alt="jobeet_pmn" width="188" height="260" /></p>
<p>De primeras hay muchos frameworks, y en realidad, si te pones a leer sus descripciones todos hacen lo mismo, o quieren hacerlo. Supongo que las diferencias entre ellos estriban en:</p>
<ul>
<li>Facilidad de aprendizaje</li>
<li>Rapidez de uso</li>
<li>Modularidad para meter otros componentes</li>
<li>Rendimientos en el servidor</li>
</ul>
<p>Como siempre, sólamente puedes opinar &#8220;desde dentro&#8221;, es decir, sabiendo de verdad como actúa, y en resumen, eso haremos, investigarlo desde dentro :)</p>
<p>Os iré informando, a medida que vaya terminando los pasos del tutorial miraré de montar un post con las dificultades o facilidades que me he ido encontrando.</p>
]]></content:encoded>
			<wfw:commentRss>http://joanballestermoragues.com/programacion-desarrollo/symfony-minuto-0-empezando.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

