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等を組み合わせてサイトのアップデート個所/タイミングをうまく指定してあげることが、テンプレート構築の肝になると思います。
コメントを投稿する