【Movable Type】MTタグを利用したアーカイブマッピングの出力制御について
概要
MT(PowerCMS含む、以下同)でアーカイブテンプレートを作成する際、アーカイブマッピングのパス指定にはMTタグを利用できます。
アーカイブマッピングのパス指定にMTタグを利用すると、以下のようなことが可能になります。
- 特定のカテゴリの一覧ページのみ静的ファイルを出力する
- カスタムフィールドのチェックボックスにチェックが入っている記事のみ静的ファイルを出力する
本記事では、MTタグを利用したアーカイブマッピングのパス指定と出力について、実際に筆者が業務で行ったことがある例をもとに解説しています。
記事またはコンテンツタイプリストアーカイブにおける例
記事リストアーカイブまたはコンテンツタイプリストアーカイブ(以降まとめて「リストアーカイブ」)において、出力ファイルを制御する例です。
特定のカテゴリのリストアーカイブのみ静的ファイル出力する
以下の例は「カテゴリA」のリストアーカイブのみ静的ファイル出力する指定です。
MTタグで囲われた中でもマッピング変数は利用可能です。また、パスを入力する際は改行などはせず、1行で続けて指定します。
<!-- 記事リストアーカイブパス -->
<mt:If tag="CategoryLabel" eq="カテゴリA">%c/%i</mt:If>
<!-- コンテンツタイプリストアーカイブパス -->
<mt:If tag="CategoryLabel" eq="カテゴリA">ct/%c/%i</mt:If>
上記例ではMTCategoryLabelで指定していますが、MTCategoryBasenameやMTCategoryIDなども利用できます。また、likeモディファイアで複数指定することも可能です。
それぞれ以下のパスで静的ファイルが出力されます。
<!-- 記事リストアーカイブ出力ファイル / カテゴリAのみ -->
catA/index.html
<!-- コンテンツタイプリストアーカイブ出力ファイル / カテゴリAのみ -->
ct/catA/index.html
最上位カテゴリのリストアーカイブのみ静的ファイル出力する
以下の例は最上位のカテゴリ(カテゴリA、カテゴリB、カテゴリC)のリストアーカイブのみ静的ファイル出力する指定です。
<!-- 記事リストアーカイブパス -->
<mt:TopLevelParent>%c/%i</mt:TopLevelParent>
<!-- コンテンツタイプリストアーカイブパス -->
<mt:TopLevelParent>ct/%c/%i</mt:TopLevelParent>
それぞれ以下のパスで静的ファイルが出力されます。
<!-- 記事リストアーカイブ出力ファイル / 最上位カテゴリのみ -->
catA/index.html
catB/index.html
catC/index.html
<!-- コンテンツタイプリストアーカイブ出力ファイル / 最上位カテゴリのみ -->
ct/catA/index.html
ct/catB/index.html
ct/catC/index.html
記事またはコンテンツタイプアーカイブにおける例
記事アーカイブまたはコンテンツタイプアーカイブ(以降まとめて「アーカイブ」)において、出力ファイルを制限する例です。
特定のカテゴリに属する記事のみ静的ファイル出力する
以下の例は「カテゴリA」に属する記事のみ静的ファイル出力する指定です。
<!-- 記事アーカイブパス -->
<mt:If tag="CategoryLabel" eq="カテゴリA">article/%c/%y%m_%E.html</mt:If>
<!-- コンテンツタイプアーカイブパス -->
<mt:If tag="CategoryLabel" eq="カテゴリA">article/cd/%c/%y%m_%E.html</mt:If>
前項のリストアーカイブ同様、MTCategoryLabelのほか、MTCategoryBasenameやMTCategoryIDなども利用できます。また、likeモディファイアで複数指定することも可能です。
それぞれ以下のパスで静的ファイルが出力されます。
<!-- 記事アーカイブ出力ファイル / カテゴリAに属する記事のみ -->
article/catA/yyyymm_[EntryID].html
<!-- コンテンツタイプアーカイブ出力ファイル / カテゴリAに属する記事のみ -->
article/cd/catA/yyyymm_[EntryID].html
これにより、たとえば新着情報コンテンツにおいて「PDFファイルのみを投稿するカテゴリ記事の静的ファイルは出力させない」ということが可能になります。
カスタムフィールドやコンテンツタイプのカテゴリ以外のフィールドの値で出力制御する
カスタムフィールドやコンテンツタイプのカテゴリ以外のフィールドの値でも静的ファイル出力の制御が可能です。
以下の例では、チェックボックスにチェックが入っている記事のみを静的ファイル出力する指定です(静的ファイルの出力例は割愛します)
<!-- 記事アーカイブパス / カスタムフィールドの値は`cf_checkbox`として設定 -->
<mt:If tag="cf_checkbox">article/%y%m_%E.html</mt:If>
<!-- コンテンツタイプアーカイブパス / フィールドの名称は「チェックボックス」として設定 -->
<mt:If tag="ContentField" content_field="チェックボックス">article/cd/%y%m_%E.html</mt:If>
上記の例では、コンテンツタイプのフィールドにおいて、チェックボックスの項目が複数ありかつ複数チェックできる場合、いずれかにチェックがされていれば静的ファイルが出力されます。
複数チェックできる場合でも特定のチェック項目で出力制御したい場合は、以下のように指定します(サンプルコードは読みやすいように改行していますが、実際は1行で指定します)
<mt:If tag="ContentField" content_field="チェックボックス">
<mt:ContentField content_field="チェックボックス">
<mt:If name="__key__" eq="チェックA">article/cd/%y%m_%E.html</mt:If>
</mt:ContentField>
</mt:If>
本記事の内容は以上です。
Discussion