2012-02-16 23 views
6

Estoy intentando trabajar con el framework FatFree y tratando de usar el motor de plantillas. Me hacen la plantilla con el siguiente código -Código PHP en la plantilla FatFree

echo Template::serve('template.php'); 

El problema que estoy enfrentando es que, en el interior del archivo template.php la F3 se reconocen las etiquetas pero cualquier código PHP no funciona. Por ejemplo, si tengo el siguiente código en el archivo template.php -

<?php 
if (F3::get('var') == 'var1') { 
    ?> 
    <span>var1 is present</span> 
    <?php 
} else { 
    ?> 
    <span>var1 not present</span> 
    <?php 
} 
?> 

Aquí, tanto var1 is presentvar1 not present y se imprime con independencia del valor de la var. Además, los bucles php for no funcionan, por lo que básicamente todo el código php no funciona.

Sin embargo, si utilicé <F3:check> para escribir el código PHP anterior, todo funciona bien. ¿No podemos usar código PHP en plantillas? Si este es el caso, esta es una limitación seria.

+0

Eso es interesante ... Estoy buscando en ella. Lo estoy usando ahora mismo y aún no he probado ese aspecto. –

+0

Sí, si usa Template no puede usar PHP, necesita usar etiquetas de plantilla f3. Necesito usar View si necesita usar PHP como motor de plantillas, creo. Pero no veo ningún inconveniente allí. – amilaishere

Respuesta

8

He encontrado la respuesta, aunque realmente no me gusta.

Hay dos funciones diferentes, F3::render() y Template::serve()

Con F3::render() se puede evaluar expresiones PHP y utilizar el F3::get() para recuperar variables. De acuerdo con el sitio web: "The only issue with embedding PHP code in your templates is the conscious effort needed to stick to MVC principles"

El Template::serve() es solo para plantillas. Lo que significa es simplemente procesar el lenguaje de plantillas.

Así que, básicamente, y sí que es una mierda y que no tiene sentido, se puede evaluar código PHP en el F3::render() y no se puede utilizar variables de plantillas ({{@var}}) -O- Puede utilizar Template::serve() y que están limitados a solamente llamar a funciones de PHP y no evaluar realmente el código PHP.

+0

Gracias por la respuesta. Creo que puedo vivir con eso, aunque es una pregunta seria sobre el marco mismo. Ningún otro marco (Pilones por ejemplo) hace eso. Usted dice que uno puede llamar funciones PHP sin embargo. ¿Dónde están ubicadas esas funciones y cómo puedo llamarlas? – Siddharth

+5

Puede llamar a cualquier función '{{date ('m/d/Y', @ timestamp)}}' o utilizo una función creada definida en la página index.php para explotar datos, '{{explosion (@delim, @ phrase, 0)}} '. Creo que lo principal es que '{{}}' son esencialmente etiquetas cortas ' 'por lo que puedes hacer cualquier cosa entre corchetes que puedas hacer con las etiquetas cortas. –

+0

No creo que sea una mierda, sino que es un ejemplo más de lo que parece ser un "diseño intencional" para limitar la "grasa" (es decir, PHP) en plantillas/vistas (juego de palabras intencionado). Con segmentos condicionales a través de y segmentos repetibles a través de no debería haber mucha necesidad de código PHP en una plantilla y si hay una necesidad de PHP complejo, entonces evalúelo en el controlador al que pertenece y acceda a él como una variable en su plantilla.Separación de código mucho mejor ya que los diseñadores de UI no necesitan preocuparse por la programación y los programadores pueden centrarse en el back-end. – nikolaosinlight

0

¿Quizás intente utilizar un motor de plantillas diferente que le permita definir más fácilmente la dependencia de variables de bloques?

Por ejemplo, en PHPTal http://phptal.org/manual/en/split/tal-condition.html que puede hacerlo así:

<div tal:condition="php: var == 'var1'"> 
.... 
</div> 
+0

¿Por qué? El motor de plantilla integrado sin grasa ya tiene la lógica del segmento condicional , ya que incluso el OP se menciona a sí mismo, lo que resuelve perfectamente su problema. Creo que el problema es que OP prefiere poner PHP en sus plantillas, lo que no es necesariamente bueno si se tiene en cuenta el diseño frente a la programación y la separación de las preocupaciones w.r.t. MVC. – nikolaosinlight

Cuestiones relacionadas