こんにちは、プレーンベーグルです。
MovableType(MT)シリーズ第二弾です。
今回はMTのテンプレートの種類とその使い分けについてご紹介します。
ただし、人や会社によって運用ルールや使い方は違ってくるかと思います。
あくまで私の場合は、という前提で読んでいただければ幸いです。
MTテンプレートの種類
まず、MTのテンプレートは大きく以下のように分類されます。
- インデックステンプレート
- アーカイブテンプレート
- 記事アーカイブテンプレート
- 記事リストアーカイブテンプレート
- ウェブページアーカイブテンプレート
- コンテンツタイプテンプレート
- コンテンツタイプアーカイブテンプレート
- コンテンツタイプリストアーカイブテンプレート
- テンプレートモジュール
- システムテンプレート
インデックステンプレート
1つのテンプレートにつき1つのファイルを生成します。
指定したパスに直接ファイルを出力するので、トップページや下層ページのトップなど、固有のレイアウトを持つページで利用したり、cssやJavascriptなどのファイルも設定して管理したりします。
お知らせ一覧(カテゴリ別ではなく全ての一覧)ページなどにも利用します。
アーカイブテンプレート
記事やウェブページなど、登録された各コンテンツに基づいて複数のページを自動生成するテンプレートです。
出力のパスやファイル名、表示コンテンツなどについての任意の指示(ルール)を一つのテンプレートに設定することで、その指示に沿って複数のページをまとめて生成してくれます。
「カテゴリ別」や「年別」、「カテゴリ別+年別」といった指定ができます。
記事アーカイブテンプレート
登録した各記事を、テンプレートに沿って個別ページとして出力します。お知らせの詳細ページなどに利用します。
記事リストアーカイブテンプレート
複数の記事を一覧形式で表示するためのテンプレートです。カテゴリ別や年別など用途別で一覧ページを生成できます。フォルダやファイル名にルールを与えることもできます。
ウェブページアーカイブテンプレート
MTで登録した「ウェブページ」を個別ページとして出力します。記事アーカイブと似ていますが、ウェブページは固定ページとして扱いたいページを登録する際に利用することが多いです。また、記事とは異なり、カテゴリではなくフォルダを設定・利用します。
本文部分をMT管理画面から投稿し、ウェブテンプレートに沿ってページが出力されます。
コンテンツタイプテンプレート
コンテンツタイプに紐づくテンプレートです。
コンテンツタイプアーカイブテンプレート
個別のコンテンツデータを、テンプレートに沿って出力します。登録するフィールドを自由にカスタマイズできるので、商品紹介などの個別ページに活用できます。
コンテンツタイプリストアーカイブテンプレート
コンテンツタイプで登録した複数データを一覧表示するテンプレートです。カテゴリやタグなどの条件で複数ページを出力することも可能です。
テンプレートモジュール
このテンプレート単体ではページを生成しません。
他のテンプレート内で読み込むことが可能なので、共通パーツや共通定義を管理できます。ヘッダーやフッターなど、共通の要素にぜひ活用しましょう。
記事リストアーカイブテンプレートとインデックステンプレートについて
記事の一覧ページについては、以下のように使い分けます。
サイト全体の記事一覧 ⇒ インデックステンプレート
カテゴリ別、年別などの記事一覧 ⇒ 記事リストアーカイブテンプレート
全ての記事リスト一覧はそのページ単体の生成で不足ありません。
一方、カテゴリ別の記事一覧ページなどは、同じレイアウトを使いつつ、カテゴリごとに異なるページを複数生成する必要があります。このような場合、記事リストアーカイブを使えば、条件ごとにそれぞれテンプレート一つでカテゴリ別・年別など柔軟な一覧ページを自動生成してくれます。
単一のページ生成にはインデックステンプレート、特定のルールの下でページを複数生成するならアーカイブテンプレートを利用しましょう。
ウェブページ内のレイアウト切り替え
ウェブページとして登録したページに対して、ディレクトリやそのほかの条件によってレイアウトを変更したい、という場面もあると思います。
そんなときは以下のようなソース例で対応できます。
<mt:setvarblock name="parentfolder"><mt:TopLevelFolder><$mt:FolderBasename$></mt:TopLevelFolder></mt:setvarblock>
<mt:If name="parentfolder" eq="aaa">
<$MTInclude module="ウェブページ テンプレートa"$>
<mt:ElseIf name="parentfolder" eq="bbb">
<$MTInclude module="ウェブページ テンプレートb"$>
<mt:ElseIf name="parentfolder" eq="ccc">
<$MTInclude module="ウェブページ テンプレートc"$>
<mt:ElseIf name="parentfolder" eq="ddd">
<$MTInclude module="ウェブページ テンプレートd"$>
<mt:Else>
<$MTInclude module="ウェブページ"$>
</mt:If>
アーカイブテンプレートに上記を登録します。
アーカイブマッピングの種類は「ウェブページ」です。
これはウェブテンプレートの切り替える条件を記述したテンプレートになります。例だとディレクトリによってテンプレートを切り替えるようにしています。
「ウェブページ テンプレートa」のように、先に切り替えたいレイアウト分だけテンプレートは作成しておきます。
※「ウェブページ テンプレートa」はテンプレート名の例です。ここは作成する任意のテンプレート名に差し替えてください。
「ウェブページ テンプレートa」や「ウェブページ テンプレートb」は、本来ならウェブページ用のテンプレートとしてアーカイブテンプレートに登録しますが、今回は切り替えるための上記のみアーカイブテンプレートに登録し、他はテンプレートモジュールにパーツとして登録します。
アーカイブテンプレートとして登録する予定だった「ウェブページ テンプレートa」をそのままテンプレートモジュールに登録するイメージです。
ソースコードを分解して説明します。
<mt:setvarblock name="parentfolder"><mt:TopLevelFolder><$mt:FolderBasename$></mt:TopLevelFolder></mt:setvarblock>
↑ここでウェブページが属しているフォルダの一番上の階層のフォルダ名を取得します。
/aaa/test/sample.htmlなら「aaa」部分です。
<mt:If name="parentfolder" eq="aaa">
<$MTInclude module="ウェブページ テンプレートa"$>
↑ここから条件分岐に入ります。
一番上のフォルダ名が「aaa」なら「ウェブページ テンプレートa」を適用
<mt:ElseIf name="parentfolder" eq="bbb">
<$MTInclude module="ウェブページ テンプレートb"$>
↑「aaa」でないなら今度は「bbb」かどうかで条件分岐します。
「bbb」なら「ウェブページ テンプレートb」を適用します
それを切り替えたい分だけ条件として追加します。
例の場合(/aaa/test/sample.html)なら「ウェブページ テンプレートa」が反映されますね。
これならウェブページの中でもレイアウトの切り替えができますね(∩´∀`)∩
自分自身、より良い方法や構築を模索中ですが、お客様にとって運用しやすいサイト構築を第一に目指して日々頑張ります。