テンプレート内から指定したインデックステンプレートを再構築する MovableType プラグイン:IndexTemplateRebuilder

Posted by
ぴろり
Posted at
2008/03/27 11:38
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
プラグイン カテゴリ

 インデックステンプレートAを再構築するには、事前に必ずインデックステンプレートBを再構築しておく必要がある場合、今までその再構築作業を順を追って手作業で行っていました。また、記事を保存した時やコメント投稿時などの再構築負荷を低減する目的で、殆どのインデックステンプレートの自動再構築オプションをオフにしているために、新しく記事を公開する度に、トップページやRSS、サイトマップなどの必要なインデックステンプレートを忘れないように手作業で再構築していました。
 このようにインデックステンプレート間の再構築順序に依存関係がある場合や、特定複数のインデックステンプレートを一括で再構築するのに便利な MovableType プラグインを書いてみました。

このエントリーをはてなブックマークに追加  

使い方の例 1. 依存関係にあるインデックステンプレートを正しく再構築する

 当サイトでは MovableType のインデックステンプレートとして CSS を生成する際に、サーバ転送量を削減する目的で、無圧縮のファイル(screen.css)と gzip 圧縮されたファイル(screen.css.gz)の二つをのファイルを生成するようにしています。無圧縮で 17.6K バイトある screen.css は gzip 圧縮によって 3.7K バイトと大幅に小さくなります。特に新規ビジタが 7 割近くを占める当サイトでは、これら訪問者毎に screen.css を転送する必要があるので、この転送量の削減効果はかなり大きなものになるでしょう。本来ならば Apache サーバの mod_deflate モジュールなどを利用するなど、Web サーバ側で対処すべき事柄なのですが、当サイトが間借りしているさくらインターネットではサーバが対応していないために自前でなんとかしています(泣)
 screen.cssscreen.css.gz の内容は全く同じなので、screen.css.gz については <MTInclude file="..."> テンプレートタグを利用してファイル全体を読み込んでしまった後、拙作の CompressGZip プラグインを用いて gzip 圧縮を行っています(下図)(index.rdf となっていますが読替えてください)

構築順序に依存関係のある例

 上記の図のように screen.css.gz を正しく生成するためには、自身の再構築に先立って screen.css の構築処理が事前に完了している必要があります。今までは、まず screen.css を再構築してから screen.css.gz の再構築を手動で行っていました。順番を逆にしてしまうと、両者のファイル内容に違いが出てしまいます。
 このような煩雑な手間を解消するために、IndexTemplateRebuilder プラグインを利用して、screen.css.gz のテンプレート内から screen.css の再構築を行うように <MTBuildIndexTemplate>タグを追加しました。これによって、screen.css.gz 一つを再構築するだけで、自動的に screen.css の再構築が行われるようになり、その構築を待ってからファイルの読込み・圧縮が行われるようになります。

使い方の例 2. 特定複数のインデックステンプレートのみを一括で再構築する

 記事の微妙な言い回しを書き換える程度のちょっとした更新であれば、殆どのインデックステンプレートは再構築される必要がありません。また、コメントが投稿されたり、トラックバックを受信した場合も、全ての記事一覧RSS など、再構築される必要のないインデックステンプレートが殆どです。そのため、当サイトでは、不要な再構築による負荷を削減する目的で、最新のコメント/トラックバックを表示するためのインデックステンプレートを除いて自動で再構築が行われないように指定しています。
 しかしこれでは逆に、新しい記事を公開する際には、トップページや RSS、サイトマップなどなど、幾つものインデックステンプレートを忘れないように手動で再構築することになります。これがなかなか大変で、実際には時々 RSS の再構築を忘れて、更新情報の通知ができていなかったことも何度かありました。
 そこで IndexTemplateRebuilder プラグインを利用して、記事の公開時に再構築すべきインデックステンプレートを一括で再構築するためのインデックステンプレートを一つ作ってしまいました(あぁ、ややこしい)。記事を公開する際には、このテンプレート一つを再構築するだけで必要な全てのインデックステンプレートが漏れなく再構築されるようになります。このインデックsテンプレートには "【記事の公開/修正完了時に再構築するテンプレート】" のように判りやすい名前をつけています(苦笑)

<$MTBuildIndexTemplate async="1" name="トップページ"$>
<$MTBuildIndexTemplate async="1" name="全ての記事"$>
<$MTBuildIndexTemplate async="1" name="全てのタグ"$>
<$MTBuildIndexTemplate async="1" name="RSS 1.0 (Abstructs) - gzip compressed"$>
<$MTBuildIndexTemplate async="1" name="サイトマップ (XML)"$>
<$MTBuildIndexTemplate async="1" name="モジュール (最近の人気記事)"$>
<$MTBuildIndexTemplate async="1" name="モジュール (オススメ記事)"$>

タグリファレンス

MTIndexTemplateRebuilder 変数タグ
 name パラメータで指定されたインデックステンプレートを強制的に再構築します。blog_id パラメータを指定することで、他のブログに属するインデックステンプレートも対象にできます。再構築は同期的に行われますが、async または background パラメータを指定すると、可能であればバックグラウンドで非同期的に再構築が行われます。このテンプレートタグ自体は何の文字出力も行いません。

ダウンロード

このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。