2012年09月06日
再構築トリガーを自在にコントロールする
大規模なサイトの運用においては再構築にかかる負荷が高くなってくることはよくあることかと思います。MT5になってウェブサイト配下のブログをマルチブログでポータル的に扱うことで再構築トリガーを設定した結果、さらに重たくなるといったケースもあるでしょう。
とはいえ、管理画面にコンテンツを投入するユーザー側に負荷をかけまいとするあまりダイナミックパブリッシングを全面的に導入すると今度は複雑な構成であればあるほど(ブログをまたがったコンテンツを数多く表示するなど)ページの表示に時間がかかり、サイト閲覧側のパフォーマンスが確実に低下します。
静的生成の場合「どのタイミングで再構築をかければいいのかわからない」という問題があります。更新したのにページが変わりません→再構築してください→反映されました。といったやりとりが続いた後、とにかく更新したら全部再構築するんだ、という認識になり、そうすると今度は「待ち時間が嫌」ということになりかねません。
ブログ記事を更新した時にはそのブログ記事アーカイブ以外に前後のブログ記事アーカイブ、関連するカテゴリや日付けアーカイブ、カテゴリアーカイブ、インデックスアーカイブが自動的に再構築されますが、それ以外のオブジェクト(例えば「バナー」など)が更新された時にも自動的に更新をかけたい、というニーズがある筈です。
管理画面のパラメータで再構築トリガーを個別に設定する
例えば、バナーグループを更新した時に、インデックステンプレートを再構築したいとします。まず、トリガとなる処理を行った際の管理画面のURLを確認します。
mt.cgi?__mode=view&_type=campaigngroup&blog_id=1&id=2&saved=1
続いて、更新したいインデックス・テンプレートを管理画面で開きます。
mt.cgi?__mode=view&_type=template&id=95&blog_id=1
管理画面のシステム→メニュー「ツール」→「PowerCMS」を選択します。再構築トリガーの欄に、例に従ってYAML形式で入力します。
Banner:
params:
- __mode=view
- _type=campaigngroup
- saved=1
- blog_id=1
template_id: 95
複数のテンプレートIDを指定することもできます。
Banner:
params:
- __mode=view
- _type=campaigngroup
- saved=1
- blog_id=1
template_id:
- 95
- 96
アーカイブテンプレートを再構築したい場合は archive_type と blog_id を指定してください。
Banner:
params:
- __mode=view
- _type=campaigngroup
- saved=1
- blog_id=1
archive_type: Individual
blog_id: 1
テンプレートタグの実行によって別のインデックステンプレートへの再構築トリガーを設定する
MTRebuildIndexByID タグをテンプレートに記載することによって、そのタグが処理された時点で別のインデックステンプレートを再構築できます。
<MTRebuildIndexById template_id="96">
ブログのトップページのテンプレートに記述して、ウェブサイトのトップページのテンプレートIDをtemplate_idモディファイアで指定しておけば、ブログの再構築時にウェブサイトのトップページが再構築されます。これによってマルチブログのトリガーを外すことができます。
少し裏技的ではありますが、このタグをPowerCMSのスニペットフィールドの既定値に入力して再構築を実行させることも可能です。例えば、「書籍」カスタムオブジェクトを保存した際にトップページを再構築する、といった運用が可能になります。
<mt:if name="request.saved">
<MTRebuildIndexById template_id="96">
</mt:if>
このエントリには続編があります。
コメントを投稿する