サブカテゴリ系テンプレートタグのメモ

http://hxxk.jp/2004/11/21/0149

記事データ

投稿者

望月真琴

投稿日時

2004-11-21T01:49+09:00

タグ
概要

マニュアルにテンプレートタグの実例が無いので、自分で作ってメモすることにしました。

リプライ

7 件のリプライがあります。

記事本文

カテゴリアーカイブをいじっていて気が付いた

サブカテゴリ機能を使おうとする場合、カテゴリアーカイブは同一のディレクトリレベルではなく、親子関係を持った階層ができます。 それは過去に何度か取り上げた通りですが、今回はアーカイブ内において、親カテゴリまたはサブカテゴリに対するナビゲーションをどうするか、という点についてメモしたいと思います。

  1. ナビゲーションに使えそうなテンプレートタグ
  2. テスト環境
  3. test01 カテゴリ
  4. test02 カテゴリ
  5. test03 カテゴリ
  6. まとめ

ナビゲーションに使えそうなテンプレートタグ

カテゴリー関連のタグを目的に応じてナビゲーション用として使えそうです。 総当りで試した方が良いのでしょうが、今回は私が使えそうだと思ったもののみ試してみました。 テンプレートタグの解説は、タグごとにマニュアルへのリンクを張っておきますので参照してください。

テスト環境

test01 というトップレベルカテゴリを作り、そのサブカテゴリに test02 、更にそのサブカテゴリに test03 というカテゴリを作成しました。 実際の URI としては、以下のようになります。 ( テストで作成したので、実際にアクセスしても 404 Not Found になります。 )

そして、カテゴリアーカイブに以下のような記述をして、各カテゴリ内でどのように反映されるかを試してみました。

<dl>

  <dt>このカテゴリの位置は、 &#60;MTParentCategories glue=&#34;/&#34;&#62;&#60;MTCategoryLabel dirify=&#34;1&#34;&#62;&#60;/MTParentCategories&#62; です</dt>
  <dd>このカテゴリの位置は、 <MTParentCategories glue="/"><MTCategoryLabel dirify="1"></MTParentCategories> です</dd>
  
  <dt>&#60;MTTopLevelParent&#62;このカテゴリのトップレベルカテゴリは &#60;MTCategoryLabel&#62; です&#60;/MTTopLevelParent&#62;</dt>
  <dd><MTTopLevelParent>このカテゴリのトップレベルカテゴリは <MTCategoryLabel> です</MTTopLevelParent></dd>
  
  <dt>&#60;MTParentCategory&#62;このカテゴリの親カテゴリは &#60;MTCategoryLabel&#62; です&#60;/MTParentCategory&#62;</dt>
  <dd><MTParentCategory>このカテゴリの親カテゴリは <MTCategoryLabel> です</MTParentCategory></dd>
  
  <dt>&#60;MTHasSubCategories&#62;このカテゴリ以下にはまだサブカテゴリがあります&#60;/MTHasSubCategories&#62;</dt>
  <dd><MTHasSubCategories>このカテゴリ以下にはまだサブカテゴリがあります</MTHasSubCategories></dd>
  
  <dt>&#60;MTHasParentCategory&#62;このカテゴリには親カテゴリ &#60;MTParentCategory&#62;&#60;MTCategoryLabel&#62;&#60;/MTParentCategory&#62; が存在します&#60;/MTHasParentCategory&#62;</dt>
  <dd><MTHasParentCategory>このカテゴリには親カテゴリ <MTParentCategory><MTCategoryLabel></MTParentCategory> が存在します</MTHasParentCategory></dd>
  
  <dt>&#60;MTHasNoSubCategories&#62;このカテゴリ以下にサブカテゴリはありません&#60;/MTHasNoSubCategories&#62;</dt>
  <dd><MTHasNoSubCategories>このカテゴリ以下にサブカテゴリはありません</MTHasNoSubCategories></dd>
  
  <dt>&#60;MTHasNoParentCategory&#62;このカテゴリはトップレベルカテゴリです&#60;/MTHasNoParentCategory&#62;</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 カテゴリは親カテゴリを持ち、かつサブカテゴリは持っていないために、その条件にそぐわない部分 ( ( 空白 ) と書いてある部分 ) はナビゲーションが出現しません。

まとめ

まあ、まとめと言うほどのことでもないんですけど、マニュアルにテンプレートタグの実用例がなかったので、テスト結果をメモしておかないとテンプレートをカスタマイズできないのでこうして残しておく次第です。 この場合はナビゲーションを目的として書いていますけど、それ以外の用途にも使えると思います。

リプライ

7 件のリプライが送られています。

2005-03-13T01:06+09:00 - ruere

初めまして。ruereと申します。上記のテストについて、質問があります。 カテゴリ名に全角文字が含まれていると、その部分が表示されないのです。 例えば「01カテゴリ」というカテゴリの場合、表示されるのは「01」の部分だけになってしまいます。 これは何が原因なのでしょうか? 3.15xのバクでしょうか^^; 環境を書きます。 Movable Type 3.151-ja データベース MySQL 文字コード UTF-8 サーバー sakura よろしくお願いしますm(_ _)m

2005-03-13T18:29+09:00 - 真琴

あ。 ( 何かに気付いたフリ ) この例だと dirify="1" を使う必要はないですね……。 dirify というのは <a href="http://movabletype.jp/manual/mtmanual_tags.html#item_dirify">http://movabletype.jp/manual/mtmanual_tags.html#item_dirify</a> で示されているような属性で、主に URI などの全角文字が入っては困る部分に使います。よって、カテゴリ名を示す場合には使わなくてよかったのです。 本文を修正しておきます。気付かせて下さってありがとうございました。

2005-03-13T19:32+09:00 - No beer, No Name!

お返事ありがとうございますm(_ _)m dirify="1" を外したらバッチリできました。 ほんとに助かりました。ありがとございましたm(_ _)m

2005-12-07T23:01+09:00 - 親カテゴリとサブカテゴリ < CoCoBlog

まだ研究内容という成果は出せてはない。 今日は、「カテゴリアーカイブ」をちょっと...

2005-12-07T23:08+09:00 - 親カテゴリとサブカテゴリ < CoCoBlog

まだ研究内容という成果は出せてはない。 今日は、「カテゴリアーカイブ」をちょっと...

2006-05-08T22:14+09:00 - タケシ

参考にさせていただいてます。 モジュールから読み込もうと 以下の内容でモジュール作成し&lt;MTParentCategories glue="&gt;"&gt; &lt;a href="&gt;MTSubCategoryPath&gt;"&lt;&gt;MTCategoryLabel dirify="1"&gt;&lt;&gt;&lt;/a&gt; &lt;/MTParentCategories&gt; 再構築しようとすると、&lt;MTCategories&gt;コンテナ内で使用してください。とエラーになり再構築できないのですが 解決策がありましたら、ご教授願います。

2006-05-10T00:52+09:00 - 真琴

MTParentCategories コンテナタグで括れば、 MTCategories コンテナタグ内で使えるテンプレートタグは使えるはず…… ( カテゴリ自体を最近は使っていないので自信がありませんが。 ) モジュールに記述したテンプレートタグの該当部分を、カテゴリアーカイブに書いてみてください。もしそれでも同じエラーが出るようであれば、テンプレートタグの入れ子の関係がおかしくなっている可能性があるかもしれません。

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など