アルファサード株式会社 代表取締役 野田 純生のブログ


MTの再構築トリガーを細か〜く指定する。


公開日 : 2014-05-09 11:42:33


RebuikdTriggerというプラグインがあります。これ相当の処理はPowerCMSに含まれていますが、再構築のトリガーを細かく制御したい時に利用できる便利プラグインです。

ドキュメントは下記のエントリに記載したのですが、記載されているのは一部の機能のみで、他にもこのプラグインで実現できることがあります。ちょうど機能新しい機能(テンプレートタグ)を追加したので、紹介します。

システムプラグイン設定から再構築トリガーを登録できます。トリガーはcgiのパラメーターで設定します。書式はYAML形式です。

URLが mt.cgi?__mode=cfg_prefs&_type=blog&saved=1 の時、テンプレートのIDが1、2のテンプレートを再構築するには以下のように記述します。再構築出来るのはインデックスアーカイブのみです。YAMLの中に等のテンプレートタグが記述できます。

TriggerName:
    params:
        - __mode=cfg_prefs
        - _type=blog
        - saved=1
    template_id:
        - 1
        - 2

このプラグインではテンプレート・タグによって再構築トリガーを指定することができます。タグが実行(ビルド)される時に指定されたテンプレートやブログを再構築するような動作をします。タグはいずれもファンクションタグです。

MTRebuildBlog

ブログをまるっと再構築します。archive_typeモディファイアを指定することで、指定されたアーカイブのみを対象にすることができます。以下の例では、ブログ(IDが、1、2)の記事アーカイブを再構築します。

<MTRebuildBlog archive_type="Individual" blog_ids="1,2">

制限事項なのですが、このタグで再構築できるのは、MT標準のアーカイブのみです。PowerCMSのカスタムオブジェクトアーカイブやフォルダアーカイブ、タグアーカイブといった拡張されたアーカイブは再構築できません(これらのアーカイブの再構築トリガーについては後述します)。

MTRebuildIndexById

トップページを再構築する、など特定のインデックステンプレートへのトリガーに利用できます。モディファイアにはテンプレートのIDを指定します。

<MTRebuildIndexById id="77">

MTRebuildIndexByBlogId

ブログIDを指定して、インデックスアーカイブをまるっと再構築します。上記のタグでも実現できるのですが。

<MTRebuildIndexByBlogId blog_id="1">

この指定は、以下の指定と同様となります。

<MTRebuildBlog archive_type="index" blog_id="1">

MTRebuild

あららに追加したタグがこれになります。urlモディファイアを指定して再構築を行いますので、これはMT標準以外の拡張アーカイブにも対応できます。カスタムオブジェクトアーカイブなどにも有効です(が、PowerCMSとの併用については未サポート(怒られるのでw))、次期バージョンでPowerCMSがサポートするまでお待ちくださいm(_ _)m。

以下は、記事の同一カテゴリに属する記事アーカイブを再構築するテンプレートの例です。昨日紹介した 横着なMTSetVar - SetFields2Varsプラグイン を併用しています。

<MTEntryCategory setvar="cat_name">
<MTEntries lastn="100" category="$cat_name">
<MTSetFields2Vars object="entry">
<MTRebuild url="$permalink" blog_id="$blog_id">
</MTEntries>

実はその他の地味に便利な機能

これは、MTが標準でサポートすべき機能かと思うのですが、このプラグインを入れることで、下記の再構築トリガーをサポートします。

  • 記事/ページを削除した時に、MultiBlogプラグインで指定した再構築トリガーを実行
  • ウェブページを削除した時にインデックスページを再構築
  • 指定日時非公開処理が走った後にMultiBlogプラグインで指定した再構築トリガーを実行

再構築処理が重くなるのを避ける

mt-config-cgi に、RebuildTriggerBackgroundTasks 1 を指定することで、テンプレートタグからの再構築を別プロセスでバックグラウンド処理できるようになります。これがうまく動くかどうかは環境依存の面があるので、テストの上指定してください。

それでは、よいMTライフを。



このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