MT4.2以降で、特定カテゴリの記事リストを表示する方法

Movable Type (ムーバブル・タイプ) で特定カテゴリの記事リストを表示しようと思えば、MTEntriesタグを使って、下記のように設定するのが普通だと思います。

例:カテゴリ名「Movable Type備忘録」に属する記事を、直近5件だけ表示する

<ul>
<MTEntries categories="Movable Type備忘録"  lastn="5">
  <li><a href="<$MTEntryLink$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>

ところが、この方法では、
MT3.x以前に作られたデータ(SQLiteを利用)を、MT4.2xにアップデートした時点で、カテゴリから最新の記事をうまく抽出できないのです。

現象としては、直近の記事が1件から数件、表示できなかったり、また、(多分)不規則に記事が飛ぶ場合もありました。limitやoffsetの設定の問題かと思いましたが、設定を変えても同じでした。

いろいろ試してみると、プログラムがMT4.1xまでと、データがMT4以降に作られたものの場合は、まったく問題ないことが分かりました。エンジンが4.2以降で、かつ、データが3.x以前に作られた古い場合のみが問題というわけです。

(追記)4.26アップデートで、MTEntriesタグのおけるcategoryモデファイアの別のバグフィクスが行われたというので、期待していましたが、カテゴリ名にスペースや&がなくても、この問題は解決していませんでした。。。 どうもMTEntriesには、いろいろあるらしいのです。⇒小粋空間

ネット上で調べても、特定カテゴリの記事リストがうまく出ない、というぴったりした情報が見当たらず、自分だけの問題かと悩んでいましたところ、最近、ヒントとなる情報を得ました。⇒技評の記事

結論を言うと、特定カテゴリを抽出するには、MTIfCategoryを利用すると、3.x以来の古いデータでも、意図どおりに記事リストを抽出できることが分かりました。具体的には、

<MTBlogEntryCount setvar="count">
<MTEntries lastn="$count" strip_linefeeds="1">
<MTIfCategory name="Movable Type備忘録">
<MTSetvar name="last" value="1" op="+">
<MTIf name="last" le="5">
<a href="<$MTEntryLink$>"><$MTEntryTitle$></a><br />
</MTIf><MTElse>
</MTIfCategory>
</MTEntries>

最初の2行で、ブログの総記事数<$MTBlogEntryCount$>を変数countに入れ、ブログ全体から、検索をするための指定をします。無印のMTEntriesではうまくいきませんでした。

次に、3行目からのMTIfCategoryのブロックで、カテゴリ名「Movable Type備忘録」の記事を抽出します。さらに、抽出する件数は、lastという変数にカウントして、MTIfブロックのopモディファイアで判断させます。

(補足1)
尚、この場合、MTEntriesのモディファイアlastnで指定する値は、他のカテゴリの記事を含む、記事全体における検索範囲を示すのであって、表示したい件数ではありませんので、ご注意を。

ブログ全体ではなく、全記事の直近50件の中から、特定カテゴリの記事を探す、という場合はlastn="50"とします。

(補足2)
また、<$MTBlogEntryCount$>を変数に代入するとき、MTSetVarなどを使うと、再構築時にエラーになります。モディファイアsetvarを使うとうまういくのですね。藤本さんの記事でようやく解決できました。

(補足3)
MTEntriesタグにstrip_linefeeds="1"を設定し、その下のブロックの行頭のインデントを全部取り、かつMTElseタグも入れておくと、無駄な改行や空白が、条件外の時に出力されずにすみます。