PHPで単純なテンプレートレイヤーを書いていますが、少し行き詰まっています。現時点での仕組みは次のとおりです。
まずfetch_template
、データベースからテンプレートの内容をロードするために使用します-これは機能します(興味があれば、起動時にすべてのテンプレートを収集します)。
テンプレートコードとロジックでPHP変数を使用しています-例:
// PHP:
$name = 'Ross';
// Tpl:
<p>Hello, my name is $name.</p>
次に、output_template
(以下)を使用して、テンプレート内の変数を解析し、それらを置き換えます。以前は、栄光のstr_replace
テンプレートクラスでテンプレートタグを使用していましたが、非効率的でした。
/**
* Returns a template after evaluating it
* @param string $template Template contents
* @return string Template output
*/
function output_template($template) {
eval('return "' . $template . '";');
}
私の問題は、まだ推測していない場合、変数が関数内で宣言されていないことです-したがって、$template
グローバルスコープに配置しない限り、関数は変数を解析できません-これを実行したいかどうかはわかりません。それまたは関数のパラメーターとして変数の配列を持っている(これはさらに退屈に聞こえますが、可能です)。
関数を使用するのではなく、関数のコード(ワンライナーのみ)をコードで使用する以外の解決策はありますか?
ありがとう、ロス
追伸私はSmartyとそこにある幅広いテンプレートエンジンについて知っています-私はそれらを使用するつもりはないので、それらを提案しないでください。ありがとう!