去る2006年3月17・18日のOSC2006 Spring/Tokyo において、25分間だけお話しをしたのですが、その内容をここに書いておきます。
配布資料のプリント内容は以下の通り。
パワーポイントファイルと、その時に話した内容のあんちょこは下の場所に置いておきます。
http://www.peak.ne.jp/support/OSC200603/
主題
WebデザイナーのワークフローとXOOPSのテンプレートシステムはとても相性が悪い。
デザイナーに気持ちよく働いていただけるような、新しいテンプレートシステムをXOOPSモジュールとして構築する。
(前提知識)「テンプレート」という言葉の定義
テンプレートシステムにとっての「テンプレート」(本来の意味)
XOOPSにおける「テーマ」に対する「テンプレート」
(前提知識)Smartyにおけるテンプレートの保存場所に依存する特性(優位点)
DB - HTTP経由の操作が容易・フラット構造・保存位置が一意
FILE - テンプレート編集を反映させやすい・大規模な変更に強い
(前提知識)現状(XOOPS2.0.x/2.2.x)のテンプレートシステムの標準仕様
DBテンプレートを束ねたものを「テンプレートセット」と呼ぶ
「テンプレートセット」を1セットないし数セット持つ
実際に利用テンプレートは「一般設定」で指定されたもの
標準の「defaultテンプレートセット」は編集不可能
default以外のテンプレートセット(カスタムテンプレートセット)は編集可能
DBテンプレートが利用される時、指定されたカスタムテンプレートセット内に該当テンプレートがなければ、defaultテンプレートセット内のテンプレートが利用される(フォールバック)
モジュールインストール/アップデート時に、モジュールが用意したテンプレートが、defaultテンプレートセットに取り込まれる
XOOPS2.0テンプレートシステムの8つの問題点と、tplsadminによる解決
・defaultセット内のテンプレートは編集不可能
ちょっとだけ変更したい、という場合でも、テンプレートセットまるごとコピーして、利用テンプレートを変更する必要がある。しかもそれをやってしまうと、その後のモジュールアップデート時に、本来デフォルトのままであったはずのテンプレートまでまったく更新されなくなってしまう。
-> defaultテンプレートを編集可能とする (tplsadmin 0.20で実装済)
・テンプレートセットの操作性が劣悪
唯一存在しているのが、テンプレートセット丸ごとのコピーと、テンプレートファイルの個別削除のみ。
-> テンプレートのコピー・削除、空のテンプレートセット生成など、本来用意されるべき機能を実装 (tplsadmin 0.20で実装済)
・テンプレートの変更箇所が判らない
モジュールがアップデートして、defaultテンプレートが差しかわった場合に、自分の変更箇所とのマージをどのようにすべきかが判らない。
-> diff機能の実装で、「テンプレートのどこをいじったか」が一目瞭然となる (tplsadmin 0.20で実装済)
・どのテンプレートをいじるべきかが判らない
かなりの経験を積まない限り、公開サイト画面をいくら凝視しても、どのテンプレートファイルによる出力なのかが想像できない
-> 公開画面側にテンプレート名を出力する機能の実装 (tplsadmin 1.0 の新機能)
・テンプレート内にどの変数がどのようにアサインされているか判らない (Q5)
defaultテンプレートで利用されている変数名は判っても、利用されていないでこっそりアサインされている変数はPHPソースコードを追わない限り見つけられない。しかも、アサインの仕方はバラバラ。パスの最後に/がつくか、htmlspecialchars()がかかっているか、時間表現は整数だったりフォーマット済だったりと、とても想像がつかない。
-> 該当テンプレートにアサインされた変数の情報を一覧できる機能の実装 - Dreamweaver用Extension (tplsadmin 1.0 の新機能)
・バックアップとリストアが不完全
各テンプレートセットについて、バックアップはちゃんと出来るが、すでに存在しているテンプレートセットへのリストアが出来ず、一部のファイルだけを戻す、といったことが不可能。さらに、バックアップはzipでもtgzでも出来るのに、リストアはtgzしか受け付けないという非対称性を持つ。
-> tplsadmin内でのテンプレートセットのバックアップとリストアの実装 (tplsadmin 1.0 の新機能)
・変更すべき箇所がテーマとテンプレートでバラバラ
テーマはtheme/テーマ名、テンプレートは管理画面であり、統一的な編集インターフェースがない。テーマとテンプレートのセットの配布も困難。
-> テーマのサブディレクトリにカスタムテンプレートを記述したファイルを置ける機能の実装 (tplsadmin 1.0 の新機能)
・プレビューが困難
テンプレート管理にもプレビューは一応存在するが、テーマ内でどのように表示されるかが判らないのであまり意味がない。
-> テーマのサブディレクトリ内テンプレートファイルの自動更新(吸い上げ)機能の実装 (tplsadmin 1.0 の新機能)