{"id":621,"date":"2007-08-09T13:40:30","date_gmt":"2007-08-09T16:40:30","guid":{"rendered":"http:\/\/www.maurom.com\/blog\/?p=621"},"modified":"2013-09-03T18:06:00","modified_gmt":"2013-09-03T21:06:00","slug":"phptal-un-lenguaje-de-plantillas-para-php-basado-en-zpt","status":"publish","type":"post","link":"https:\/\/maurom.com\/blog\/2007\/08\/09\/phptal-un-lenguaje-de-plantillas-para-php-basado-en-zpt\/","title":{"rendered":"PHPTAL: un lenguaje de plantillas para PHP basado en ZPT"},"content":{"rendered":"<p>Estos d\u00edas estuve trabajando bastante en <a href=\"http:\/\/en.wikipedia.org\/wiki\/Python\">Python<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Zope\">Zope<\/a> y <a href=\"http:\/\/en.wikipedia.org\/wiki\/Plone\">Plone<\/a>, un conjunto de tecnolog\u00edas que me parecen atractivas y muy vers\u00e1tiles, y en el transcurso del aprendizaje natural encontr\u00e9 las <a href=\"http:\/\/www.zope.org\/Documentation\/Books\/ZopeBook\/2_6Edition\/ZPT.stx\">Zope Page Templates (ZPT)<\/a>, que es un lenguaje para creaci\u00f3n de plantillas diferente a los normales, pues en vez de crear tags HTML nuevas, a\u00f1ade atributos a las etiquetas existentes.<\/p>\n<p>Seg\u00fan el <a href=\"http:\/\/www.zope.org\/Documentation\/Books\/ZopeBook\/\">Zope Book<\/a>, \u201cel objetivo de las <span style=\"font-style: italic;\">Page Templates<\/span> es permitir a los dise\u00f1adores y programadores trabajar en conjunto f\u00e1cilmente. Un dise\u00f1ador puede utilizar un editor HTML visual (el cl\u00e1sico WYSIWYG como Dreamweaver, NVU o Front*cofff*Page) para crear una plantilla, que luego el programador puede editar para hacerla parte de una aplicaci\u00f3n. Si es necesario, el dise\u00f1ador puede volver a cargar la plantilla en su editor visual y hacer cambios en la estructura y apariencia. Tomando ciertos recaudos, el trabajo de edici\u00f3n se puede realizar sin dificultades y no interfiere con la aplicaci\u00f3n.<\/p>\n<p>\u201cLas <span style=\"font-style: italic;\">Page Templates<\/span> apuntan a lograr este objetivo adoptando tres principios:<\/p>\n<ol>\n<li>Permitir la creaci\u00f3n y modificaci\u00f3n de las p\u00e1ginas con herramientas visuales.<\/li>\n<li>Lo que ve es <span style=\"font-style: italic;\">muy similar<\/span> a lo que obtiene (WYSIVSTWYG).<\/li>\n<li>Mantiene el c\u00f3digo fuera de las plantillas, salvo la l\u00f3gica estructural.<\/li>\n<\/ol>\n<p>Una Page Template es como un modelo de la p\u00e1gina que generar\u00e1. En particular *es HTML v\u00e1lido* (e incluso *XHTML v\u00e1lido*!)<\/p>\n<p>Redondeando, quiere decir que nuestro editor visual no har\u00e1 desastres con la plantilla, como suele ocurrir con otros lenguajes de plantillas, ya que no hay etiquetas extra\u00f1as sino atributos en nuevos las etiquetas actuales (y s\u00f3lo dos namespaces opcionales).<\/p>\n<p>Como me pareci\u00f3 muy c\u00f3modo me puse a buscar si en PHP hab\u00eda algo similar, y efectivamente unos buenos muchachos han portado esta idea creando el <a href=\"http:\/\/phptal.motion-twin.com\/\">PHP Template Attribute Language (PHPTAL)<\/a> que es una implementaci\u00f3n de ZPT para <abbr title=\"PHP Hyper Processor\">PHP<\/abbr> . En res\u00famen, es una librer\u00eda de generaci\u00f3n de plantillas XML\/XHTML para PHP.<\/p>\n<p>PHPTAL actualmente va por la versi\u00f3n 1.1.8 y se <a href=\"http:\/\/phptal.motion-twin.com\/download.html\">distribuye<\/a> como standalone o empaquetado para <a href=\"http:\/\/pear.php.net\/\">PEAR<\/a>. En <a href=\"http:\/\/phptal.motion-twin.com\/introduction.html\">la introducci\u00f3n<\/a> hay un ejemplo muy ilustrativo de como funciona la herramienta.<\/p>\n<p>Algunas ventajas:<\/p>\n<ul>\n<li>impone mayor separaci\u00f3n entre l\u00f3gica y presentaci\u00f3n,<\/li>\n<li>advierte si se olvid\u00f3 de cerrar alguna etiqueta HTML o si la p\u00e1gina est\u00e1 malformada,<\/li>\n<li>ya no es necesario utilizar htmlentities,<\/li>\n<li>las plantillas quedan limpias y legibles,<\/li>\n<li>permite insertar texto de ejemplo para previsualizar la plantilla sin necesidad de ejecutarla con PHP,<\/li>\n<li>se integra bastante bien con editores visuales,<\/li>\n<li>permite la abstracci\u00f3n de datos con un sistema similar a <a href=\"http:\/\/en.wikipedia.org\/wiki\/XPath\">xpath<\/a>.<\/li>\n<\/ul>\n<p>Algunas desventajas:<\/p>\n<ul>\n<li>es una dependencia de la aplicaci\u00f3n,<\/li>\n<li>hay que aprenderse los atributos,<\/li>\n<li>hay que producir XHTML l\u00edmpio (aunque esto no ser\u00eda una desventaja).<\/li>\n<\/ul>\n<p>Para mayor informaci\u00f3n les dejo el enlace a la <a href=\"http:\/\/phptal.motion-twin.com\/manual\/en\/\">gu\u00eda de referencia de PHPTAL<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estos d\u00edas estuve trabajando bastante en Python, Zope y Plone, un conjunto de tecnolog\u00edas que me parecen atractivas y muy vers\u00e1tiles, y en el transcurso del aprendizaje natural encontr\u00e9 las Zope Page Templates (ZPT), que es un lenguaje para creaci\u00f3n de plantillas diferente a los normales, pues en vez de crear tags HTML nuevas, a\u00f1ade [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8,24,9,15],"_links":{"self":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/posts\/621"}],"collection":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/comments?post=621"}],"version-history":[{"count":0,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/posts\/621\/revisions"}],"wp:attachment":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/media?parent=621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/categories?post=621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/tags?post=621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}