ホーム > サポート・マニュアル > チュートリアル > 拡張機能の開発 > テンプレートエンジン(Templateクラス)の使用 (後編)

テンプレートエンジン(Templateクラス)の使用 (後編)

ドキュメント最終更新日時:2009/10/19 21:21

ブロック制御

前回はTemplateクラスのブロックと変数の制御について説明しました。今回はのようなループするブロックと、入れ子構造になっているブロックの出力について説明します。

ループの追加を行う

Templateクラスのaddメソッドは次のような引数を持ちます。

$Tpl->add( ブロック名(文字列), ブロック内変数( 連想配列 ) );

以下のようにaddメソッドで同じ名前のブロックを繰り返し追加することでループ構造を作ります。

テンプレート (HTML形式)

<html>
<body>
<!-- BEGIN_MODULE Sample_Loop -->
<ul><!-- BEGIN data:loop -->
<li>id : {id} {name} ( {ruby} ) </li><!-- END data:loop -->
</ul>
<!-- END_MODULE Sample_Loop -->
</body>
</html>

Sample_Loopモジュール

<?php
require_once ACMS_LIB_DIR.'GET.php';

class ACMS_GET_Sample_Loop extends ACMS_GET
{
function get()
{
$Tpl     = new Template($this->tpl, new ACMS_Corrrector());

$loopData = array();

$loopData[] = array(
'id'       => '1',
'name'     => '山田太郎',
'ruby'     => 'やまだたろう',
);

$loopData[] = array(
'id'       => '2',
'name'     => '鈴木次郎',
'ruby'     => 'すずきじろう',
);

$loopData[] = array(
'id'       => '3',
'name'     => '佐藤三郎',
'ruby'     => 'さとうさぶろう',
);

foreach ( $loopData as $loop ) {
$Tpl->add('data:loop', $loop);
}

return $Tpl->get();
}
}

実行結果

<html>
<body>
<ul>
<li>id : 1 山田太郎 ( やまだたろう )</li>
<li>id : 2 鈴木次郎 ( すずきじろう )</li>
<li>id : 3 佐藤三郎 ( さとうさぶろう )</li>
</ul>
</body>
</html>

入れ子の順番

ブロックの追加は、入れ子の中の深い位置のブロック(子にあたるブロック)から順に追加します。ブロックを配列で表現して追加するときは、配列の先頭が追加する目標のブロック名であり、以降は親のブロック名をあらわすことに注意してください。

入れ子のテンプレート

<html>
<body>
<!-- BEGIN_MODULE Sample_Nest -->
<!-- BEGIN year -->
<!-- BEGIN month -->
<!-- BEGIN day -->
<!-- END day -->
<!-- END month -->
<!-- END year -->
<!-- END_MODULE Sample_Nest -->
</body>
</html>

Sample_Nestモジュール

<?php
require_once ACMS_LIB_DIR.'GET.php';

class ACMS_GET_Sample_Nest extends ACMS_GET
{
function get()
{
$Tpl     = new Template($this->tpl, new ACMS_Corrrector());

$Tpl->add( array('day', 'month', 'year') );

$Tpl->add( array('month', 'year') );

$Tpl->add( 'year' );

return $Tpl->get();
}
}
?>

入れ子構造のループを追加する

ひとつのループの中で更に別のループがあるような入れ子型のループを作成します。以下のように、ブロック名の引数を配列にすることでループの中に別のループを追加できます。この入れ子型のブロックの追加はループに限らず共通です。

以下はカテゴリーのループ構造の中に、エントリーのループが加わる処理の例です。

<?php
foreach ( $category as $cat ) {
foreach ( $entry as $ent ) {
// entry:loopを追加
$Tpl->add(array('entry:loop', 'category:loop'), $ent);
}
// category:loopを追加
$Tpl->add('category:loop', $cat);
}
?>

ドキュメントの内容に関するお知らせフォーム

内容に誤り・現行バージョンと異なる部分がありましたら、下記のフォームよりお知らせください。


お名前
 
メールアドレス(任意)
 
お知らせ内容
Cookieに保存


携帯アクセス解析