記事本文
パンくずリストによる階層ナビゲーションを作る
まず、これから解説することに対する前提としてちょっと解説。
俗にパンくずリストと呼ばれるナビゲーションは、多くの場合サイトのトップページから現在のページまでのディレクトリ階層をそれぞれのディレクトリ毎にリンクを張って並べるものです。 これについては諸説あるかもしれませんが、それを論じることは今回の本論ではないのでまたいずれ。
今回の本論は、そのナビゲーションを Movable Type で効率よく作成する方法です。 パンくずリストを扱うなら、本当は link 要素の方でのナビゲーションも合わせて紹介したいところですが、今回は body 要素内でのナビゲーションのみを扱います。 MT 関連の質問スレッドあてに次のような質問が寄せられました。
MovableTypeでパンくずリストを作成したいのですが、1層目のサブカテゴリまでは何とか作ることができたのですが、2層目のサブカテゴリまで作成すると、パンくずリストが「ずれて」しまいます。
私がやりたかったのは、真琴さんの仰る通りのナビゲーションなんです。 しかし、その上で、個々のカテゴリへのリンクが張れるようにしたいのです。
私の考えるソース ver.1
<p>
<a href="<$MTBlogURL$>"><$MTBlogName$></a> >
<MTParentCategories glue=">" exclude_current="1"><a href="<$MTCategoryArchiveLink$>"><MTCategoryLabel></a>
</MTParentCategories>
> <$MTArchiveTitle$>
</p>
ざっと考えてみましたが、こんな感じでどうでしょう ? このテンプレートで実際に展開される HTML は次のようになります。 なお、 http://hxxk.jp/mt/system/template/customize/ 上で展開したと仮定します。 カテゴリアーカイブ撤廃に伴い、現在はこのディレクトリは存在しません。
<p>
<a href="http://hxxk.jp/mt/">MT hxxks</a>
> <a href="http://hxxk.jp/mt/system/index.php">system</a>
> <a href="http://hxxk.jp/mt/system/template/index.php">template</a>
> customize
</p>
このソースのポイントは、 MTParentCategories コンテナタグに
exclude_current="1"
を指定している点です。
- exclude_current
「1」を設定するとリストから現在のカテゴリーを除く
こうすることにより、カレントカテゴリに対してはリンクを張らないようにできます。 カレントカテゴリにまでリンクを張りたい場合は、前述のテンプレートの強調部分を削除してください。
ただし、使い方に注意が必要
この方法だと自動でディレクトリごとのパンくずリストを作ることができますが、私はこの方法を採用していません。 当時採用しなかった理由とは、 「 / の後ろに index.php が付くのが嫌だった」 というものです。
これは少し本質と離れた理由ですが、実際には他の理由もあります。 <MTIfNonZero tag="MTCategoryCount"> の意外な落とし穴 - アーカイブ上で実際に展開される結果で述べましたが、その直下に記事を 1 件も持たないカテゴリの場合に不都合が出てきます。
記事を 1 件も持たないカテゴリの場合はカテゴリアーカイブが作成されず、パンくずリストで自動的にリンクを作ってしまうと 404 Not Found になってしまいます。 よって、 <MTIfNonZero tag="MTCategoryCount"> を活用して、存在しないディレクトリへのリンクを行わないようにすると良いでしょう。
私の考えるソース ver.2
<p>
<a href="<$MTBlogURL$>"><$MTBlogName$></a> >
<MTParentCategories glue=">" exclude_current="1">
<MTIfNonZero tag="MTCategoryCount">
<a href="<$MTCategoryArchiveLink$>"><MTCategoryLabel></a>
<MTElse>
<MTCategoryLabel>
</MTElse>
</MTIfNonZero>
</MTParentCategories>
> <$MTArchiveTitle$>
</p>
このようにすると、記事を最低 1 件持つ ( = カテゴリアーカイブが生成される ) カテゴリのみにリンクが張られ、デッドリンクが作られてしまうことを防ぐことができます。 このテンプレートで実際に展開される HTML は次のようになります。 なお、 http://hxxk.jp/mt/system/template/customize/ 上で展開したと仮定します。 カテゴリアーカイブ撤廃に伴い、現在はこのディレクトリは存在しません。
<p>
<a href="http://hxxk.jp/mt/">MT hxxks</a>
> system
> template
> customize
</p>
system カテゴリも template カテゴリも、その直下には記事を持っていないため、アーカイブが生成されません。 よって、このように対処して、アーカイブが存在しないカテゴリへのリンクは張らない方が良いということになります。

