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

この辺までくると、機能的なところでそんなに大きく進展はしてない感じではありますが、継続的に報告もせんといかんよね!

新しく追加した機能は、フォームに対する値やエレメントの操作。この辺はPEARのHTML_Template_Flexyが良い感じだったので、それと出来る限り同じような使い方が出来るように。

Template


<form name="example">
  <input type="text" name="email" />

  <select name="person">
    <option value="1">foo</option>
    <option value="2">bar</option>
    <option value="3">baz</option>
  </select>

  <input name="item" type="radio" value="1" />foo
  <input name="item" type="radio" value="2" />bar
  <input name="item" type="radio" value="3" />baz
</form>

PHP


<?php
$template = new Template();

$values = new stdClass();
$values->email = 'foo@example.com';
$values->person = 1;
$values->item = 2;

$template->setFormValues('example', $values);
$template->renderer('Example');
?>

Result


<form name="example">
  <input type="text" name="email" value="foo@example.com" />

  <select name="person">
    <option value="1" selected="selected">foo</option>
    <option value="2">bar</option>
    <option value="3">baz</option>
  </select>

  <input name="item" type="radio" value="1" />foo
  <input name="item" type="radio" value="2" checked="checked" />bar
  <input name="item" type="radio" value="3" />baz
</form>

template-20080409.zip

地味に「PHPSpec を使った開発のケーススタディ」的な感じでテンプレートよりも好評な、Specによる仕様確認の現在はこちら。

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

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

フォーム操作
  - テキストラインへ値をセットすることができる
  - テキストエリアへ値をセットすることができる
  - hiddenへ値をセットすることができる
  - セレクトボックスを選択状態にできる
  - ラジオボタンをチェック状態にできる
  - チェックボックスをチェック状態にできる
  - ボタンやサブミットへ値がセットすることができる
  - 指定するフォームに値をhiddenとしてセットすることができる
  - リストをセレクトオプションとして登録することができる

条件による表示切り替え処理
  - テンプレート変数値がtrueであれば表示、偽であれば非表示にできる
  - テンプレート変数値の条件を反転評価して表示非表示を切り替えることができる
  - オブジェクトのテンプレート変数を使って表示非表示を切り替えることができる
  - 配列のテンプレート変数を使って表示非表示を切り替えることができる
  - クラスメソッドの評価によって表示非表示を切り替えることができる
  - 関数の評価によって表示非表示を切り替えることができる

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

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

機能の複合利用
  - foreach構文とif構文を組み合わせて利用できるが、同エレメント内にてリスト変数と同時に利用できる条件は展開変数になる
  - foreach構文で繰り返されるコンテンツ内のエレメント要素が{}変数で変更できる
  - foreach構文で繰り返されるコンテンツ内でチェックボックスの生成およびチェック状態が実現できる

47 examples, 0 failures

かなり充実してきた感じで、今回から若干コードの内容や構成に手を入れ始めています。もうすぐ本当にベータリリースできそうな気もしますが、ここからは引き続きコードのリファクタリングを続けながら、あとは仕様の若干の追加や見直しなども進めます。条件分岐として <span if="foo > 10"> みたいな記述もできるようにしたい。

トラックバック(0)

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

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

コメントする

このブログ記事について

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

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

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

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

Powered by Movable Type 4.01