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

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

Posted at March 20,2008 1:33 AM
Tag:[Category, Customize, MovableType, MTSetVarTemplate]

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>

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

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


コメント

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

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

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

質問させてください。

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

親-子-孫 

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

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

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


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


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

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

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

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

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

[2] Posted by yujiro logo : 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 logo : April 15, 2008 1:20 AM

古い記事に対しての質問で申し訳ないのですが・・・。

親カテゴリ、子カテゴリをそれぞれのカテゴリに対応した画像を表示させるには、
どの部分を変更すればよいのでしょうか?

<li><a href="<$MTCategoryArchiveLink$>" ・・・・・ の部分に追記すれば
良いのだろうと思うのですが、うまく表示されません。

各カテゴリの画像は、「 ttl_(出力ファイル/フォルダ名).jpg 」と規則性を持たせています。

[6] Posted by ryui : March 25, 2009 4:12 PM

>ryuiさん
こんにちは。
ご返事遅くなってすいません。
「ttl_(出力ファイル/フォルダ名).jpg」の部分が、カテゴリとどのように対応しているかもう少し具体的にお知らせください。例えば、

  • カテゴリ名:A
  • 画像ファイル:ttl_A.jpg

といった具合です。
それではよろしくお願い致します。

[7] Posted by yujiro logo : April 5, 2009 3:21 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

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

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