PHP -код в шаблоне fatree
-
25-10-2019 - |
Вопрос
Я пытаюсь работать с Fatfree Framework и пытаюсь использовать шаблонный двигатель. Я отображаю шаблон со следующим кодом -
echo Template::serve('template.php');
Проблема, с которой я сталкиваюсь, заключается в том, что внутри файла Template.php теги F3 распознаются, но любой код PHP не работает. Например, если у меня есть следующий код в файле Template.php -
<?php
if (F3::get('var') == 'var1') {
?>
<span>var1 is present</span>
<?php
} else {
?>
<span>var1 not present</span>
<?php
}
?>
Здесь оба var1 is present
а также var1 not present
печатается независимо от значения Var. Кроме того, PHP для петли не работает - поэтому в основном весь код PHP не работает.
Однако, если я использовал <F3:check>
Чтобы написать приведенный выше код PHP, тогда все работает нормально. Не можем ли мы использовать код PHP в шаблонах. Если это так, это серьезное ограничение.
Решение
Я нашел ответ, хотя мне это не очень нравится.
Есть две разные функции, F3::render()
а также Template::serve()
С F3::render()
Вы можете оценить выражения PHP и использовать F3::get()
Чтобы получить переменные. Согласно веб -сайту: "The only issue with embedding PHP code in your templates is the conscious effort needed to stick to MVC principles"
А Template::serve()
только для шаблона. Это означает, что это просто для обработки языка шаблона.
Так что в основном, да, это отстой и не имеет смысла, вы можете оценить код PHP в F3::render()
и вы не можете использовать шаблонные переменные ({{@var}}
) -Или вы можете использовать Template::serve()
И вы ограничены только вызовом функций PHP, а не по -настоящему оцениваете код PHP.
Другие советы
Может быть, попытаться использовать другой шаблонный двигатель, который позволит вам легче определить зависимость от переменной блоки?
Например, в phptal http://phptal.org/manual/en/split/tal-condition.html Вы можете сделать это так:
<div tal:condition="php: var == 'var1'">
....
</div>
Это незарегистрировано, но вы можете поместить код в {~ ~}
в шаблоне, и он будет преобразован в <?php ?>
Когда шаблон составлен (с использованием v3.6).
например {~ @color = 'red' ~}
станет <?php $color = 'red' ?>