テンプレート
ネストされたテンプレート
parse() 関数の優れた特徴の 1 つは、some_color がテンプレート変数であるのと同様に、この関数が作成する MyOutput ハンドルが実際のテンプレート変数であることです。したがって、{MyOutput} タグを持つ別のテンプレートがある場合、2 番目のテンプレートを解析すると、すべての
{MyOutput} タグが MyOutput の解析されたテキストに置き換えられます。この機能を使用すると、テンプレート ファイルを別のテンプレート
に埋め込むことができます。したがって、次のコンテンツを含む、wholePage.ihtml という別のテンプレートがある可能性があります:
申し訳ありませんが、当選しませんでした。しかし、あなたが勝った場合、私たちはあなたにこう言います:
{MyOutput}
そして、wholePage.ihtml が分析された後の最終結果は次のようになります:
申し訳ありませんが、あなたは勝てませんでした。しかし、もしあなたが勝ったら、私たちはあなたにこう言います:
おめでとうございます!新しい青いホンダ プレリュードが当たります!
以下は 2 つのテンプレートを分析するための PHP コードです:
$t = new Template("/home/mydir/mytemplates/"); これらの 3 行は、最初の例
$t->set_file("MyFileHandle","MyTemplate.ihtml");
$t->set_var("some_color",$my_color);
$t->parse("MyOutput",") MyFileHandle" );
// p() を呼び出していないことに注意してください
// ここでは、まだ何も出力されていません
// 次に、2 番目のテンプレートを分析します
$t->set_file("WholeHandle","wholePage. ihtml" );
// WholePage.ihtml には "{MyOutput}" が含まれています
$t->parse("MyFinalOutput","WholeHandle");
// すべての {MyOutput} が置き換えられます
$t- >p("MyFinalOutput");
// MyFinalOutput の値を出力します
?>
parse() と p() を呼び出すステートメントの最後の 2 行は、短縮関数 pparse() に結合できます。 pparse( "MyFinalOutput","SecondHandle");
PHPLIB テンプレートのもう 1 つの特徴は、set_file() 関数と set_var() 関数がハンドル/配列
を渡すことによって、一度に複数の値のセットを受け取ることもできることです。配列。以下に例を示します。
$t->set_file(array( "pageOneHandle" => "pageone.ihtml",
"pageTwoHandle" => "pagetwo.ihtml")); ->set_var(array( "last_name" => "Gates",
"first_name" => "Bill",
"net_worth" => $reallybignumber));データを置換するのではなくテンプレート変数に追加したい場合は、parse() と pparse() に 3 番目の引数を渡すことができます。 $t->parse("MyOutput","MyFileHandle", true); のように、3 番目のパラメータとして true を使用するだけで、parse() と pparse() を呼び出すことができます。 MyOutput に既にデータが含まれている場合、MyFileHandle が解析され、MyOutput 内の既存のデータに追加されます。この手法は、テンプレートがすでにあり、同じテキストを複数回繰り返す場合 (たとえば、データベース クエリの結果に複数の行をリストする場合など) に便利です。次の例のように、変数を配列で表示することもできます。
$t = new Template("/home/mydir/mytemplates/"); $t->set_file(array("mainpage") => "mainpage.ihtml", "each_element" => "each_element.ihtml"));reset($myArray);while (list($elementName, $elementValue) = each($myArray)) {
// 'value' と 'name' を各要素の値と名前に設定します
$t->set_var("name",$elementName); $t->set_var("value",$elementValue); each_element のコピーを追加します
$t->parse("array_elements","each_element",true);}$t->gt;pparse("output","mainpage");?>
この例では 2 つのテンプレートを使用しています、mainpage.ihtml、および each_element.ihtml。 mainpage.ihtml テンプレートは次のようになります:
配列は次のとおりです:
{array_elements}
上記の {array_elements} タグは each_element.ihtml のコピーに置き換えられ、これは以下に基づいて再作成されます。配列 ($myArray)
複合体。 each_element.ihtml テンプレートは次のようになります:
{name}: {value}
結果は、$myArray 要素を含む適切にフォーマットされたテーブルになります。しかし、2 つのテンプレートを 1 つにマージした方が良いと思いませんか?実際、テンプレート ブロックを使用してこれらを組み合わせることができます。テンプレート ブロックを使用すると、テンプレートからテキストのブロックを取得できるので、それを何度も繰り返したり、好きなことを実行したりできます。ただし、この機能については別の記事で説明します。