MTFileTemplateタグの「%f」等の落とし穴

先日、以下のような質問をいただきました。

カテゴリアーカイブテンプレートの中で、優先ではないブログ記事アーカイブテンプレートで出力している個々の記事にリンクするために、<$mt:ArchiveTemplate format="%y%m/%-f"$>」のタグを使いました。 すると、「%f」が「index.html」に変換され、個々の記事のファイル名になりません。なぜでしょうか。

これはある種落とし穴的な話ですので、記事にしておきます。

アーカイブマッピングで使える文字として、「%f」や「%-f」があります。
これらの文字は、「アーカイブファイルの名前」を意味します。

ブログ記事アーカイブテンプレートでアーカイブマッピングを指定する際に、「%f」などを使うことができます。
この場合、アーカイブファイルは個々のブログ記事のファイルに対応しますので、「%f」がブログ記事のファイル名を表します。

ところが、カテゴリアーカイブテンプレート内で「%f」を使った場合、アーカイブファイルは、個々のカテゴリのアーカイブのファイルに対応します。
通常の設定では、カテゴリアーカイブページでは、ファイル名が「index.html」になります。
そのため、「%f」が「index.html」に変換されるという現象になります。

カテゴリアーカイブテンプレートにMTEntriesのブロックを入れて、MTFileTemplateタグで個々のブログ記事にリンクする場合、上の理由から、「%f」では正しく動作しません。
ブログ記事のファイル名を表す記号に置き換える必要があります。

ただ、1つの記号でブログ記事のファイル名を表すことはできません。
「%f」「%-f」の代わりに、「%b%x」もしくは「%-b%x」を使います。
「%-b%x」にした場合、ファイル名に含まれる「_」が「-」に変換されます。
「%b%x」では、「_」は変換されずにそのまま出力されます。

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