現在、ほとんどのテンプレート クラスはブロック機能を提供していますが、未定義の要素が複数層ある場合には、ブロック ネストを使用することが多くなります。以下では、ブロックのネストを処理する方法を説明するために例を使用します。
1. まず、例によって達成される効果を見てみましょう (図 1):
2. テンプレート ファイル test.htm
テンプレート ファイルは、お気に入りの Web エディターを使用できます。外観を編集するには
無題ドキュメント
{myname}テスト ブロック |
私の動植物園: |
{animal}< /td> |
{plant} |
3 以下は、php コード ファイル test.php
です。
include_once("template.inc");
$t = 新しいテンプレート(".");
$myname = "子豚のルル";
/****************************************
動物配列は最初のループデータとして使用されますレイヤーブロック、
プラント配列は 2 番目のレイヤーブロックのループデータとして使用されます
必要に応じてデータベースから読み取ることもできます
************ ************ *****************/
$animal = array(" 動物","植物");
$plant = array(array("子豚","小白","小強"),array("バラ","ひまわり"));
$t -> set_file("myfilehandle","test.htm");
// テンプレート内の {myname} は $myname
$t->set_var("myname",$myname); の値に置き換えられます。
/****************************************
ブロックを設定する、まず最初の層のブロックを設定し、ファイル文
ハンドル myfilehandle で、次に 2 層目のブロックを設定します。
ファイルハンドルは 1 層目のブロックです。 2つの文の順序に注意してください
*************************************/
$t->set_block("myfilehandle","animalList","a");
$t->set_block("animalList","plantList","p" );
// ブロックの最初の層が始まります
for ($i=0;$i
/*********************************
この文は非常に重要であり、その機能は最後の 1 秒をクリアすることです。レイヤーブロックの内容
それ以外の場合、結果は(図2)のようになり、最後の2番目のレイヤーブロックの内容が再度表示されます。
その理由は、parse("p","plantList",true)のオプションtrueだからです
*************************** ***/
$t->set_var ("p");
// テンプレート内の {animal} は $animal[$i] の値に置き換えられます
$t->set_var("animal",$animal[$i]);
// ブロックの 2 番目の層が始まります
for ( $j=0;$j
// テンプレート内の {plant} は $ の値に置き換えられますplant[$i][$j]
$t->set_var("plant",$plant[$i][$j]);
//最初の層のブロックを解析します
$t->parse( "p","plantList",true);
}
//第二層ブロックを解析します
$t->parse("a","animalList",true);
}
$t->parse ("out","myfilehandle");
$t- >p("out");
?>
4. $set_var("p") ステートメントを省略した場合の影響:
この例は、説明したプログラムの対応する位置で注意する必要があることをすでに実行しています。これは、ネストされたブロックに対処する方法の 1 つです。皆さんのお役に立てれば幸いです。この記事を完成させるのに協力してくれた phpx と phpe.net の友人全員に感謝します。