Separación de presentación y contenido
Dos de mis últimos 3 proyectos han sido desarrollados en PHP, haciéndo uso del excelente framework Horde.
Horde es conjunto de clases, herramientas y forma de trabajo maduro y bien pensado. Tiene clases y funciones que atienden los problemas más comunes de un desarrollo, permitiendo concentrarse en la solución del problema de negocio, no en la infraestructura de software. Pero sorprendementemente Horde carece de un sistema de Templates.
Aquellos que han aprendido la lección a la mala, saben lo valiosísimo (indispensable diría yo) que es un sistema de templates, especialmente uno que sea eficiente.
Horde se limita a tener diferentes “templates” que no son más que porciones de HTML con este estilo:
…
<tr>
<td>
<strong><?php echo $myvalue; ?></strong>
</td>
</tr>
Esta forma de programación “sucia” le ha ganado críticas a Horde. Algunas personas me han han hecho saber su disgusto por la falta de Templates y quiero confesar que inicialmente quedé un poco decepcionado por la misma razón, pero al poner en la balanza los beneficios se justificó la selección.
Podría extrañar que un sistema bien pensado carezca de una forma integrada de separar la presentación del contenido. Meter el código dentro del HTML suena terrible y se antoja a problemas futuros.
Pero ayer entendí la razón.
Entendemos como separar la presentación del contenido como apartar el código del lenguaje de programación del HTML (en el caso de aplicaciones WEB). La mayoría de los sistemas de templating siguen este creencia al pie de la letra. Todas ellas se basan en el concepto de “tags” que se incrustan dentro del HTML y que serán sustituidos por el sistema de templates.
Generalmente un tag tiene una forma similar a:
<!-- ###DOCUMENT_BODY### -->
<h1>
<!-- ###INSIDE_HEADER### -->
Header del documento
<!-- ###INSIDE_HEADER### -->
</h1>
<!-- ###DOCUMENT_BODY### -->
Claramente separa la presentación del contenido. Pero hay una mejor forma de hacer esto. Y es usando el código PHP dentro del HTML como lo hace Horde. Porqué? La razón es sencilla. Generalmente se tiene la idea de que hay que separar el código de la presentación para lograr la separación del contenido.
Pero esto no es necesario. Lo que en verdad se necesita es separar la lógica de negocio de la lógica de presentación. Usar PHP dentro del HTML no solo puede ser aceptable sino hasta más eficiente que los sistemas de Templates que conocemos.
Ahora, hay quienes argumentan que un diseñador no sabe programar. Pero no es necesario que sepa hacerlo. Solo hay que utilizar operaciones sencillas como echo o loops básicos, los cuales el programador puede facilitar sin problema. Sistemas como Smarty resultan en PHP dentro del HTML, pero los tags de sustitución pueden ser hasta más complejos que el mismo PHP.
Porque reinventar la rueda ? Usa PHP para la lógica de presentación.
Totalmente de acuerdo. Mas aun, php (y jsp, asp, etc.) fueron diseñados para facilitar la presentacion de las paginas por medio de la MEZCLA de HTML y codigo. Lo que le hace falta a PHP es el manejo de tag libraries que permitan encapsular pedazos de codigo en librerias externas.
<?=$variable?>
¿Tampoco es tán distinto a las típicas plantillas, no? Hace lo mismo que <?php echo $variable; ?> y nos ahorramos el echo y el punto y coma. No hay rastro de programación.
justamente, nota en Sitepoint sobre este mismo tema.
http://www.sitepoint.com/article/1218/2
Muy Interesante.
Week-log
El “breve recorrido sobre los post de esta semana que me llamaron la atención” ™…
yo estoy armando un proyecto de CMS para weblog en PHP y luego de probar sistemas de templates quedé por usar PHP directo en el código y lo mejor, para el diseñador, funciones sencillas, por ejemplo:
si un diseñador no puede usar eso no puede ni hablar entonces, jejee, bien sencillo, funciones que le faciliten la tarea y listo.
Un inconveniente del uso de php para la lógica de presentación es que la mayoría de herramientas WYSWYG no muestran los tags o al editar la web, y se hace más complicada la edición de la web para un diseñador que no conoce php.
¿Cómo hago, para que mi acceso directo a HORDE, sea igual a lo que hizo namezero, en http://mail.namezero.com ?
Si alguien podría ayudarme, se lo agradeceré: justo@faxjuveni.com
Justo