最近の更新

関連


その他いろいろ

多機能フィードリーダSynapse製作中

2月までは目が回るほど忙しい

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

Cascading Templates

テンプレート階層化プラグイン
初出:2007年04/30 更新:2007年04/30

この文書のキーワード: PHP, MODx

MODxでウェブサイトを作っていると、外側は同じなのに中身の構造が違うだけでテンプレートを変えねばならず、同じコードが複数の箇所に出現し、保守性の低下に繋がることがあります。また、それを避けるためにチャンクを多用すると、本来なら関連のある開始タグ群~終了タグ群がバラバラになってしまうことも考えられます。

Cascading Templatesプラグインを使用すると、プラグイン名をドット(.)で分割した階層構造を辿って、子テンプレートに順に親テンプレートを被せていくことができ、保守性と可読性を維持することが出来ます。計算量的(時間的)パフォーマンスとのトレードオフになりますが、1リクエストに対して2回のSELECT文の発行なので、大して問題にならない場合がほとんどだと思います。

言葉では説明しにくい所もあるので、以下に例を示します。ドキュメントに直接適用されているテンプレートは"t.outer.inner"とします。

  1. t.outer.innerをドットで分割し、テンプレート名t, t.outerを得る
  2. 存在すれば、t.outerをt.outer.innerに被せる(t.outerの[*content*]の中にt.outer.innerが入る)
  3. 同様に、存在すればtを上記の結果(t.outer.innerにt.outerを被せたもの)にtを被せる
  4. 最終的に作り上げられたテンプレート(t.outer.innerにt.outerを被せ、さらにtを被せたもの)にドキュメントの内容を入れる
テンプレート設定例 出力例

使い方

システムイベントトリガはOnLoadWebDocumentです。

注意

階層化という仕組み上、直系の親を辿るしかできないため、ページの各部が独立に異なっている…といった場合には役立ちません(スニペットをテンプレート変数とあわせて使うべきでしょう)。しかし、多くの局面では「サイトのページ全てに共通する枠」に対して「コンテンツ種Aに対応するナビゲーション付き枠」「コンテンツ種Bに対応する画像欄付き枠」…などが従属的に決まってくるので、このプラグインの範疇に収まるのではないでしょうか。

MODx側は直接ドキュメントに指定されたものしかテンプレートとして認識しないため、テンプレート変数を適用する際は、親テンプレートだけでなく子テンプレートでの使用も許可するようにしてください。(上の例でtに対して許可したTVがt.outerやt.outer.innerに対して自動的に許可されない)

MODxの非API部分? を使っているので、特にMODxタグ周りで何か問題が起きる可能性もあります。もしそのような例が見つかった場合はお知らせください。

各バージョンの詳細・ダウンロード

バージョン/DL日付概要
1.00 DL2007 04/30テンプレート階層化