RIGHT:[[:t/テンプレート]] [[:t/ビュー]] [[:t/レイアウト]] [[:t/フォーム]] [[:t/ナビゲーション]] [[☆]]

Wikiの構築に利用する。閲覧時のページレンダリング用テンプレートや、編集時の入力フォームなど、多くのページに見られる共通部分のこと。

実体はページ。それをテンプレートとして扱うのは%%[[ビュー]]。扱い方は埋め込み要素で内容を入れ替えるだけ。%%[[ユースケース]]。クライアントからのリクエストに応じて、どのページをテンプレートとして使うか判断する。

[[レイアウト]]/[[ビュー]]/[[:t/ナビゲーション]]/[[ヘッダー]]…どれもテンプレートの呼び方。どこで使うかによって呼び方を変えているだけ。

下位展開を行なうかどうかもテンプレート次第。
†[[:i/下位展開はビューを表すページ]]

%%ビューが使うものの他に、何かを作る元になるものもある。%%
それ以外の例…
- [[:i/増殖するページ]]
- [[フォーム]]

----

#contents


***テンプレートはViewのもの [#w0406dbf]
MVCのViewクラスが参照、Viewクラスだけが使用する。書くのは管理者。
→[[:i/レイアウト/ビュー/テンプレートはどれも同じもの]]

ページに関連付けるがページからは使わない。ページを扱う側(ユースケースやビュークラス)で使う。そこにページ/内容を当てはめる。
***テンプレートの種類 [#xcc4b699]
%%どれも型は同じ。どういう順番で埋め込みのネストにするかを分かりやすくするための名称でしかない。%%
-レイアウト
大枠。サイトごとのもの。実装上はビューに含める。
-ビュー
UIの集約。ビュークラスとそこで参照するテンプレート。
-フォーム
入力のためのテンプレート。ページ/型の「フォーム」で実装。
- コンテンツヘッダー
サイト名やナビゲーションを置くところ。
***メタな名前で埋め込み [#q9d015bb]
%%「リクエストされたページのページ/属性/閲覧ビューにするページ名」といった指定方法で埋め込み。%%
%%テンプレートにする属性名(この場合「リクエストされたページ」と「閲覧ビュー」部分)を決めるのはフレームワーク/WikiEngine?ユースケース?%%
%%→両方になる。フレームワーク/Webアプリケーションとフレームワーク/WikiEngineは分けられないときがある。よくない。%%

ビューのため''だけ''のページ/属性。ユースケースからビューを呼ぶので、使われるのはユースケースの中とも言える。
ページ/属性には…
 なんとかビューのテンプレートページ名 → テンプレートページ名
…になるよう記述。
ビューからはリクエストされたページ→ビュー自身の名前を含む属性→テンプレートページ名→テンプレートページ→ページ/内容.ToHtml()(ビューによっては他の形式)

ビューに対応するテンプレートが最上位テンプレート。ここに他のビューと共有するHTMLを埋め込み要素で埋め込む。(セレクターには「リクエストされたページ」を書けなければならない)
リクエストされたページは埋め込み要素か、その位置の前後でテンプレートを分けておいてコードのほうで前.ToHtml()+ページ.ToHtml()+後.ToHtml()
***%%テンプレートはネストする%% [#se28068f]

%%レイアウト→ビュー→ページ/内容 のように、テンプレートはネストする。%%
%%テンプレートとページとの関連付けはページ/属性で行なうので、ページ/属性の「テンプレート」は複数設定できなければならない。%%

%%†[[ページ/属性,属性名が重複したら]]%%


***[[:i/テンプレートはページ名]] [#i6701433]
継承できるのは完成した1つのテンプレート。継承でテンプレート部品を集めたり組んだりはしない。

***テンプレートの多重継承は却下 [#t58b436a]
ページ/属性の継承処理にテンプレートのためだけの処理を入れても応用が利かない。通常の属性/継承でいい。
属性継承は上位か下位のいずれかを有効にするだけでいい。(上位にあるテンプレートを全て有効に合成するような)多重継承は不可。%%深い位置のページでは上位のテンプレートをコピペして追記。これで実用になる。%%

多重継承は分かりにくい上に効果は低い。%%ページ/属性の継承処理なのでページだけが特別扱いする記法を導入するというのも。%%
ページ/内容の埋め込み(セレクターと併用するほう)は使う。
***ナビゲーションのネスト [#k622b10b]
テンプレートを複数まとめるには埋め込みで。ナビゲーションとして使うテンプレートに他のテンプレートを埋め込み。

テンプレートにテンプレートを適用することでも可能。
***テンプレートにページ/内容をどう埋め込むか [#x98f333c]
%%埋め込み要素とセレクター(リクエストされたページ名)を使って。%%
%%テンプレートに限らずいつでもどこでも有効な要素なので、テンプレートページを呼ぶだけで対象ページも付いてくる。%%

→…ではビュー別のデータコンテキストを反映できないので、ビュークラスのコードを使う。埋め込み位置だけはテンプレート内に書いておく。埋め込み要素ではなくビュークラスだけが解釈できる記法で。

→…ではビュー別のデータコンテキストを反映できないので、ビュークラスのコードを使う。埋め込み位置だけはテンプレート内に書いておく。CSSで位置指定。埋め込み要素ではなくビュークラスだけが解釈できる記法で。
***%%繰り返し部分のプレースホルダーを無くすには%% [#b8d98fea]
%%下位展開ビューに必要な繰り返し部分には、対象ページの内容を埋め込むためのプレースホルダー記法がある。これを不要にするには繰り返し部分を前後に分ける。埋め込み前と埋め込み後。テンプレートだけの独自仕様排除。%%