• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:[[:t/テンプレート]] [[:t/ビュー]] [[:t/レイアウト]] [[:t/フォーム]] [[:t/ナビゲーション]]

Wikiの構築に利用する。閲覧時のページレンダリング用テンプレートや、編集時の入力フォームなど、多くのページに見られる共通部分のこと。
†[[:i/下位展開はビューを表すページ]]

実体はページ。それをテンプレートとして扱うのは[[ビュー]]。扱い方は埋め込み要素で内容を入れ替えるだけ。

ビューが使うものの他に何かを作る元になるものもある。→ [[:i/増殖するページ]]

----

#contents


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

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

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

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

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

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


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

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

多重継承は分かりにくい上に効果は低い。ページ/属性の継承処理なのでページだけが特別扱いする記法を導入するというのも。
ページ/内容の埋め込み(セレクターと併用するほう)は使う。



***ナビゲーションのネスト [#k622b10b]
テンプレートを複数まとめるには埋め込みで。ナビゲーションとして使うテンプレートに他のテンプレートを埋め込み。

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

→…ではビュー別のデータコンテキストを反映できないので、ビュークラスのコードを使う。埋め込み位置だけはテンプレート内に書いておく。埋め込み要素ではなくビュークラスだけが解釈できる記法で。
***テンプレート適用順 [#ybf9b28d]
対象ページごとにテンプレートを変えられるようにするなら、対象ページの属性に…
 (ビュー名)のテンプレートページ名 → ページ名
…と書いておく。変えられなくていいならビュークラスの中に書くか、ビュークラス別の設定ページにでも書いておく。

ビューが処理の中心になるので、ビューを最上位にする。「レイアウト」なし。

ビュークラス内で対象ページ/属性を参照。テンプレートページ名→テンプレート内容。
テンプレート内容にはグローバルナビゲーションなどの全ビュー共通の部分が、埋め込み要素を使って埋め込まれている。
対象ページの内容は…ビュークラスのコードを介してビュー別のコンテキストで呼ばないといけないので、ビューでしか解釈されないプレースホルダー記法ででも位置指定しておく。

下位展開ビューでは繰り返し部分がある。その部分は分けておかないと繰り返せない。
対象ページの属性に…
 (ビュー名)の''繰り返し部分の''テンプレートページ名 → 繰り返し部分ページ名
…と書いておくこともできるが、ビューのテンプレートページの属性にしたほうが適切。
 (ビュー名)のテンプレートページ名 → ページA
ページAの属性に…
 繰り返し部分その1のテンプレートページ名 → 繰り返し部分ページ名
「繰り返し部分ページ」の内容が繰り返し部分。その中にビューでしか解釈されないプレースホルダー記法。

%%テンプレートだけの構成をあらかじめ作っておく。レイアウト>ビュー>コンテンツテンプレート。%%
%%レイアウトの中にページ名固定でコンテンツテンプレートを埋め込み。そのレイアウト名をページ/属性の「(ビュー名)のテンプレート」→レイアウト名 という形で書いておく。%%

%%ビューは?%%

***繰り返し部分のプレースホルダーを無くすには [#b8d98fea]
下位展開ビューに必要な繰り返し部分には、対象ページの内容を埋め込むためのプレースホルダー記法がある。
これを不要にするには繰り返し部分を前後に分ける。埋め込み前と埋め込み後。
テンプレートだけの独自仕様排除。