Movable Typeでインデックステンプレートの再構築をフィルタリングする「RebuildIndexFilter プラグイン」
Movable Type のインデックステンプレートの再構築をフィルタリングする RebuildIndexFilter プラグインを作ってみました。MT4.2x/MT5.0x/MT5.1xで動作を確認しています。
1.主な機能
このプラグインは、インデックステンプレートの再構築トリガを、次の5種類のイベントから選択することができます。
- ブログ記事の投稿
- ウェブページの作成
- コメント投稿
- トラックバック受信
- すべて
例えば、フィードなどは「ブログ記事の投稿」のみをトリガに再構築することで、コメント投稿やトラックバック受信による再構築から除外することができます。
2.プラグイン作成の経緯
そもそも、Movable Type のインデックステンプレートの再構築のトリガは、再構築画面からの再構築以外に、ブログ記事の投稿やコメント投稿・トラックバック受信も含まれます。
私のブログでは、Google サイトマップや 全エントリータイトルを表示するアーカイブインデックス、タグクラウドといった、再構築に時間のかかるページに加え、サイドバーのパーツ(最近のエントリー・最近のコメント・最近のトラックバックなど)について、インデックステンプレートを使って数多くのモジュール化を行っています。
このため、インデックステンプレート全体を再構築してしまうとサーバにかなりの負荷がかかるのですが、コメント投稿では、コメントとは関係のないインデックステンプレートまですべて再構築してしまいます(内容に変化がなければファイルとしては出力されません)。
このため、現在使用中のサーバ(CORESERVER-A)に移転した直後のインデックステンプレートの再構築関係は次のようになっており、コメント投稿から完了までに30秒ほどかかり、500エラーが多発していました。
その後、自ブログに本プラグインを導入し、下の図のように、イベント別に再構築するインデックステンプレートを絞り込んだところ、コメント投稿時間が10秒前後で完了するようになり、劇的に改善しました。
ということで、本プラグインを適用し、インデックステンプレートの再構築イベントをフィルタリングすることで、コメント投稿処理やトラックバック受信処理の短縮を図ることができます。また、イベントと関係のないインデックステンプレートの再構築を避けたい、という場合にもお勧めです。
再構築画面からの再構築には影響ありません。
2.価格
3300円/1インストールMT(税込み、購入前に必ず動作確認してください)
3.プラグインのダウンロード
下記のリンクからプラグインアーカイブをダウンロードし、任意のフォルダに保存してください。今回はデータベースを利用する本格版と、データベースを使用しない簡易版の2種類を用意しました。フィルタリングの動作はどちらも同じですが、設定方法が異なります(詳細は後述)。
変更履歴 2008.09.10 初版 2008.09.12 スクリプト名の変更に対応。本格版について複数イベント指定に対応。 2008.09.15 本格版について、コメント・トラックバックの承認およびスパムに対応。いくつかの不具合を修正 2008.09.16 本格版について、XREA で動作しない不具合を修正 2008.09.16 本格版について、再構築画面からの動作を修正 2008.09.19 本格版について、日時指定投稿に対応。チェックロジックの見直し 2008.09.25 本格版について、日時指定投稿の不具合修正 2008.09.27 本格版について、通知メールからの承認に対応 2008.10.07 本格版について、Can't locate object method "properties" via package "MT::Template" at lib/MT/Object.pm line 195. となるエラーの対処 2010.03.19 v0.10 本格版について、Movable Type 5.0のUIに対応 2012.01.06 v0.11 本格版について、Movable Type 5.1のUIに対応
- RebuildIndexFilter_0_09.zip(本格版:MT4.2x用)
- RebuildIndexFilter_0_10.zip(本格版:MT5.0x用)
- RebuildIndexFilter_0_11.zip(本格版:MT5.1x用)
- RebuildIndexFilter.zip(簡易版)
4.インストール
プラグインアーカイブを解凍し、中にある RebuildIndexFilter フォルダを plugins ディレクトリにアップロードしてください。
本格版はアップロードした後に管理画面にアクセスすると、次のようなアップグレード画面になりますので、「アップグレード開始」をクリックし、画面にしたがって操作を進めてください。簡易版はこの画面は表示されません。
MT4の画面(MT5以降も同じです)
ブログ管理画面より「システム」→「プラグイン」でプラグイン一覧を表示し、次のように表示されればOKです。
5.使用方法(本格版)
インデックステンプレートのオプションに「再構築イベント」という項目が表示されるので、そこから再構築を実施したいイベントを選択します。デフォルトはすべてのイベントで無条件に再構築します。
MT4の画面
MT5.1の画面
データベースは、Movable Type のアップグレードによる不具合を避けるため、独立したテーブルを作成しています。
現在確認できている動作は次の通りです。
再構築イベント | 処理 |
---|---|
ブログ記事の投稿/編集 | ブログ記事の新規投稿 ブログ記事の編集 プログ記事編集画面からの公開 プログ記事編集画面からの未公開 プログ記事一覧画面からの公開 プログ記事一覧画面からの公開取り消し プログ記事一覧画面からの削除 |
ウェブページの作成/編集 | ウェブページ新規作成 ウェブページ編集 ウェブページ編集画面からの公開 ウェブページ編集画面からの未公開 ウェブページ一覧画面からの公開 ウェブページ一覧画面からの公開取り消し 注:「削除」では再構築処理が行われないため、プラグインは動作しません |
コメント投稿/編集 | コメント投稿 コメントの編集 コメント編集画面からの公開 コメント編集画面からの公開取り消し コメント一覧画面からの公開 コメント一覧画面からの公開取り消し コメント一覧画面からのスパム コメント一覧画面からのスパム解除 通知メールからの承認 通知メールからのスパム指定 |
トラックバック投稿/編集 | トラックバック受信 トラックバックの編集 トラックバック編集画面からの公開 トラックバック編集画面からの公開取り消し トラックバック一覧画面からの公開 トラックバック一覧画面からの公開取り消し トラックバック一覧画面からのスパム トラックバック一覧画面からのスパム解除 通知メールからの承認 通知メールからのスパム指定 |
インデックステンプレート編集画面からの「保存と再構築」、および再構築画面からの再構築については、プラグインの設定とは関係なく、無条件に再構築します。
6.使用方法(簡易版)
インデックステンプレートの中に次のような MTIgnore タグを挿入します。挿入位置はどこでも構いません。プラグインは、この挿入された MTIgnore タグを検索して再構築をフィルタリングします。
記述する内容は次の通りです。
- ブログ記事投稿・編集で再構築を行う場合
<mt:ignore>entry</mt:ignore>
- ウェブページ作成・編集で再構築を行う場合
<mt:ignore>page</mt:ignore>
- コメント投稿で再構築を行う場合
<mt:ignore>comment</mt:ignore>
- トラックバック受信で再構築を行う場合
<mt:ignore>ping</mt:ignore>
何も挿入しない場合は無条件に再構築します。
7.その他
イベントの判定方法はあまりエレガントではないので、完璧に動作するかどうかは分かりません。基本的な動作については正常性を確認しています。
2008.09.10
5項の画面が間違っていたので差し替えました。
2013.04.10
簡易版の説明に誤りがありましので修正しました。
- Movable Typeの再構築コストを下げる「RebuildIndexFilterプラグイン」バージョンアップ
- TwitCommentプラグイン v0.04
- TwitCommentプラグイン v.0.22
- TwitCommentプラグイン(Movable Type 4.x対応)
- ArchivePathSelector プラグイン v0.10
- PageButeプラグインで分割したページの文字コードを変更する方法
- CharsetEncoder プラグイン v0.10
- CharsetEncoder プラグイン v0.05
- CharsetEncoder プラグイン v0.04
- Movable Typeのウェブページの出力を制御する「PagePublishControllerプラグイン」バージョンアップ
- CharsetEncoder プラグイン v0.03
- CharsetEncoder プラグイン v0.02
- Movable Type のインデックステンプレートの再構築をフィルタリングする「RebuildIndexFilter プラグイン」バージョンアップ
- PostToTwitter プラグイン
- asciiCommentfilter プラグイン
≫ RebuildIndexFilter(簡易版)のテスト from 移行テスト中…
小粋空間の RebuildIndexFilter プラグイン を公開用のブログ(MT4.37)で便利に使っているけれど、 「0.10 本格版 Movabl... [続きを読む]
先日はありがとうございました。
また質問ができちゃいました。
検索結果ページ、タグページなどがヤフー、グーグルなどにインデックスされているとあぼになりやすいと聞いたのですが、これらのページをインデックスさせない方法をおしえていただきたいです。><
よろしくお願いいたします。
こんにちは。
似たようなプラグインを作ろうと考えていたところだったので、利用させていただきます。
ただ、ソースコードを見たところでは、mt-comments.cgi等のファイル名がソースに直に書かれているので、スパム除け等のためにCGIのファイル名を変えていると、正しく動作しなくなると思います。
こんにちは。
無理やり丸ごとモジュールにして、キャッシュさせてましたが、これですっきり出来ます。
簡易版を使うと、テンプレート側でキャッシュ指定も出来ますね。
紹介しまくろうっと。
こんばんわ^^
RebuildIndexFilter プラグイン使わせてもらいました。
わたしのサイトでもインデックステンプレートを毎回再構築する必要のないものは手動に設定することで負荷の軽減を行ってました。
再構築条件を設定できるんのはとっても嬉しい機能ですね (●´∀`●)
で、実際に使ってみて一点ご要望があります。
現状では、ドロップダウンリストからはコメント投稿時、トラックバック受信両方を選択することができません。
これをコメント/トラックバックの何れかを満たしたら再構築・・・という選択肢は可能でしょうか。
もしカンタンにできるようでしたらお時間があるときに対応して頂けると嬉しいです。
ご無理を言ってすいません。
>名無しさん
こんにちは。
ご質問の件ですが、下記のサブテンプレートをヘッダの meta 要素が並んでいる次のあたりに追加してみてください。
<mt:unless name="system_template">
<mt:elseIf name="body_class" like="mt-comment">
<mt:else>
<meta name="robots" content="noindex" />
</mt:unless>
それではよろしくお願い致します。
>壱さん
こんにちは。
コメント&ご指導ありがとうございます!
ユーザが変更可能にするか、コンフィグから取得するよう改善してみます。
>oscarさん
こんにちは。
コメントありがとうございます。
是非紹介してやってください(笑)。
>bzbellさん
こんにちは。
ご利用&ご紹介ありがとうございます。
ご要望の件は実現可能と思います。
当初、チェックボックスで選択する方法で作り始めたのですが、MT::Templateへのカラム追加で考えていたため、その場合、複数のチェックデータをプラグインから制御(結合・分割)できず、プルダウンに変更してしまいました。
その後、別の観点で、カラム追加から別のテーブルを作る方式に変更した(=プラグイン側でチェックデータ制御可能)のですが、チェックボックスにする思考が抜けてしまってました。
バージョンアップしたら別途エントリー致します。
yujiroさん、こんにちは。
RebuildIndexFilter本格版を mt4.35 で便利に使わせていただいておりました。
このほど、5.12にアップグレードして、プラグインディレクトリにRebuildIndexFilterを置いたのですが、プラグイン一覧に表示されず、再構築がエラーになりました。
何か設定を見落としているのでしょうか。ご指摘がありましたらご教示ください。
どうぞよろしくお願い申し上げます。
yujiroさん、すみません。追加です。
RebuildIndexFilterはシステムの中に出てくるのですね。
とりあえず無効にして再構築しましたが、
今後も利用させていただきたいと思います。
どうぞ、よろしくお願いします。
yujiro さん、追加の報告です。
本格版では、再構築の時に
failed loading package RebuildIndexFilter::CMS for routine RebuildIndexFilter::CMS::save_rebuild_event: Can't locate MT/RebuildIndexFilter.pm in @INC (@INC contains:...
のようなエラーが出ました。
また、インデックステンプレートのオプションに「再構築イベント」も表示されませんでしたので、簡易版に入れ替えて MTIgnore タグで使ってみたら、エラーにならず動作しているようです。
できれば、以前のように本格版を使いたいと思っています。
yujiroさん、たびたび失礼します。
MT5.12で簡易版0.02もうまく動かないようです。
(テスト用のブログからトラックバックしました。)
>s.fujinoさん
こんばんは。
ご返事遅くなってすいません。
情報ありがとうございます。動作確認してバージョンアップしたいと思いますのでお待ち頂けますでしょうか。
それではよろしくお願い致します。
yujiro さん、こんばんは。
コメントどうもありがとうございました!
お待ちしておりますので、どうぞよろしくお願いいたします。
いつも参考にさせていただいています。
mt4.25 を xserver で運用しています。
mySQL5.0.95 です。
RebuildIndexFilter バージョン 0.09を導入させていただきました。
(MTはコメントやトラックバックをリネームしています。)
ところが「アップグレード開始」で画面が進みません。
最初は2行ほどコメントが出たようですが、記録していませんでした。
現状は、ログインしようとすると「アップグレード開始」画面で何もできない状態です。
データベースを基に戻すしか方法はないのでしょうか。
こんばんは。
いつもご覧くださりありがとうございます。
ご質問の件ですが、インストールしたRebuildIndexFilterプラグインをpluginsディレクトリから削除してみて、ログイン画面から進むことができるか確認していただけますでしょうか。
アップグレード開始から進まない事象については別途確認致します。