記事本文
カテゴリアーカイブをいじっていて気が付いた
サブカテゴリ機能を使おうとする場合、カテゴリアーカイブは同一のディレクトリレベルではなく、親子関係を持った階層ができます。 それは過去に何度か取り上げた通りですが、今回はアーカイブ内において、親カテゴリまたはサブカテゴリに対するナビゲーションをどうするか、という点についてメモしたいと思います。
ナビゲーションに使えそうなテンプレートタグ
カテゴリー関連のタグを目的に応じてナビゲーション用として使えそうです。 総当りで試した方が良いのでしょうが、今回は私が使えそうだと思ったもののみ試してみました。 テンプレートタグの解説は、タグごとにマニュアルへのリンクを張っておきますので参照してください。
テスト環境
test01 というトップレベルカテゴリを作り、そのサブカテゴリに test02 、更にそのサブカテゴリに test03 というカテゴリを作成しました。 実際の URI としては、以下のようになります。 ( テストで作成したので、実際にアクセスしても 404 Not Found になります。 )
- http://hxxk.jp/mt/test01/
- http://hxxk.jp/mt/test01/test02/
- http://hxxk.jp/mt/test01/test02/test03/
- http://hxxk.jp/mt/test01/test02/
そして、カテゴリアーカイブに以下のような記述をして、各カテゴリ内でどのように反映されるかを試してみました。
<dl>
<dt>このカテゴリの位置は、 <MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories> です</dt>
<dd>このカテゴリの位置は、 <MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories> です</dd>
<dt><MTTopLevelParent>このカテゴリのトップレベルカテゴリは <MTCategoryLabel> です</MTTopLevelParent></dt>
<dd><MTTopLevelParent>このカテゴリのトップレベルカテゴリは <MTCategoryLabel> です</MTTopLevelParent></dd>
<dt><MTParentCategory>このカテゴリの親カテゴリは <MTCategoryLabel> です</MTParentCategory></dt>
<dd><MTParentCategory>このカテゴリの親カテゴリは <MTCategoryLabel> です</MTParentCategory></dd>
<dt><MTHasSubCategories>このカテゴリ以下にはまだサブカテゴリがあります</MTHasSubCategories></dt>
<dd><MTHasSubCategories>このカテゴリ以下にはまだサブカテゴリがあります</MTHasSubCategories></dd>
<dt><MTHasParentCategory>このカテゴリには親カテゴリ <MTParentCategory><MTCategoryLabel></MTParentCategory> が存在します</MTHasParentCategory></dt>
<dd><MTHasParentCategory>このカテゴリには親カテゴリ <MTParentCategory><MTCategoryLabel></MTParentCategory> が存在します</MTHasParentCategory></dd>
<dt><MTHasNoSubCategories>このカテゴリ以下にサブカテゴリはありません</MTHasNoSubCategories></dt>
<dd><MTHasNoSubCategories>このカテゴリ以下にサブカテゴリはありません</MTHasNoSubCategories></dd>
<dt><MTHasNoParentCategory>このカテゴリはトップレベルカテゴリです</MTHasNoParentCategory></dt>
<dd><MTHasNoParentCategory>このカテゴリはトップレベルカテゴリです</MTHasNoParentCategory></dd>
</dl>
dt 要素にテンプレートのソースコードを書いて、 dd 要素には実際にテンプレートタグを書いています。 カテゴリの階層に応じて、これが展開されます。
test01 カテゴリ
- このカテゴリの位置は、 <MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories> です
- このカテゴリの位置は、 test01 です
- <MTTopLevelParent>このカテゴリのトップレベルカテゴリは <MTCategoryLabel> です</MTTopLevelParent>
- ( 空白 )
- <MTParentCategory>このカテゴリの親カテゴリは <MTCategoryLabel> です</MTParentCategory>
- ( 空白 )
- <MTHasSubCategories>このカテゴリ以下にはまだサブカテゴリがあります</MTHasSubCategories>
- このカテゴリ以下にはまだサブカテゴリがあります
- <MTHasParentCategory>このカテゴリには親カテゴリ <MTParentCategory><MTCategoryLabel></MTParentCategory> が存在します</MTHasParentCategory>
- ( 空白 )
- <MTHasNoSubCategories>このカテゴリ以下にサブカテゴリはありません</MTHasNoSubCategories>
- ( 空白 )
- <MTHasNoParentCategory>このカテゴリはトップレベルカテゴリです</MTHasNoParentCategory>
- このカテゴリはトップレベルカテゴリです
test01 カテゴリはトップレベルカテゴリであるために、その条件にそぐわない部分 ( ( 空白 ) と書いてある部分 ) はナビゲーションが出現しません。
test02 カテゴリ
- このカテゴリの位置は、 <MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories> です
- このカテゴリの位置は、 test01/test02 です
- <MTTopLevelParent>このカテゴリのトップレベルカテゴリは <MTCategoryLabel> です</MTTopLevelParent>
- このカテゴリのトップレベルカテゴリは test01 です
- <MTParentCategory>このカテゴリの親カテゴリは <MTCategoryLabel> です</MTParentCategory>
- このカテゴリの親カテゴリは test01 です
- <MTHasSubCategories>このカテゴリ以下にはまだサブカテゴリがあります</MTHasSubCategories>
- このカテゴリ以下にはまだサブカテゴリがあります
- <MTHasParentCategory>このカテゴリには親カテゴリ <MTParentCategory><MTCategoryLabel></MTParentCategory> が存在します</MTHasParentCategory>
- このカテゴリには親カテゴリ test01 が存在します
- <MTHasNoSubCategories>このカテゴリ以下にサブカテゴリはありません</MTHasNoSubCategories>
- ( 空白 )
- <MTHasNoParentCategory>このカテゴリはトップレベルカテゴリです</MTHasNoParentCategory>
- ( 空白 )
test02 カテゴリは親カテゴリを持ち、なおかつサブカテゴリも持っているため、最後の 2 つだけはナビゲーションが出現しません。
test03 カテゴリ
- このカテゴリの位置は、 <MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories> です
- このカテゴリの位置は、 test01/test02/test03 です
- <MTTopLevelParent>このカテゴリのトップレベルカテゴリは <MTCategoryLabel> です</MTTopLevelParent>
- このカテゴリのトップレベルカテゴリは test01 です
- <MTParentCategory>このカテゴリの親カテゴリは <MTCategoryLabel> です</MTParentCategory>
- このカテゴリの親カテゴリは test02 です
- <MTHasSubCategories>このカテゴリ以下にはまだサブカテゴリがあります</MTHasSubCategories>
- ( 空白 )
- <MTHasParentCategory>このカテゴリには親カテゴリ <MTParentCategory><MTCategoryLabel></MTParentCategory> が存在します</MTHasParentCategory>
- このカテゴリには親カテゴリ test02 が存在します
- <MTHasNoSubCategories>このカテゴリ以下にサブカテゴリはありません</MTHasNoSubCategories>
- このカテゴリ以下にサブカテゴリはありません
- <MTHasNoParentCategory>このカテゴリはトップレベルカテゴリです</MTHasNoParentCategory>
- ( 空白 )
test03 カテゴリは親カテゴリを持ち、かつサブカテゴリは持っていないために、その条件にそぐわない部分 ( ( 空白 ) と書いてある部分 ) はナビゲーションが出現しません。
まとめ
まあ、まとめと言うほどのことでもないんですけど、マニュアルにテンプレートタグの実用例がなかったので、テスト結果をメモしておかないとテンプレートをカスタマイズできないのでこうして残しておく次第です。 この場合はナビゲーションを目的として書いていますけど、それ以外の用途にも使えると思います。

