TopMovable Typeカスタマイズカテゴリー > カテゴリーアーカイブのサブカテゴリーリストに、親カテゴリーとその子カテゴリーを表示する
2008年3月20日

カテゴリーアーカイブのサブカテゴリーリストに、親カテゴリーとその子カテゴリーを表示する

Posted at March 20,2008 1:33 AM
Category:[カテゴリー]
Tag:[, , , ]

Movable Type のカテゴリーアーカイブに表示しているサブカテゴリーリストにおいて、自カテゴリーと、その親カテゴリーに属するカテゴリーを表示するカスタマイズです。

具体例を説明します。例えば、ブログのカテゴリーが、

 cat1
  ├ cat1-1
  ├ cat1-2
  └ cat1-3
 cat2
  ├ cat2-1
  ├ cat2-2
  └ cat2-3
 cat3
  ├ cat3-1
  ├ cat3-2
  └ cat3-3

となっていると仮定します。

cat1-1 のカテゴリーアーカイブを表示した時、サブカテゴリーリストには、

 cat1
  ├ cat1-1
  ├ cat1-2
  └ cat1-3

のみを表示します。また、cat2-2 のカテゴリーアーカイブを表示した時、サブカテゴリーリストには、

 cat2
  ├ cat2-1
  ├ cat2-2
  └ cat2-3

のみを表示します。

1.サブカテゴリーのアーカイブで親カテゴリーとそのサブカテゴリーを表示する

次のサブテンプレートを任意の位置に設定して、再構築してください。

<MTParentCategory>
<MTSubCategories include_current="1">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</MTParentCategory>

このサブテンプレートは、親カテゴリーでは何も表示されません。親カテゴリーは、一番外側の MTParentCategory タグの実行条件にマッチしない(親カテゴリーに親カテゴリーが存在しない)ためです。

2.親カテゴリーでも同じように表示する

親カテゴリーである cat1 のカテゴリーアーカイブを表示した時、サブカテゴリーリストに

 cat1
  ├ cat1-1
  ├ cat1-2
  └ cat1-3

とする場合は、先のサブテンプレートに下記の青色部分を追加します。

<MTParentCategory>
<MTSubCategories include_current="1">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</MTParentCategory>
<MTHasNoParentCategory>
<MTSubCategories include_current="1">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</MTHasNoParentCategory>

ちなみに上記のリストでは、MTSubCategories が2ヶ所出現し、その内容は全く同じです(赤色部分)。

<MTParentCategory>
<MTSubCategories include_current="1">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</MTParentCategory>
<MTHasNoParentCategory>
<MTSubCategories include_current="1">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</MTHasNoParentCategory>

次のように MTSetVarTemplate タグを使って丸めておけば、サブテンプレートの重複したマークアップを解消できます。

<mt:setvartemplate name="subcategorylist">
<MTSubCategories include_current="1">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</mt:setvartemplate>
 
<MTParentCategory>
<mt:getvar name="subcategorylist">
</MTParentCategory>
<MTHasNoParentCategory>
<mt:getvar name="subcategorylist">
</MTHasNoParentCategory>

3.カテゴリーアーカイブ以外でこのサブテンプレートを表示させない対処

いずれの方法も、リストの一番外側は、

<MTIf name="category_archive">
  :
</MTIf>

で括っておけば、他のアーカイブで表示されずに済みます。

Posted by yujiro
関連記事
人気エントリー
トラックバックURL


コメント

はじめまして。fukuと申します。
いつもありがとうございます。

貴著のMT~新しいルールを参考にして
MT4をカスタマイズしております。

今回のカスタマイズ内容を実現したく試行錯誤しておりました。

質問させてください。

カテゴリーにサブカテゴリーその下にサブカテゴリーとある場合。

親-子-孫 

子での表示が子と並列のカテゴリとその子にともなう
孫カテゴリが表示されてしまいます。

表示している子カテゴリにともなう孫カテゴリのみの表示はできませんでしょうか。

指南いただけましたら幸いです。


また、1のサブテンプレートをブログ記事リストに追加して再構築する際に
コンテキスト外での使用と警告がでてしまいます。
3のMTIFを利用する場合は問題ないのですが・・。


どうぞよろしくお願いいたします。

[1] Posted by fuku : March 21, 2008 7:39 PM

>fukuさん
こんばんは。
ご返事遅くなり申し訳ありません。
ひとつめの質問につきましては別途エントリーしたいと思います。
すいませんが少々お時間ください。
ふたつめの質問ですが、このサブテンプレートがそのまま使えるのは、おそらく

 ・ブログ記事
 ・カテゴリーアーカイブ
 ・日付+カテゴリーアーカイブ

です。他のアーカイブではエラーになります。
例えば、月別アーカイブではひとつのファイルに、特定の年月の複数のブログ記事が表示されますが、月別という単位のアーカイブにカテゴリーは使えないためです。
説明不足で申し訳ありません。
それではよろしくお願い致します。

[2] Posted by yujiro Author Profile Page : March 31, 2008 1:05 AM

お返事ありがとうございます。

別途エントリーいただけるとのことで
とても嬉しく思います。

どうぞよろしくおねがいいたします

[3] Posted by fuku : April 1, 2008 9:30 AM

>yujiroさん

こんにちは。

質問するのがここでよいのかわからないのですが、、

トップ、アーカイブとも共通するモジュールで
下記のようなソースでカテゴリを表示させたくて試行錯誤しております。

<dl>
<dt>親カテゴリー1</dt>
<dd>
<ul>
<li><a href="">子カテゴリー1</a></li>
<li><a href="">子カテゴリー2</a></li>
<li><a href="">子カテゴリー3</a></li>
</ul>
</dd>

<dt>親カテゴリー2</dt>
<dd>
<ul>
<li><a href="">子カテゴリー1</a></li>
<li><a href="">子カテゴリー2</a></li>
<li><a href="">子カテゴリー3</a></li>
</ul>
</dd>
</dl>

親カテゴリはdtで、その下の子カテゴリはliでマークアップしたいということです。
これが理想的なマークアップではないかと思うので、、
でも<MTSubCatsRecurse>を使う限りは無理なのでしょうか。。。

どうぞお力をお貸しください。
よろしくお願いします。

[4] Posted by コスギ : April 4, 2008 5:50 PM

>コスギさん
こんばんは。
ご返事遅くなってすいません。
素晴らしいマークアップですね。気がつきませんでした。
2階層限定であれば、下記のタグで実現可能です。

<dl>
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasNoParentCategory><MTElse><dd><ul></MTHasNoParentCategory></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<MTHasNoParentCategory>
<dt><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]</dt>
<MTElse>
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
</MTHasNoParentCategory>
<MTElse>
<MTHasNoParentCategory>
<dt><MTCategoryLabel></dt>
<MTElse>
<li><MTCategoryLabel>
</MTHasNoParentCategory>
</MTIfNonZero>
<MTSubCatsRecurse>
<MTHasNoParentCategory>
<MTElse>
</li>
</MTHasNoParentCategory>
<MTSubCatIsLast><MTHasNoParentCategory><MTElse></ul></dd></MTHasNoParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</dl>

この内容はエントリーでも紹介させて頂きます。
それではよろしくお願い致します。

[5] Posted by yujiro Author Profile Page : April 15, 2008 1:20 AM
コメントする

*必須



お知らせ:2008年5月現在、多忙のため、7月頃までコメントを速やかに回答できない状態が続きます。ご質問の内容によっては回答が7月以降になる可能性がありますので、予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Entries of this Category
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.1
 
List Me!