カスタムタグ
カスタムタグは <t:customtagname /> みたな感じでテンプレートファイルに記述すると、
という流れ。なお、コンパイル後にはオブジェクトは生成されない事に注意(呼び出すには、自分で書き出す必要がある)
指示のタイミングは
- パーサが開始タグを見つけ、オブジェクトが生成されてドキュメントツリー(DOMツリー)に登録された後(onTagOpened)
- パーサが終了タグを見つけ、つまり子ノードのツリーが完成した後(onTagClosed)
- PHPをはき出すように指示(toPHP)
toPHPは、オーバーライドしないと getChildren → getOpenPHP →getClosePHP を順に呼び出す。
getChildren は、オーバーライドしないと、順番に子ノードのtoPHPを呼び出して(つまりPHPスクリプト化=データとしては文字列化して)返す。
document に出せる指示は、HTMLのヘッダエリアに何か加える(addHeadPHP)。任意の名前を付けて登録・上書きすることができるので、いくつものタグから登録されても重複しない。
こんな感じで…
「HTMLのヘッダに何か加える」機能をつけたことで、JavaScriptやスタイルシートのライブラリを外に出しやすくなっている。これにより、HTMLテンプレートからJavaScriptを切り出す事に成功し、デザイナーに邪魔されないリッチなインターフェースを構築可能。
後「子ツリーの構築をフックする」機能をつけようと思う。つまりカスタムタグ化したform タグ内で追加される input タグなどを乗っ取れる様に。
カスタムタグが書き出すのはHTMLではなくPHPで、いろいろエスケープが面倒だったりするので、HTMLTemplate_TagTemplate とかいうクラスを作って外部ファイルにしてみたり。コンパイル時にしか実行されないので、少々時間がかかってもよいはず。
現状では、簡単な正規表現置換で、コンパイル時に実行するPHPと、表示時に実行するPHPの開始タグを分けてるだけだけど、なんかやりにくい。もうちょっと仕様を考える必要があるなぁ。PHP用のプリプロセッサ(PHP自体のテンプレート)ってどっかに無いだろうか…