Sistemas de plantillas para PHP o PHP como sistema de plantillas

Cuantas veces este ha sido motivo de debate. ¿Merece la pena utilizar un sistema de plantillas estilo smarty para php?. ¿Acaso no es php un lenguaje de script suficientemente limpio y potente como para poder valerse por si solo como motor de plantillas?. ¿Que diferencia encontráis entre estas 2 lineas?:
[html]

{nombre}

[/html]
¿De verdad creéis que la primera es mas sencilla?.

Como ya habréis intuido yo nunca estuve de acuerdo en utilizar un lenguaje añadido de plantillas, básicamente porque no me aporta nada. Por supuesto que estoy de acuerdo en separar las capas de presentación y lógica pero esto lo podemos hacer tanto con php como no hacerlo con cualquier motor de plantillas. Todo depende de como lo utilicemos.

Pero yo prefiero esto:
[php]
//posts.php
$posts = getPosts();
include(“posts.html”);
[/php]
[html]
//posts.html

getTitle()?>

[/html]

y no esto:

[php]
//posts.php
require(“smarty/Smarty.class.php”);
$template = new Smarty;

$template->template_dir=”.”;
$template->assign(“posts”,getPosts);
$template->display(posts.html);
[/php]
[html]
//posts.html

{foreach from=$posts item=post}

{person.getTitle}

{/foreach}

[/html]

Por cierto tanto cakephp como zend framework han adoptado la primera opción de forma nativa, lo que no quiere decir que no existan plugins para poder utilizar algún lenguaje propio de plantillas.

  • http://caligari.treboada.net caligari

    Al nivel del ejemplo que estás poniendo estoy de acuerdo en que nos puede dar lo mismo, pero ¿has evaluado la rapidez de ejecución de uno y de otro? Y no estoy hablando de 2 o 10 variables, si no de muchas más; ¿y si tienes que hacer “includes” porque un portal está hecho a muchos cachos no te parece que se lía la cosa?; y si tienes que generar la salida para varios documentos (wml, xml, etc) ¿vas a estar replicando los bucles, condicionales en cada uno de ellos?; pero sobre todo, no le dejes ese html con código php a un diseñador, porque ya sabes lo que puede pasar. Todo “depende”, como siempre ;-)

  • http://www.jsanroman.net jsanroman

    Sigo en las mias :-) .
    En cuanto a rapidez de ejecución y consumo de recursos estoy convencido de que con un sistema de plantillas la cosa va a peor a no ser que hagamos uso de los sistemas de caché que suelen implementar, que tienen sus ventajas e inconvenientes.
    Si hay que hacer includes, pues < ?include(xxx);?> no me parece una instrucción mas compleja que {include[xxx]} por ejemplo.
    Si hay que generar la salida para varios tipos de documentos, pues tendremos una clase o lo que sea que seleccionará el tipo de salida y realizará un include u otro en base a ello, si tienes lógica en tu capa de presentación claro que tendremos que replicarla pero sino no.
    Los bucles condicionales y demás lógica pues igual que las plantillas, la podrás hacer en tu propia vista (mal hecho, pero con un sistema de plantillas también podrías) o la podrás hacer en tu fichero encargado de la ĺógica de negocio. Al final la idea es que al .html solo lleguen las estructuras de datos que necesitarás mostrar.