PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[ブログ] PowerCMS サポートの実績 (2024年10月) を追加しました。
[よくあるご質問] スマートフォンでは使えない機能がありますか? を追加しました。

PowerCMS ブログ

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

2013年03月25日

再構築トリガーを自在にコントロールする(3)

2024年1月17日 現在 TriggerUpdateプラグインの機能は製品に組み込まれています。

過去、2度に渡って取り上げたテーマですが、別のニーズがあったためもう一つのプラグインを作成しました。このエントリでは、ブログ記事やウェブページのアップデートの際に他のブログのエントリ(ブログ記事/ウェブページ)、カテゴリーアーカイブやインデックスアーカイブを再構築する設定についてご紹介します。

過去2度のエントリで紹介した方法は、1.テンプレートタグを利用してIDを指定してインデックステンプレートを再構築する方法2.管理画面のパラメタをYAML形式で指定して、管理画面のアクションをトリガーにして再構築を行う方法の2つでした。この方法に加え、Movable Type標準のMultiBlogのトリガー設定をあわせれば、柔軟なトリガー設定ができるのですが、これらの方法では以下のケースに対応できません。

  • インデックステンプレート以外、あるいはブログ丸ごと以外のトリガー設定(特例のブログ記事やウェブページ、カテゴリーアーカイブの再構築等)
  • ブログ記事が削除された時、時限公開の際に非公開化されたときのトリガー設定(ブログのインデックス・アーカイブにMTRebuildIndexByIdタグを仕込む方法でクリア出来ますが、インデックスアーカイブがないブログや設定箇所の多さなどの課題が残ります*)

*もちろん、MultiBlogのトリガーの重さ(テンプレート毎にトリガを指定できない問題も。

このような課題を解決する方法として、rebuild-archives スクリプトを定期的にCRONジョブで実行するという方法もありますが、ページが削除されたタイミングでリンクが外れなければ一時的にリンク切れが発生してしまいます。

今回作成したプラグインは、エントリーの保存時(アップデート時)をトリガーとして再構築を実行しますので、リンク切れが発生することを防ぐことができます。

TriggerUpdateプラグイン

このプラグインによる再構築が走るのは以下のタイミングです。

  • 新規作成されたエントリーが、公開状態で保存された時
  • 既存のエントリーが更新され、ステータスが変更された時
  • 既存のエントリーが更新され、タイトルが変更された時
  • 時限公開処理(指定日時公開/指定日時非公開)が run-periodic-tasks によって実行された時

インストールと設定

  • TriggerUpdateプラグインをダウンロードします。
  • TriggerUpdate/YAML/triggers.yaml をテキストエディタ等で開いて編集します。
  • pluginsディレクトリに TriggerUpdate ディレクトリをアップロードします。

プラグインのYAMLディレクトリにはサンプルがありますが、設定が意味することは以下の通りです。

update_triggers:
    - trigger:
        blog_id: 0  # <=すべてのブログの
        entry: 1 # ブログ記事が更新された時
        index_ids: 93,94 # インデックステンプレートを再構築
        entry_ids: 1,2,3,4 # <=IDのエントリを再構築
        category_ids: 1,2,3,4 # <=IDのカテゴリを再構築
    - trigger:
        blog_id: 1 # <=このブログの
        page: 1 # ページが更新された時
        entry_ids: 1,2,3,4 # <=IDのエントリを再構築
    - trigger:
        blog_id: 2 # <=このブログの
        page: 1 # ページが更新された時及び
        entry: 1  # ブログ記事が更新された時
        entry_ids: 1,2,3,4  # <=IDのエントリを再構築

PowerCMS 3では各種オブジェクト間の関連付けが簡単にできるようになっています。これらのトリガーに加えてDynamicMTML等を組み合わせてサイトのアップデート個所/タイミングをうまく指定してあげることが、テンプレート構築の肝になると思います。


カテゴリー
PowerCMS 3
テンプレート作成Tips
トラブルシューティング
プラグイン
技術情報

Recent Entries