記事本文
ここで言う「メニュー部分」とは
Movable Type のテンプレートにおいて、メニュー部分とは、大抵の場合検索フォームや各カテゴリアーカイブ・月別アーカイブへのリンク、最近の記事へのリンクなど、本文部分以外の各種メニュー的なリンクを指すと思います。 明確な定義がされているわけではありませんが、ここでの説明では以下「メニュー部分」と表す場合は、そういったリンクの羅列を指します。
Web Standards with MT ver.3.2 Strict をダウンロード された方は、 index_templates\main_index.txt または index_templates\archives.txt をご覧ください。 ダウンロードされていない方は、ご自分の Movable Type の管理画面から、「メインページ」または「アーカイブページ」のテンプレートをご覧ください。
Web Standards with MT ver.3.2 Strict テンプレートをご覧になっている場合は
<dl id="menu">
~
</dl>
という部分、 Movable Type の管理画面をご覧になっている場合は
<div id="beta">
~
</div>
という部分 ( Movable Type 3.2x より前のバージョンである場合や、テンプレートをカスタマイズしている場合、あるいはどこかの配布テンプレートを適用している場合はこの限りではありません ) がメニュー部分ということになります。
「メニュー部分」があるのはインデックステンプレートのみ
さてこのメニュー部分ですが、 Movable Type を使用したことがある方は、テンプレートによってその部分があったりなかったりすることにお気付きだと思います。 メニュー部分があるテンプレートは「メインページ」と「アーカイブページ」、メニュー部分がないテンプレートはそれ以外となっています。 さて、こういった部分の有無を決める基準は何でしょうか。
もちろん、「エントリアーカイブや日別アーカイブやカテゴリアーカイブには不要である」という理由があるかもしれません。 しかし、そのような想像のレベルでなく、現実的な部分で推測できる理由があります。
- アーカイブテンプレートにメニュー部分を配置すると、記事を追加するごとに再構築しなければならない
-
記事を追加すると、最近の記事へのリンクやカテゴリアーカイブ・月別アーカイブの記事数も変わります。 「メインページ」と「アーカイブページ」は記事が追加される際に同時に再構築されるようになっているため問題はありませんが、アーカイブテンプレートは全てが再構築されるわけではありません。 ( 追加された記事のエントリアーカイブやその前後のエントリアーカイブ、関係するカテゴリアーカイブ・月別は再構築されますが、それ以外のアーカイブ――例えば、 10 月 25 日付けで記事を書いても、 9 月の月別アーカイブは再構築されません。 )
記事を書くたびに手動でサイト全体を再構築するなら問題はありませんが、サーバ負荷や手間などの関係で難しいでしょう。 アーカイブテンプレートにメニュー部分を配置する場合、そのアーカイブによってはメニュー部分が常に最新の状態となるわけではない可能性があるのです。 なお、この問題はダイナミック・パブリッシングでは発生しないかもしれません。 ( 私はダイナミック・パブリッシングを利用していないため、あくまで想像ですが。 )
- カテゴリアーカイブテンプレートにメニュー部分を配置すると、そのカテゴリ以下でのカテゴリ一覧や最新の記事を抽出する
-
以前カテゴリアーカイブとナビゲーションリスト - カテゴリアーカイブの特徴でも説明しましたが、カテゴリアーカイブ内では MTEntries コンテナタグや MTCategories コンテナタグなどの働きが他のテンプレートと異なります。
カテゴリアーカイブテンプレートにメニュー部分を配置する場合、メニュー部分の一部がそのカテゴリ以下の記事のみを対象としてしまう可能性があるのです。
これらの可能性は回避策があるにはあるのですが、テンプレートに対するより高度な理解が必要になったり、またサーバなどの環境に左右されたりするため、それを適用してまでアーカイブテンプレートにメニュー部分を配置する必要があるのか、ということで配置していないのではと私は考えています。
回避策その 1 - PHP や SSI の include またはダイナミックパブリッシングを用いる
カテゴリアーカイブとナビゲーションリスト - カテゴリアーカイブ内でも全記事の新着記事リストを作る (2) で一度説明していますので、詳しい説明は省きます。 アーカイブテンプレートとは全く別個にメニュー部分を作り、ブラウザからリクエストがある度に呼び出すようにすれば、「メインページ」や「アーカイブページ」との同期もきちんと行うことができ、「アーカイブテンプレートにメニュー部分を配置すると、記事を追加するごとに再構築しなければならない」という問題を回避することができます。
MTInclude とダイナミックパブリッシング - MovableType Tips by Sonots によると、ダイナミックパブリッシングを用いても同様の回避策が取れるようです。
回避策その 2 - MTTopLevelCategories を用いる
これもカテゴリアーカイブとナビゲーションリスト - カテゴリアーカイブ内でも全カテゴリのリストを作る で一度説明していますので、詳しい説明は省きます。 MTTopLevelCategories を用いることで、カテゴリアーカイブ内でも他のテンプレートと同様に全てのカテゴリを扱うことができ、「カテゴリアーカイブテンプレートにメニュー部分を配置すると、そのカテゴリ以下でのカテゴリ一覧や最新の記事を抽出する」という問題を回避することができます。
なお、 PHP や SSI の include を用いてカテゴリアーカイブとは別個にメニュー部分を作る場合は、自動的にこの問題は回避されます。

