2012年10月01日
再構築トリガーを自在にコントロールする(2)
以前のエントリーで、YAMLもしくはテンプレートタグでトリガーを指定して再構築を実行する方法をご紹介しました。例えばスニペットフィールドの既定値にテンプレートタグを記述する方法は下記の通りです。
少し裏技的ではありますが、このタグをPowerCMSのスニペットフィールドの既定値に入力して再構築を実行させることも可能です。例えば、「書籍」カスタムオブジェクトを保存した際にトップページを再構築する、といった運用が可能になります。
<mt:if name="request.saved"> <MTRebuildIndexById template_id="96"> </mt:if>
PowerCMSではこの他にも再構築トリガーに関する選択肢があります。
アーカイブタイプをモディファイアで指定して再構築するMTRebuildBlogタグ
- MTRebuildBlog
- blog_idまたはblog_idsとarchive_typeモディファイアを指定してブログを再構築します。archive_typeを省略すると、全てのアーカイブタイプを再構築します(カスタムオブジェクトアーカイブやフォルダアーカイブ等には未対応。Movable Type標準のアーカイブタイプのみ対応しています)。
<MTRebuildBlog archive_type="Page,Category" blog_ids="2,3">
ブログを丸ごと再構築するので、相応の時間(負荷)がかかります。サーバータイムアウトを防ぐためには mt-config.cgi に RebuildTriggerBackgroundTasks環境変数を指定します。こうすることで、再構築処理はバックグラウンドの別プロセスで行われるようになります(但しこの設定はCGI環境でのみ有効になります)。
RebuildTriggerBackgroundTasks 1
スニペットフィールド等、管理画面に記述する際に、もう少し複雑な条件指定を行うこともできます。例えば下記の例は、ブログ記事の公開時にblog_id=1のウェブサイト(ブログ)のウェブページを再構築する例です。
<mt:if name="request.saved">
<mt:if name="status" eq="2">
<mt:if name="title" like="Movable Type">
<MTRebuildBlog archive_type="Page" blog_id="1">
</mt:if>
</mt:if>
</mt:if>
cronジョブで特定のアーカイブを定期的に再構築するrebuild-archivesスクリプト
PowerCMSのtoolsディレクトリにあるrebuild-archivesスクリプトをコマンドライン、またはcronジョブに設定することにより、再構築を行うことができます。
引数 --at にアーカイブタイプ(カンマ区切り)、--blog_id にブログのID(カンマ区切り)を指定することで再構築の対象を限定でき、--sleep(オプション)を指定するとアーカイブのタイプ毎に待ち時間を置いて再構築、--debug(オプション)を指定すると標準出力に再構築状況を出力します。
0 2 * * * cd /path/to/mt && perl ./tools/rebuild-archives --at Index,Individual --blog_id 1,2 -sleep 5 --debug 1
引数を指定しない場合、すべてのウェブサイト/ブログのすべてのテンプレートが対象になるため、更新したいページだけが再構築されるように引数を指定して利用することをおすすめいたします。
引数 at に渡すことのできる値は以下のいずれかです。
引数 --at の値 | テンプレートの種類 |
---|---|
index | インデックス |
Individual | ブログ記事 |
Page | ウェブページ |
Daily | 日別 |
Monthly | 月別 |
Weekly | 週別 |
Yearly | 年別 |
Category | カテゴリ |
CategoryDaily | カテゴリ 日別 |
CategoryMonthly | カテゴリ 月別 |
CategoryWeekly | カテゴリ 週別 |
CategoryYearly | カテゴリ 年別 |
Author | ユーザー |
AuthorDaily | ユーザー 日別 |
AuthorMonthly | ユーザー 月別 |
AuthorWeekly | ユーザー 週別 |
AuthorYearly | ユーザー 年別 |
プラグインによるその他のトリガー
再構築のトリガーに関する要望は結構多いので、その他にいくつかのプラグインを作成しています。
- ブログ記事の再構築時に属しているカテゴリの上位カテゴリを合わせて再構築するプラグイン
- エントリの特定のカラムが一致するエントリをあわせて再構築するプラグイン
-
<MTRebuildEntryByColumnValue column="title" eq="Movable Type">
- カテゴリー
- 技術情報
- 設定・管理画面カスタマイズ
コメントを投稿する