TopMovable Typeプラグインコールバック > RebuildIndexFilter プラグイン
News
各種ブログテンプレート
2008年9月10日

エントリー本文

RebuildIndexFilter プラグイン

Posted at September 10,2008 12:55 AM
Category:[コールバック]
Tag:[, , ]

Movable Type のインデックステンプレートの再構築をフィルタリングする RebuildIndexFilter プラグインを作ってみました。4.2 以降で動作を確認しています。

1.主な機能

このプラグインは、インデックステンプレートの再構築トリガを、次の5種類のイベントから選択することができます。

  • ブログ記事の投稿
  • ウェブページの作成
  • コメント投稿
  • トラックバック受信
  • すべて

例えば、フィードなどは「ブログ記事の投稿」のみをトリガに再構築することで、コメント投稿やトラックバック受信による再構築から除外することができます。

2.プラグイン作成の経緯

そもそも、Movable Type のインデックステンプレートの再構築のトリガは、再構築画面からの再構築以外に、ブログ記事の投稿やコメント投稿・トラックバック受信も含まれます。

私のブログでは、Google サイトマップや 全エントリータイトルを表示するアーカイブインデックス、タグクラウドといった、再構築に時間のかかるページに加え、サイドバーのパーツ(最近のエントリー・最近のコメント・最近のトラックバックなど)について、インデックステンプレートを使って数多くのモジュール化を行っています。

このため、インデックステンプレート全体を再構築してしまうとサーバにかなりの負荷がかかるのですが、コメント投稿では、コメントとは関係のないインデックステンプレートまですべて再構築してしまいます(内容に変化がなければファイルとしては出力されません)。

このため、現在使用中のサーバ(CORESERVER-A)に移転した直後のインデックステンプレートの再構築関係は次のようになっており、コメント投稿から完了までに30秒ほどかかり、500エラーが多発していました。

改善前の再構築

その後、自ブログに本プラグインを導入し、下の図のように、イベント別に再構築するインデックステンプレートを絞り込んだところ、コメント投稿時間が10秒前後で完了するようになり、劇的に改善しました。

改善後の再構築

ということで、本プラグインを適用し、インデックステンプレートの再構築イベントをフィルタリングすることで、コメント投稿処理やトラックバック受信処理の短縮を図ることができます。また、イベントと関係のないインデックステンプレートの再構築を避けたい、という場合にもお勧めです。

再構築画面からの再構築には影響ありません。

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 本格版について、Movable Type 5のUIに対応
RebuildIndexFilter_0_10.zip(本格版)
RebuildIndexFilter.zip(簡易版)

プラグインのご利用および質問に対する回答等について、ご支援・ご賛同くださる方からの寄付をお待ち申し上げます。

2.インストール

プラグインアーカイブを解凍し、中にある RebuildIndexFilter フォルダを plugins ディレクトリにアップロードしてください。

本格版はアップロードした後に管理画面にアクセスすると、次のようなアップグレード画面になりますので、「アップグレード開始」をクリックし、画面にしたがって操作を進めてください。簡易版はこの画面は表示されません。

プラグイン一覧

ブログ管理画面より「システム」→「プラグイン」でプラグイン一覧を表示し、次のように表示されればOKです。

プラグイン一覧

3.使用方法(本格版)

インデックステンプレートのオプションに「再構築イベント」という項目が表示されるので、そこから再構築を実施したいイベントを選択します。デフォルトはすべてのイベントで無条件に再構築します。

再構築イベントの種類

データベースは、Movable Type のアップグレードによる不具合を避けるため、独立したテーブルを作成しています。

現在確認できている動作は次の通りです。

