PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > 技術情報 > 再構築トリガーを自在にコントロールする(2)

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">

カテゴリー
技術情報
設定・管理画面カスタマイズ

Recent Entries