PHP DOMパーサを使ってテンプレートエンジンを作ってみる3

鈍足ながら少しずつ機能を増やしていっています。

前回から追加された機能は、if 記法によって表示箇所を切り替えできるようにしてみたのと、指定したノード内にコンテンツを挿入するという機構。

if 記法の切り替えとは、次のようにエレメントに if 属性を準備しておき

Template


<div>
  <span if="foo">Message A</span>
  <span if="bar">Message B</span>
</div>

変数の値が「真」判定されればそのまま表示、「偽」判定されればエレメントが消滅します。foo = 1, bar = 0 とした場合なら、次のようになります。

Result


<div>
  <span if="foo">Message A</span>
  
</div>



一方のノード内へのコンテンツ挿入は、セレクタで指定するノードへ append で末尾に、prepend で先頭に挿入します。

Template


<p id="foo">Content</p>
<p id="bar">Content</p>

PHP


<?php
$template = new Template();

$text = 'Insertion';
$node = '<span>Insertion</span>';

/* id="foo", id="bar" にそれぞれ $text, $node を挿入 */
$template->append('#foo', $text);
$template->prepend('#bar', $node);
$template->renderer('Example');
?>

Result


<p id="foo">ContentInsertion</p>
<p id="bar"><span>Insertion</span>Content</p>

template-20080404.zip

恒例の PHPSpec による仕様確認はこちら。大分充実してきました。

テンプレート変数割り当て
  - オブジェクトを割り当てると、プロパティがテンプレート変数として利用される
  - 連想配列を割り当てると、配列キーがテンプレート変数として利用される
  - テンプレート変数として配列が利用できる
  - テンプレート変数としてオブジェクトが利用できる
  - テンプレート変数は配列とオブジェクトが混合で利用できる
  - テンプレート変数として割り当てたクラスオブジェクトのメソッドが利用できる
  - テンプレート変数に対して関数が利用できる
  - テンプレート変数として指定する属性の名称が変更できる
  - 置換されるテンプレート変数は何もせずともhtmlspecialchars済み
  - 置換されるテンプレート変数のhtmlspecialcharsは個別で無効にできる
  - テンプレート内で同じ変数は、利用タグに関係なく何度でも使える
  - 値がassignされていないテンプレート変数は無視される
  - 値を割り当てるのに利用したタグは明示的に消去することができる

エレメント操作
  - セレクタによる指定ノードのエレメントが追加、変更できる
  - セレクタによる複数対象のエレメントが追加、変更できる
  - エレメントの各要素のうち、今のところタグ名は変えれない

条件による表示切り替え処理
  - テンプレート変数値がtrueであれば表示、偽であれば非表示にできる
  - テンプレート変数値の条件を反転評価して表示非表示を切り替えることができる
  - オブジェクトのテンプレート変数を使って表示非表示を切り替えることができる
  - 配列のテンプレート変数を使って表示非表示を切り替えることができる
  - クラスメソッドの評価によって表示非表示を切り替えることができる
  - 関数の評価によって表示非表示を切り替えることができる
  - foreach構文と組み合わせて表示非表示を切り替えることができるが、同エレメント内にてリスト変数と同時に利用できる条件は展開変数

挿入処理
  - セレクタによる指定ノード内の末尾にコンテンツが追加できる
  - セレクタによる指定ノード内の末尾にノードが追加できる
  - セレクタによる指定ノード内の先頭にコンテンツが追加できる
  - セレクタによる指定ノード内の先頭にノードが追加できる

繰り返し処理
  - phpのforeach_as_valueのような処理ができる
  - phpのforeach_as_key_valueのような処理ができる
  - 通常の変数と繰り返し対象の展開変数の変数名が重複した場合は、展開変数が優先さ
れる
  - 繰り返し対象の展開変数がオブジェクトや配列も利用できる
  - 繰り返し処理はネストできる
  - foreach属性と同じエレメントにkey属性を設定して変数展開できる
  - リスト変数が空もしくはnullの場合はinnertextが消える

34 examples, 0 failures

トラックバック(0)

このブログ記事を参照しているブログ一覧: PHP DOMパーサを使ってテンプレートエンジンを作ってみる3

このブログ記事に対するトラックバックURL: http://hatotech.org/mt-admin/mt-tb.cgi/722

コメントする

このブログ記事について

このページは、が2008年4月 5日 00:15に書いたブログ記事です。

ひとつ前のブログ記事は「PHP DOMパーサを使ってテンプレートエンジンを作ってみる2」です。

次のブログ記事は「PHP DOMパーサを使ってテンプレートエンジンを作ってみる4」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01