再構築イベント処理
ブログ記事の投稿/編集 ブログ記事の新規投稿
ブログ記事の編集
プログ記事編集画面からの公開
プログ記事編集画面からの未公開
プログ記事一覧画面からの公開
プログ記事一覧画面からの公開取り消し
プログ記事一覧画面からの削除
ウェブページの作成/編集 ウェブページ新規作成
ウェブページ編集
ウェブページ編集画面からの公開
ウェブページ編集画面からの未公開
ウェブページ一覧画面からの公開
ウェブページ一覧画面からの公開取り消し
注:「削除」では再構築処理が行われないため、プラグインは動作しません
コメント投稿/編集 コメント投稿
コメントの編集
コメント編集画面からの公開
コメント編集画面からの公開取り消し
コメント一覧画面からの公開
コメント一覧画面からの公開取り消し
コメント一覧画面からのスパム
コメント一覧画面からのスパム解除
通知メールからの承認
通知メールからのスパム指定
トラックバック投稿/編集 トラックバック受信
トラックバックの編集
トラックバック編集画面からの公開
トラックバック編集画面からの公開取り消し
トラックバック一覧画面からの公開
トラックバック一覧画面からの公開取り消し
トラックバック一覧画面からのスパム
トラックバック一覧画面からのスパム解除
通知メールからの承認
通知メールからのスパム指定

インデックステンプレート編集画面からの「保存と再構築」、および再構築画面からの再構築については、プラグインの設定とは関係なく、無条件に再構築します。

4.使用方法(簡易版)

インデックステンプレートの中に次のような MTIgnore タグを挿入します。挿入位置はどこでも構いません。プラグインは、この挿入された MTIgnore タグを検索して再構築をフィルタリングします。

再構築イベント

記述する内容は次の通りです。

ブログ記事投稿・編集で再構築を行う場合
<mt:ignore>EntryOnly</mt:ignore>
ウェブページ作成・編集で再構築を行う場合
<mt:ignore>PageOnly</mt:ignore>
コメント投稿で再構築を行う場合
<mt:ignore>CommentOnly</mt:ignore>
トラックバック受信で再構築を行う場合
<mt:ignore>PingOnly</mt:ignore>

何も挿入しない場合は無条件に再構築します。

5.その他

イベントの判定方法はあまりエレガントではないので、完璧に動作するかどうかは分かりません。基本的な動作については正常性を確認しています。

2008.09.10
4項の画面が間違っていたので差し替えました。

Posted by yujiro ReTweet This!
関連記事
この記事を読んだ人はこんな記事も読んでいます
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


コメント

先日はありがとうございました。
また質問ができちゃいました。

検索結果ページ、タグページなどがヤフー、グーグルなどにインデックスされているとあぼになりやすいと聞いたのですが、これらのページをインデックスさせない方法をおしえていただきたいです。><

よろしくお願いいたします。

[1] Posted by 名無し : September 10, 2008 10:17 AM

こんにちは。
似たようなプラグインを作ろうと考えていたところだったので、利用させていただきます。

ただ、ソースコードを見たところでは、mt-comments.cgi等のファイル名がソースに直に書かれているので、スパム除け等のためにCGIのファイル名を変えていると、正しく動作しなくなると思います。


[2] Posted by 壱 : September 10, 2008 10:22 AM

こんにちは。
無理やり丸ごとモジュールにして、キャッシュさせてましたが、これですっきり出来ます。
簡易版を使うと、テンプレート側でキャッシュ指定も出来ますね。
紹介しまくろうっと。

[3] Posted by oscar : September 10, 2008 6:39 PM

こんばんわ^^

RebuildIndexFilter プラグイン使わせてもらいました。
わたしのサイトでもインデックステンプレートを毎回再構築する必要のないものは手動に設定することで負荷の軽減を行ってました。

再構築条件を設定できるんのはとっても嬉しい機能ですね (●´∀`●)

で、実際に使ってみて一点ご要望があります。

現状では、ドロップダウンリストからはコメント投稿時、トラックバック受信両方を選択することができません。

これをコメント/トラックバックの何れかを満たしたら再構築・・・という選択肢は可能でしょうか。
もしカンタンにできるようでしたらお時間があるときに対応して頂けると嬉しいです。

ご無理を言ってすいません。

[4] Posted by bzbell : September 10, 2008 10:53 PM

>名無しさん
こんにちは。
ご質問の件ですが、下記のサブテンプレートをヘッダの 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へのカラム追加で考えていたため、その場合、複数のチェックデータをプラグインから制御(結合・分割)できず、プルダウンに変更してしまいました。
その後、別の観点で、カラム追加から別のテーブルを作る方式に変更した(=プラグイン側でチェックデータ制御可能)のですが、チェックボックスにする思考が抜けてしまってました。
バージョンアップしたら別途エントリー致します。

[5] Posted by yujiro : September 11, 2008 9:49 AM
コメントする
greeting

*必須



ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.02