7

FatFree フレームワークを使用して、テンプレート エンジンを使用しようとしています。次のコードでテンプレートをレンダリングします -

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
}
?>

ここでは、var の値に関係なく、var1 is presentとの両方が出力されます。var1 not presentまた、php for loops が機能していないため、基本的にすべての php コードが機能していません。

ただし、<F3:check>上記の PHP コードを書いていた場合は、すべて正常に動作します。テンプレートで PHP コードを使用できませんか。これが事実である場合、これは深刻な制限です。

4

3 に答える 3

8

あまり好きではありませんが、答えを見つけました。

2 つの異なる機能があり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 コードの評価。

于 2012-02-21T03:21:28.617 に答える
0

ブロック変数の依存関係を簡単に定義できる別のテンプレート エンジンを使用してみてはいかがでしょうか。

たとえば、PHPTal http://phptal.org/manual/en/split/tal-condition.htmlでは、次のように実行できます。

<div tal:condition="php: var == 'var1'">
....
</div>
于 2015-09-02T12:17:57.733 に答える
0

文書化されていませんが、テンプレートにコードを入れることができ、テンプレートがコンパイルされたとき{~ ~}に変換されます<?php ?>(v3.6 を使用)。

例えば{~ @color = 'red' ~}、なる<?php $color = 'red' ?>

于 2019-07-02T15:11:55.737 に答える