パーツ

実装力もないのに相も変わらずHTMLテンプレートについてずっと考えているのだけれど。
パーツ化は普通 include でやってしまう。

;;;テンプレートを使うPHP
$template =& new Template("base.html");
$model["header"]="condition1.html";
;;;テンプレート本体HTML(base.html)
<html>
 <body>
  <div id="header">{include file=$header}</div>
  <div id="main">いろいろ</div>
 </body>
</html>
;;;パーツ側HTML(condition1.html)
<ul>
  <li><a href="hoge">hoge</a></li>
  <li><a href="hoge">hoge</a></li>
</ul>

みたいなかんじ。だけれど、それだと部品の方が「完全なHTML」では無くなってしまう。完全でないというのはつまり、<html>とかをつけないといけないのに、つけるとテンプレート展開した後に変になってしまう、ということだ。
「完全なHTML」でないと何が困るのか、というとまあ、Dreamweaverなんかで部品部分を非プログラマーに作らせる場合に困る、のである。またスタイルシートとか利用している場合に、プレビューできなくて困るのもある。


そこで、パーツ取りされるHTMLの方もID指定できるようになるとうれしいのではないだろうか? パーツHTMLもファイルまるまる取り込むのではなくて一部だけ取り込むのである。

;;;テンプレートを使うPHP
$template =& new Template("base.html");
$template->use("condition1.html");
;;;テンプレート本体HTML(base.html)
<html>
 <body>
  <div id="header" t:replace="header">ここにヘッダが入る</div>
  <div id="main">いろいろ</div>
 </body>
</html>
;;;パーツ側HTML(condition1.html)
<html>
 <body>
  <div id="header">
   <ul>
    <li><a href="hoge">hoge</a></li>
    <li><a href="hoge">hoge</a></li>
   </ul>
  </div>
  <div id="main">無視される</div>
 </body>
</html>

こんな感じ。これで、スタイルシートなどもプレビューしながらパーツ部分を作れるはず。
パーツが複数のファイルに分かれている場合はuseを複数行えばいい。同じIDが複数のパーツファイル内で指定されていた場合は後に指定した方で上書きする、と。
プログラマーがHTMLも作る場合、タグ手打ちな人が多いので、HTMLタグとかが必要ない方が喜ばれたりするのだけれど、パーツも部分指定できるといくつかメリットがあるように思う。
パーツも部分指定できると何がうれしいかというと、一つのファイルに複数の「部分」を埋め込めることだ。
例えばヘッダとフッタの変更が常に同じ時に起こるデザインとか。1ファイル1パーツ制だと複数の部分を一度に変えたいときに複数のファイルをメンテナンスしないといけないのだけれど、1ファイル複数パーツ制だとヘッダとフッタを一つのファイルに埋め込んでおいて管理できる。
これで継承みたいにできるのかな?