MTで記事の部分的再構築

MTで記事が増えてくると、再構築にすごく時間がかかるようになってきます。ここでいう再構築というのは、
全体再構築の場合です。
とくに、デザインをリニューアルするときなどは、ちょっと変更したことを確認したいだけなので、全記事を
再構築しなくてもよいのになぁ、、。といった場合もあるかと思います。

そこで、今回はNoRebuildプラグインを利用して、再構築を部分的に行う方法について試してみました。

まずは、藤本さんの作成されたNoRebuildプラグインをセットします。少々古いプラグインですが、最新のMT5.27でも
問題なく動作します。
http://www.h-fj.com/blog/archives/2009/08/01-073819.php

さて、このプラグインは、アーカイブマッピングが「*no_rebuild*」の場合に、ページを生成しないという働きがあります。
そこで、ブログ記事のテンプレートのアーカイブマッピング部分をデフォルトの

%y/%m/%-f

ではなく、カスタムアーカイブマッピングを選択して、(入力欄が狭いのでMTタグを入力するが大変なのでコピペ推奨)

*no_rebuild*<$mt:FileTemplate format="%y/%m/%-b%x">

とします。(すべて一行で入力する必要があります)

上記の設定は、記事の公開日が2012年以前であればアーカイブマッピングを「*no_rebuild*」とし、2013年以後であれば
「%y/%m/%-b%x」とすることに対応しています。

※もともと「%y/%m/%-f」なのに、何故「%y/%m/%-b%x」なのかというと、これは後ほど記述するリンクタグと合わせるためです。%-fではなく%-b%xを使う理由は、
http://www.h-fj.com/blog/archives/2013/07/23-090745.php
を参照して下さい。


さて、こうすることで、2013年以後の記事だけが再構築されることになりました。
とはいえ、このままでは2012年以前の記事の扱いが出来ていません。そこで、ブログ記事のテンプレートをコピーして、
ブログ記事(過去)という名前にして保存します。

ブログ記事(過去)の方は、アーカイブマッピング

*no_rebuild*<$mt:FileTemplate format="%y/%m/%-b%x">

とします。(すべて一行で入力する必要があります)

上記の設定は、さっきとは逆で、記事の公開日が2013年以後であればアーカイブマッピングを「*no_rebuild*」とし、2013年以前であれば
「%y/%m/%-b%x」とすることに対応しています。

つまり、ブログ記事とブログ記事(過去)という2つのテンプレートの役割は、次図のようになります。

そして、通常はブログ記事(過去)のテンプレートは再構築の対象にしないように公開を「スタティック」ではなく「手動」としておきます。

こうすれば、明示的にテンプレートを開いて「保存と再構築」を押さない限り、このテンプレートは再構築されなくなります。

以上で、再構築するテンプレート、しないテンプレートの切り分けが出来ました。


しかしながら、これだけでは、まだ不十分です。

ブログ記事とブログ記事(過去)という二つのテンプレートのうち、優先しているのは「ブログ記事」なので、
MTEntryPermaLinkの指し示すURLは、ブログ記事の方のアーカイブマッピングが適用されます。
このため、2012年以前の記事へのリンクがうまく貼れません。

そこで、MTEntryPermaLinkなどでリンクを貼るのはあきらめて、代わりに<$mt:BlogArchiveURL$><$mt:FileTemplate format="%y/%m/%-b%x">
を使います。
ブログ上のすべてのリンクを、上記で書き換える必要があります。


これで完成です。
以後の再構築では、2013年以後のみが再構築の対象になるので(とはいえ、アーカイブマッピングの計算などは全記事対象
ですから、本当に記事が少ない場合ほどは早くなりませんが)、ある程度有効なのではないかと思います。


この方法では、再構築の対象年を自由に変更できますし、過去記事の場合はページデザインを変更して過去記事用のものを
用意すれば、毎回再構築しなくても不自然ではないようにすることも出来るかと思います。