ブログ記事がないカテゴリアーカイブが出力されない(MT5.2.2)

MTQに、「Movable Type 5.2.2にアップグレードすると、ブログ記事がないカテゴリアーカイブが出力されなくなった」という質問が上がっていました。
この件について調べてみました。

1.問題の原因

Movable Type 5.2では、ブログ記事がないカテゴリのアーカイブページも出力されていました。
しかし、fogbugzに「ある条件下でカテゴリアーカイブページが削除されない」という不具合の報告がありました。
この不具合の修正によって、ブログ記事がないカテゴリでは、アーカイブページが出力されなくなりました。

2.mt-config.cgiによる回避

mt-config.cgiに以下の行を追加すると、一応はブログ記事がないカテゴリでもアーカイブページを出力できるようになります。

DeleteFilesAtRebuild 0

ただし、このようにすると、以下の問題が起こります。

  • ブログ記事を削除したときに、その記事のアーカイブページが残ったままになります。
  • カテゴリ自体を削除したときに、そのカテゴリのアーカイブページが残ったままになります。

3.ソースコードの書き換えによる回避

Movable Type 5.2.2のlib/MT/ArchiveType/Category.pmで、166行目を以下のように書き換えると、記事がないカテゴリのアーカイブページは出力され、カテゴリ自体を削除したときにはそのアーカイブページが削除されるようになりました。

書き換え前

MT::ArchiveType::archive_entries_count( $obj, \%params );

書き換え後

return 1;

ただ、この書き換えを行うと、カテゴリとブログ記事に絡む他の点で、何らかの副作用が出るかもしれません。

3.カテゴリアーカイブページの出力方法を選択可能にしてほしい

fogbugzの「ある条件下でカテゴリアーカイブページが削除されない」は、「記事がないカテゴリでは、アーカイブページは存在すべきではない」との考えに基づいた修正になっています。
その仕様の方が好ましい場合も多いと思います。

しかし、MTQでご質問された方の事例にように、記事がないカテゴリでも、アーカイブページが必要な場合もあります。
記事がないカテゴリで、カテゴリアーカイブページを出力するかどうかを、設定で選べるようにしてほしいです。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください