Pregunta

Estoy tratando de trabajar con FatFree Framework e intento usar el motor de plantilla. Renderizo la plantilla con el siguiente código -

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

El problema al que me enfrento es que, dentro del archivo plantplate.php, se reconocen las etiquetas F3, 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í ambos var1 is present y var1 not present se imprime independientemente del valor de var. Además, PHP para bucles no funcionan, por lo que básicamente todo el código PHP no funciona.

Sin embargo, si usé <F3:check> Para escribir el código PHP anterior, entonces todo funciona bien. No podemos usar el código PHP en plantillas. Si este es el caso, esta es una limitación grave.

¿Fue útil?

Solución

He encontrado la respuesta, aunque realmente no me gusta.

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

Con F3::render() puede evaluar las expresiones de PHP y usar el F3::get() Para recuperar variables. Según el sitio web: "The only issue with embedding PHP code in your templates is the conscious effort needed to stick to MVC principles"

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

Entonces, básicamente, y sí apesta y no tiene sentido, puede evaluar el código PHP en el F3::render() y no puedes usar variables de plantilla ({{@var}}) -O- puedes usar Template::serve() Y solo está limitado a llamar a las funciones de PHP, y no a evaluar realmente el código PHP.

Otros consejos

¿Quizás intentar usar un motor de plantilla diferente que le permitirá definir más fácilmente la dependencia variable de bloques?

Por ejemplo en Phptal http://phptal.org/manual/en/split/tal-condition.html Puedes hacerlo así:

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

Es indocumentado pero puede poner código dentro {~ ~} en una plantilla y se convertirá en <?php ?> Cuando se compila la plantilla (usando v3.6).

p.ej {~ @color = 'red' ~} se convertirá <?php $color = 'red' ?>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top