カテゴリーアーカイブのサブカテゴリーリストに、親カテゴリーとその子カテゴリーを表示する
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>
で括っておけば、他のアーカイブで表示されずに済みます。
- Movable Type6で記事のない親カテゴリのカテゴリページを出力する方法
- Movable Typeでブログ記事が属するカテゴリアーカイブのリンクをブログ記事ページに表示する
- Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法
- Movable Typeで親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリストを表示する
- Movable Typeのカテゴリのベースネームについて
- Movable Typeで複数ブログのブログ記事を同名のカテゴリ別に振り分ける方法
- Movable TypeのMTIfCategoryタグとMTEntryIfCategoryタグの違い
- Movable Typeのカテゴリリストで階層別に背景画像を変更する
- Movable Typeのカテゴリ・フォルダで特定の最上位階層を表示しない方法
- Movable Typeのカテゴリリストにダミーの親カテゴリを表示する
- MTEntriesタグのcategoryモディファイアに「AND」を含むカテゴリを指定する
- ブログ記事ページに自分が属するカテゴリのツリーと直属カテゴリの他のブログ記事一覧を表示する
- Movable Type 5でのMTEntriesタグのcategory/catgoriesモディファイアの動作改善について
- 親カテゴリーアーカイブにサブカテゴリーのブログ記事を表示する場合に特定のサブカテゴリーのブログ記事をフィルタリングする
- 特定のカテゴリのブログ記事を表示する
はじめまして。fukuと申します。
いつもありがとうございます。
貴著のMT~新しいルールを参考にして
MT4をカスタマイズしております。
今回のカスタマイズ内容を実現したく試行錯誤しておりました。
質問させてください。
カテゴリーにサブカテゴリーその下にサブカテゴリーとある場合。
親-子-孫
子での表示が子と並列のカテゴリとその子にともなう
孫カテゴリが表示されてしまいます。
表示している子カテゴリにともなう孫カテゴリのみの表示はできませんでしょうか。
指南いただけましたら幸いです。
また、1のサブテンプレートをブログ記事リストに追加して再構築する際に
コンテキスト外での使用と警告がでてしまいます。
3のMTIFを利用する場合は問題ないのですが・・。
どうぞよろしくお願いいたします。
>fukuさん
こんばんは。
ご返事遅くなり申し訳ありません。
ひとつめの質問につきましては別途エントリーしたいと思います。
すいませんが少々お時間ください。
ふたつめの質問ですが、このサブテンプレートがそのまま使えるのは、おそらく
・ブログ記事
・カテゴリーアーカイブ
・日付+カテゴリーアーカイブ
です。他のアーカイブではエラーになります。
例えば、月別アーカイブではひとつのファイルに、特定の年月の複数のブログ記事が表示されますが、月別という単位のアーカイブにカテゴリーは使えないためです。
説明不足で申し訳ありません。
それではよろしくお願い致します。
お返事ありがとうございます。
別途エントリーいただけるとのことで
とても嬉しく思います。
どうぞよろしくおねがいいたします
>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>を使う限りは無理なのでしょうか。。。
どうぞお力をお貸しください。
よろしくお願いします。
>コスギさん
こんばんは。
ご返事遅くなってすいません。
素晴らしいマークアップですね。気がつきませんでした。
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>
この内容はエントリーでも紹介させて頂きます。
それではよろしくお願い致します。
古い記事に対しての質問で申し訳ないのですが・・・。
親カテゴリ、子カテゴリをそれぞれのカテゴリに対応した画像を表示させるには、
どの部分を変更すればよいのでしょうか?
<li><a href="<$MTCategoryArchiveLink$>" ・・・・・ の部分に追記すれば
良いのだろうと思うのですが、うまく表示されません。
各カテゴリの画像は、「 ttl_(出力ファイル/フォルダ名).jpg 」と規則性を持たせています。
>ryuiさん
こんにちは。
ご返事遅くなってすいません。
「ttl_(出力ファイル/フォルダ名).jpg」の部分が、カテゴリとどのように対応しているかもう少し具体的にお知らせください。例えば、
- カテゴリ名:A
- 画像ファイル:ttl_A.jpg
といった具合です。
それではよろしくお願い致します。