Movable Typeのように「記事」と「ページ」で体裁を変える
対応バージョン 2.0.x 〜
a-blog cmsには、Movable TypeやWordPressのような「投稿タイプ」という概念がありません。すべてのコンテンツは「ブログ」「エントリー」「カテゴリー」によって管理されます。
コンテンツによってページのレイアウトを変更したい場合は、いくつかの方法が考えられます。
テーマ内にディレクトリを作る
初心者向けの方法です。レイアウトを変更したいカテゴリーのコードネームと同じディレクトリを作成し、その中にテーマ内の「index.html」「entry.html」を複製してください。
以降はそのカテゴリーのみ、複製したテンプレートを参照することになるので、自由に内容を変更することができます。
グローバル変数とインクルードを使う
カテゴリーによって変更される範囲が、ページの一部分だけの場合に有効です。変更したい箇所をインクルードにして、「カテゴリーのコードネーム」をインクルードファイル名に反映させます。
例えば以下の通りインクルードを記述すると、カテゴリーコードが「news」の場合は「/include/contents_title_news.html」、「blog」の場合は「/include/contents_title_blog.html」、カテゴリーに入っていない場合は「「/include/contents_title_.html」」を読み込もうとします。
<!--#include file="/include/contents_title_%{CCD}.html"-->
なお、ファイルが存在しない場合は何も表示しません(Movable Type・WordPressとは挙動が異なり、エラーも出ません)。
もっとも管理しやすいですが、事前に表示を切り替える場所をしっかり決めておく必要があります。また、想定していないカテゴリーに対応することができません。
子ブログ・子テーマを作る
まったくレイアウトが異なり、エントリー数も多くなる場合は、ブログ自体を分割してしまう方が確実です。子ブログを作り、親ブログのテーマの差分ファイルだけが入った「子テーマ」をテーマに設定します。
ただし、親ブログのコンフィグに後から変更を行った場合は、子テーマも設定し直す必要があります。
カスタムフィールドとIFブロックを使う
レイアウトを変更するカテゴリーがはっきりしていない場合や、エントリー単位で体裁を変えたい場合は、エントリーカスタムフィールドにレイアウト用の情報を記録し、その値によって表示を切り替える方法もあります。 自由度はひじょうに高くなりますが、上級者向けの方法で、処理もやや遅くなります。
以下のように、カスタムフィールド「show_eyecatch」を作ることで、一覧用の画像として儲けているカスタムフィールド「eyecatch」の画像を先頭に出すか、エントリー単位で選ぶことができます。
<!-- BEGIN_IF [{show_eyecatch}/eq/true] --> <!-- BEGIN_IF [{eyecatch@path}/nem] --> <img src="%{ARCHIVES_DIR}{eyecatch@path}"> <!-- END_IF --> <!-- END_IF -->
余談
例えば、以下のようにIFブロックを書くと、WordPressの投稿フォーマット機能をa-blog cmsに引き継ぐことも可能です。a-blog cmsにはユニット機能があるため、あまり意味がありませんが…
<!-- BEGIN_IF [{entry_layout}/eq/gallery] --> ギャラリーっぽい記事の出し方 <!-- ELSE_IF [{entry_layout}/eq/link] --> リンクっぽい記事の出し方 <!-- ELSE_IF [{entry_layout}/eq/quote] --> 引用っぽい記事の出し方 <!-- ELSE_IF [{entry_layout}/eq/video] --> 動画っぽい記事の出し方 <!-- END_IF -->