EntryCategoriesタグを改良するプラグイン(その3)

EntryCategoriesタグを拡張するプラグインでは、前日解説したように、ブログ記事が属するカテゴリのブログ記事一覧を出力したり、ウェブページが属するフォルダのウェブページ一覧を出力したりすることができます。
ただ、単純にテンプレートモジュールを組むだけだと、そのテンプレートモジュールの再構築時の処理時間が、ブログ記事数やウェブページ数の二乗に比例するようになります。

参考:「複雑なキャッシュとその効果」

この問題を避けるために、Movable Type 4.2のキャッシュ機能を利用する方法を解説します。

1.ブログ記事が属するカテゴリのブログ記事一覧を出力する場合

ブログ記事が属するカテゴリのブログ記事一覧を出力する場合、そのためのテンプレートモジュール(もしくはウィジェット)は、以下のタイミングで無効にする必要があります。

  • ブログ記事が編集された
  • カテゴリが編集された

したがって、キャッシュの設定は以下のように設定します。

  • 「モジュールのキャッシュ」で「作成または更新後に無効にする
  • 「ブログ記事」と「カテゴリ」のチェックをオンにする

↓キャッシュの設定
entrycategoriesex1.png

ただし、このテンプレートモジュール(またはウィジェット)は、カテゴリごとに別のキャッシュを出力する必要があります。
そこで、MTIncludeタグにkeyモディファイアを指定します。
例えば、テンプレートモジュールに「同一カテゴリブログ記事」という名前を付けた場合、テンプレートモジュールをインクルードする処理は、以下のように書きます。

<MTEntryIfPrimaryCategory>
    <MTSetVarBlock name="entry_cat_id"><MTEntryPrimaryCategory>entry_cat_<$MTCategoryID$></MTEntryPrimaryCategory></MTSetVarBlock>
    <MTInclude widget="同一カテゴリブログ記事" key="$entry_cat_id">
</MTEntryIfPrimaryCategory>

2.ウェブページが属するフォルダのウェブページ一覧を出力する場合

ウェブページが属するフォルダのウェブページ一覧を出力する場合、そのためのテンプレートモジュール(もしくはウィジェット)は、以下のタイミングで無効にする必要があります。

  • ウェブページが編集された
  • フォルダが編集された

したがって、キャッシュの設定は以下のように設定します。

  • 「モジュールのキャッシュ」で「作成または更新後に無効にする
  • 「ウェブページ」と「フォルダ」のチェックをオンにする

↓キャッシュの設定
entrycategoriesex2.png

ただし、このテンプレートモジュール(またはウィジェット)は、フォルダごとに別のキャッシュを出力する必要があります。
そこで、MTIncludeタグにkeyモディファイアを指定します。
例えば、テンプレートモジュールに「同一フォルダウェブページ」という名前を付けた場合、テンプレートモジュールをインクルードする処理は、以下のように書きます。

<MTIfArchiveType archive_type="Page">
    <MTPageIfFolder>
        <MTSetVarBlock name="page_folder_id"><MTPageFolderEx>page_folder_<$MTFolderID$></MTPageFolderEx></MTSetVarBlock>
        <MTInclude widget="同一フォルダウェブページ" key="$page_folder_id">
    </MTPageIfFolder>
</MTIfArchiveType>