2008-10-13 26 views
5

¿Cuál es el mejor/más fácil de integrar sistema de plantillas para PHP, y cuáles son los beneficios de usar uno?¿Qué es un buen sistema de plantillas para PHP?

Actualmente no uso ninguno, y creo que podría ayudar a separar el contenido de la presentación un poco más.

+0

Como dice @Jrgns, aquí hay un desglose más completo: http://stackoverflow.com/questions/62617/whats-the-best-way-to-separate-php-code-and-html – Kzqai

+0

Para obtener más información información, vea [esta pregunta] (http://stackoverflow.com/questions/62617/whats-the-best-way-to-separate-php-code-and-html) – Jrgns

Respuesta

12

Smarty


que he encontrado que sea rápido, fácil de usar y fácil de instalar (incluso en un entorno de alojamiento compartido). Asimismo, no requieren el uso de validación de XHTML que es útil a veces (aunque creo que los motores de plantilla que hacer requieren XHTML son probablemente más rápido.)

Es muy agradable tener su contenido en un solo lugar y el código en algún otro lugar.

Además, no está limitado a solo HTML. He usado Smarty para generar XML e incluso SQL.

+0

También es ideal para generar mensajes de correo electrónico en tanto texto sin formato como HTML. –

+0

Ese es un excelente ejemplo que no había considerado. –

1

Además de la experiencia de Mark, he encontrado Smarty adecuado para la extensión. Creé un framework MVC (corporativo) con vistas integradas basadas en Smarty, que era fácil y flexible. El anfitrión de las funciones auxiliares de plantillas disponibles también se puede ampliar con mucha facilidad.

+0

Yo también. Además, utilizo el envoltorio Friendly View para Smarty que usa getters/setters indirectos para asignar variables a la etiqueta Smarty. Gracias a las vistas de __toString se pueden anidar fácilmente dentro de las vistas. –

0

Depende de su enfoque: diferentes motores de plantillas pueden ser mejores para diferentes cosas. Smarty es relativamente pesado en comparación con algunos, y define una sintaxis que es más simple pero más restringida que PHP. La utilización de una sintaxis es menos parecida a un lenguaje de programación, por ejemplo, si va a pedirle a un diseñador gráfico que cree sus plantillas.

Un motor de plantilla como Savant3, o el usado en los componentes Zend_View del Zend Framework es más liviano y usa PHP como sintaxis. Esto le da más poder y flexibilidad en sus plantillas, pero requiere que sea disciplinado para mantener la lógica comercial fuera de las plantillas. Además, la sintaxis de PHP puede ser demasiado compleja para su diseñador, si va a construir las plantillas.

14

PHP es un lenguaje de plantillas bastante bueno en sí mismo. La mayoría de los principales marcos de PHP no usan un lenguaje de plantillas separado por esta razón.

Solo asegúrese de utilizar MVC (algo parecido) y no haga ningún acceso de datos o lógica comercial dentro de sus archivos de visualización.

También he usado Smarty extensamente, pero encuentro que tiene poca ventaja en comparación con PHP directo, excepto que te obliga a mantener tu vista muda. También podría parecer un poco mejor para los diseñadores, pero el inconveniente es la flexibilidad para usted, el implementador de la plantilla. Cosas como el bucle sobre matrices triples se vuelven más difíciles que con PHP directo.

+0

Alex, tienes razón por supuesto. Sin embargo, "mantener su vista tonta" (para el personal diseñador/no programador) a menudo es precisamente la razón por la que se usa un sistema de plantillas. Además de hacerlo superficialmente más fácil, también previene errores (fatales) por parte de usuarios "estúpidos". –

3

Para dar seguimiento a lo que dijo Alex, sugiero echar un vistazo al artículo de Rasmus Lerdorf The no-framework PHP MVC framework.

Rasmus Lerdorf es el tipo que creó PHP.

+0

¿Qué tiene esto que ver con los motores de plantilla que no sea uno? – rick

+0

¡No es un armazón, es un marco! El código es absolutamente horrible: Html generado en código. Cada clase de controlador tiene que repetir lo mismo incluye, y no hay enrutamiento disponible ya que Rasmus tiene alergia ilógica a los controladores frontales. – rick

0

Personalmente me gusta la idea de usar archivos PHP/HTML separados. Me permite usar otros editores HTML si quiero (como DreamWeaver) y también puedo permitir que las personas que no conocen PHP, pero que saben HTML, editen las plantillas sin tener que aprender otro idioma.

+0

¿Cómo se logra esto exactamente? – Kzqai

+0

La respuesta simple: en su archivo PHP, incluye un archivo PHP anoter que incluye el HTML y posiblemente algunos PHP simples. Y cada vez que genere HTML dentro del archivo PHP, intente moverlo a HTML (pero solo cuando tenga sentido, sin complicar demasiado las cosas). Avíseme si esto responde a su pregunta o si desea un ejemplo. –

+0

Correcto, entonces estás hablando de scripts simples que tienen algo de sintaxis php, no archivos html puros. Me preguntaba si te referías a un sistema como el enlive de clojure (http: // stackoverflow.com/questions/3248235/is-there-a-html-only-templates-system-for-php que usa los selectores css en html puro para recomponerlo) para el lenguaje php, ya que he estado buscando las posibilidades para eso . – Kzqai

0

He usado Smarty durante años, pero me he sentido frustrado porque la sintaxis especial de smarty se puso en el camino, donde algunos php simples serían mucho más fáciles. ¡PHP Itselves es en esencia un lenguaje de plantilla! Aprendí que php api es lo suficientemente apto para toda la lógica de presentación.

Savant3 y su descendiente Zend_View son por lo tanto soluciones superiores. Al igual que en Smarty, puede escribir fácilmente complementos para tareas repetitivas.

3

Apuesto por PHPTAL.

Comprueba la sintaxis del archivo y asegura que la salida está bien formada XML con el escape correcto. Esto asegura que las páginas son seguras contra ataques XSS sin que el programador tenga que preocuparse por ello cada vez.

Smarty y PHP prima no manejan escapar de forma automática, lo que significa que cada echo $foo o ${foo} (sin |escape} o htmlspecialchars()) podría ser la vulnerabilidad de inyección HTML o al menos romper la buena formación.

PHPTAL tiene una sintaxis agradable que se adapta a cómo funciona HTML/XML, p. usted no tiene que repetirse cuando se desea envolver condicionalmente algo en una etiqueta:

<strong tal:omit-tag="condition"> 
    xxx 
</strong> 

en lugar de:

{if condition}<strong>{/if} 
    xxx 
{if condition-again!}</strong>{/if} 

Y la sintaxis XML es sin ser demasiado prolijo (en su mayoría sólo son atributos adicional). No hay una fea combinación de HTML y construcciones tipo etiquetas personalizadas.

+0

a cada uno, propio, creo que tal: omit-tag es feo. Además, si hay una gran cantidad de datos entre las etiquetas fuertes, puede que no sea obvio cuando llegue a la etiqueta de cierre que puede no estar siempre allí. – DGM

+0

Renuncié a phptal por 3 razones: incluir plantillas parciales con el espacio de nombres "metal:" era confuso y feo. Las etiquetas TAL pueden ser detalladas y confusas para una lógica de visualización más compleja. Crear modificadores personalizados fue doloroso. – rick

+0

@DGM: podría olvidarse de que es opcional, pero no tendrá consecuencias tan grandes como olvidarlo en otros motores (lo que le permitirá tener una etiqueta de apertura y cierre desincronizada, lo que nunca es bueno) . – Kornel

1

Quizás la razón más convincente para utilizar un motor de plantillas es el escape de salida predeterminado que puede reducir o eliminar las vulnerabilidades xss.

Cuestiones relacionadas