テンプレートの仕組み

出力するhtmlコードを自由にカスタマイズできます。デフォルトでは<ul>要素で展開しますが、dlタグ・olタグ・tableタグなどを用いたい場合は、展開テンプレートを自作します。

Wayfinderのテンプレートは複数の要素で構成されています。

Wayfinderは、生成される出力の各部分をどのように構築するかを決定する一連のテンプレートに基づいて出力を構築します。

基本的に、各テンプレートはいくつかのプレースホルダーを持つHTMLの断片です。HTMLはWayfinderの出力の静的で固定された構造部分(Wayfinderが呼び出される各ページで同じままになる部分)を提供し、プレースホルダーは動的に生成されるコンテンツ(各ページで異なり、各ページのユニークな特性を反映する部分)を提供します。

個々のテンプレートの出力がすべて組み合わされたときに、ウェブページに含めるための合法的なコンテンツが得られるように、すべてのテンプレートは慎重に作成されなければなりません。通常、これは合法的なHTMLテーブル、リストなどを結果として得ることを意味しますが、CSS、JavaScript、埋め込みPHP、または他にも何でも含めることができます。合成された結果がウェブページに挿入されたときに適切に機能することを保証するのはあなた次第です。

また、同じページでWayfinderを複数回呼び出し、それぞれがまったく異なるテンプレートセットを使用することもできることに注意してください。これにより、メインメニュー、サイドメニュー、クイックリファレンスリストなど、MODXドキュメントツリー内のドキュメントリストから派生する何かを作成する際に、多くの柔軟性が得られます。

テンプレートスキーマ

テンプレートが組み合わされる全体的なスキーマは、以下のように示されます。

&startItemTpl

&outerTpl

&rowTpl
&rowTpl

&rowTpl

&innerTpl

&innerRowTpl
&innerRowTpl
&innerRowTpl
&rowTpl
&rowTpl

&startItemTpl

&displayStart パラメータが TRUE の場合(そしてその場合に限り)、&startItemTpl テンプレートが使用されます。使用されるとき、&outerTpl テンプレートは前者の [+wf.wrapper+] プレースホルダーに配置されます。

<h2[+wf.id+][+wf.classes+]>[+wf.linktext+]</h2>[+wf.wrapper+]

&displayStart パラメータが TRUE でない場合、&startItemTpl テンプレートは使用されず、&outerTpl テンプレートが Wayfinder の出力の最も外側のコンテナを提供します。

&startItemTpl テンプレートは Wayfinder 出力で最大一度だけ使用されます。

&outerTpl

&outerTpl テンプレートは、常に必要とされる2つのテンプレートのうちの1つであり(そしてデフォルトのテンプレートが Wayfinder に組み込まれています)、メニューの項目を構成するすべての行がこのテンプレートの [+wf.wrapper+] プレースホルダー内に配置されます。

<ul[+wf.classes+]>[+wf.wrapper+]</ul>

&outerTpl テンプレートは、メニュー階層の最上位の「コンテナ」として、Wayfinder 出力で常に少なくとも一度は使用されます。そして、&innerTpl テンプレートが指定されていない場合、生成された出力のすべてのサブメニューのコンテナとしても使用されます。

&rowTpl

Wayfinderが生成する出力にリストする必要がある各ドキュメントに対して、「行」が生成されます。デフォルトでは、&rowTpl テンプレートがこれらの行を構築するために使用されます。

このテンプレートには [+wf.wrapper+] プレースホルダーを含めるべきです。なぜなら、Wayfinderは任意の行の下に表示する必要があるサブメニューをそこに配置するからです。

<li[+wf.id+][+wf.classes+]>
<a href="[+wf.link+]" title="[+wf.title+]" [+wf.attributes+]>[+wf.linktext+]</a>
[+wf.wrapper+]
</li>

異なる条件下で異なる行出力を生成するために使用できる、さまざまな行レベルのテンプレートがあります。これらのうち、あなたが指定するものは、ドキュメントが特定の基準を満たす場合(例:子を持つ(&parentTpl)、現在表示されているウェブページのドキュメントである (&selfTpl)、ウェブページのテンプレートを持たない (&categoryFoldersTpl) など)、一般的な &rowTpl テンプレートの代わりに使用されます。

&innerTpl

&innerTpl テンプレートが定義されている場合、それはWayfinderが出力するすべてのサブメニューの「コンテナ」として使用されます。どれだけ深くネストされていても、サブメニューのすべての行はこのテンプレートの [+wf.wrapper+] プレースホルダー内に配置されます。

&innerTpl テンプレートが定義されていない場合、その代わりに &outerTpl テンプレートが使用されます。

&innerRowTpl

これは、&innerTpl テンプレート内に表示されるすべての行のための一般的な行生成テンプレートです。このテンプレートが定義されていない場合、代わりに &rowTpl テンプレートが使用されます。[しかし、もし &innerTpl が定義されていない場合はどうなるでしょうか?サブメニューに対して &innerRowTpl はまだ使用されますか?]

その他の行レベルのテンプレート

上記で触れられていないすべてのテンプレートは、各ドキュメントの特性に応じて、一般的な &rowTpl および &innerRowTpl テンプレートの代わりに使用される行レベルのテンプレートです。

しかし、この時点で明確でないのは:(a) これらのテンプレートはすべてサブメニュー内で機能するのか、それともトップレベルのメニュー内だけで機能するのか? (b) &innerTpl テンプレートが定義されていない場合、これらの代替の行レベルのテンプレートはサブメニュー内で依然として効果を発揮するのか?

PR

  • KAGOYA
  • ASP at AKIHABARA Japan
  • CMS AWARDS 2007 Winner
ページトップへ