PowerCMS ブログ

2013年03月28日

アーカイブの出力を制御する(特定条件のアーカイブを出力したくない)

Movable Type / PowerCMS で特定のアーカイブを出力したくないケースがあります。例えば以下のような条件指定がしたいとします。

  • 特定のカテゴリ配下のブログ記事はトップページへのお知らせとして表示したいだけなので、ファイルは生成したくない(あるいはカスタムフィールドで分岐したい)。
  • 特定のカテゴリ配下のブログ記事は、ニュースリリースのPDFファイルへのリンクだけを表示させたいので、ファイルは生成したくない(あるいはカスタムフィールドで分岐したい)。
  • トップレベルカテゴリのアーカイブのみ出力したい。サブカテゴリのアーカイブは出力したくない。

このような場合、Movable Typeのアーカイブマッピングを工夫してアーカイブの出力を抑制するような Tips があって、以下のような方法で実現しているケースを見かけます(EntryOutputFlagはカスタムフィールドで定義したタグ)。

<mt:If tag="EntryOutputFlag">%y/%m/%-f<mt:Else></mt:If>
アーカイブマッピングの設定

カスタムフィールド(チェックボックス)の初期値にチェックを入れ、チェックが外れている場合にはアーカイブのパスが空になるため、ファイルが出力されないという方法です。

一見、この方法でうまく動作しそうなように見えますが、このような指定ではうまくいかないケースがあり、推奨されません。

  • アーカイブのパスが空になり、ブログ(ウェブサイト)パスのディレクトリに対してファイルとしてアクセスを試みることになるため、MT::FileMgrがエラーを吐くケースがある。
  • 同一パスのFileInfoレコードが生成され、ダイナミックパブリッシング(DynamicMTML)がエラーとなる。

カスタムフィールドの値によってアーカイブの出力を制御するプラグイン

RebuildFilterプラグインを利用することで実現できます。

  • プラグインをダウンロードし、pluginsディレクトリにアップロードします。
  • カスタムフィールドを作成します。種類はチェックボックス、ラベルは「このアーカイブを出力しない」とし、カスタムフィールドのベースネームをブログ記事の場合「entryfilter」ウェブページの場合「pagefilter」カテゴリの場合「categoryfilter」フォルダの場合「folderfilter」とします。
  • チェックを入れたオブジェクトのアーカイブは出力されないことを確認します(アーカイブマッピングのカスタマイズは不要です)。

既に同じベースネームのカスタムフィールドが存在する場合、mt-config.cgiに「IndividualFilterBasename(ブログ記事)」「PageFilterBasename(ウェブページ)」「CategoryFilterBasename(カテゴリ)」「FolderFilterBasename(フォルダ)」を指定することで、カスタムフィールドのベースネームを変更することが可能です。

カテゴリー
テンプレート作成Tips
トラブルシューティング
プラグイン

ページの先頭へ