TopMovable Typeカスタマイズカテゴリー > エントリーのない親カテゴリーに子カテゴリーを表示する
News
各種ブログテンプレート
2006年11月10日

エントリー本文

エントリーのない親カテゴリーに子カテゴリーを表示する

Posted at November 10,2006 12:50 AM
Category:[カテゴリー]
Tag:[, , , , ]

Movable Type 3.3 でエントリーのない親カテゴリーをアーカイブとして生成し、そこに子カテゴリーを表示するためのカスタマイズです。

Movable Type のカテゴリーアーカイブでは、自カテゴリーでエントリーがひとつも公開されていない場合、そのカテゴリーに子カテゴリーがある場合でも、自カテゴリーのアーカイブを生成することができません。言い換えると、エントリーのない親カテゴリーでの MTEntriesWithSubCategories タグは有効にならない、ということです。

本エントリーでは、下記の方法で親カテゴリーに子カテゴリーを表示する解決案を示してみたいと思います。

  • 親カテゴリーにダミーのエントリーを作る
  • メインページ、各アーカイブページで親カテゴリーのエントリーを表示しない設定をする
  • サイドバーのエントリーリストがある場合も親カテゴリーのエントリーを表示しない設定をする

ただし、エントリーアーカイブの前後のエントリーへのリンクについては親カテゴリーが表示されてしまいますので、ここではそのリンクがないページ構造であることを前提にします。
また実験では親-子カテゴリーまでの動作しか確認しておりません(子カテゴリーに対しさらに子カテゴリーがある場合の動作は未確認です)ので、予めご了承ください。

1.MTEntries タグの変更(カテゴリーアーカイブ)

カテゴリーアーカイブの MTEntries タグ(リスト1.1)をリスト1.2 のタグに変更します。

<MTEntries>
   :
[通常のMTタグ]
   :
</MTEntries>
リスト1.1 カテゴリーアーカイブ(変更前)
<MTEntriesWithSubCategories>
<MTIfCategory name="[除外したいカテゴリー]">
<MTElse>
   :
[通常のMTタグ]
   :
</MTElse>
</MTIfCategory>
</MTEntriesWithSubCategories>
リスト1.2 カテゴリーアーカイブ(変更後)

変更後の設定は、MTEntriesWithSubCategories タグでサブカテゴリーのエントリーも表示し、MTIfCategory タグで name 属性に記述されたカテゴリー、つまり親カテゴリーであれば何もしない(その他のカテゴリーであれば通常通り表示)という意味です。

たとえば、foo という親カテゴリーを除外したい場合は MTIfCategory タグの name 属性を

<MTIfCategory name="foo">
リスト1.3 name 属性設定例

とします。カテゴリー名は日本語でも大丈夫です。

除外したいカテゴリーが複数存在する場合、たとえば "foo" と "bar" という二つのカテゴリーを除外したい場合は、MTIfCategory タグを追加(リスト1.4の青色部分)して、

<MTEntriesWithSubCategories>
<MTIfCategory name="foo">
<MTElse>
<MTIfCategory name="bar">
<MTElse>
   :
[通常のMTタグ]
   :
</MTElse>
</MTIfCategory>
</MTElse>
</MTIfCategory>
</MTEntriesWithSubCategories>
リスト1.4 複数のカテゴリーを除外する方法

としてください。

2.MTEntries タグの変更(メインページ・日付アーカイブ・サイドバーの「最近のエントリー」等)

メインページ(アーカイブページも利用していれば含む)・日付アーカイブ・サイドバー等の MTEntries タグをリスト3.1 からリスト3.2 の内容に変更します。

<MTEntries>
   :
[通常のMTタグ]
   :
</MTEntries>
リスト3.1 メインページ・日付アーカイブ・サイドバー(変更前)
<MTEntries category_name="NOT [除外したいカテゴリー]">
   :
[通常のMTタグ]
   :
</MTEntries>
リスト3.2 メインページ・日付アーカイブ・サイドバー(変更後)

たとえば、foo という親カテゴリーを除外したい場合は MTEntries タグの category_name 属性を

<MTEntries category="NOT foo">
リスト3.3 category 属性設定例1

とします。カテゴリー名は日本語でも大丈夫です。

除外したいカテゴリーが複数存在する場合、たとえば "foo" と "bar" という二つのカテゴリーを除外したい場合は OR で区切り、さらにカッコで括って、

<MTEntries category="NOT (foo OR bar)">
リスト3.4 category 属性設定例2

としてください。

3.親カテゴリーにダミーエントリーをひとつ作る

カスタマイズは3項までで完了です。あとは子カテゴリーを表示したい親カテゴリーにエントリーをひとつ作成して「公開」で保存してください。

これで子カテゴリーのエントリーを書いて再構築を実行し、各ページでの表示を確認してください。

2006.11.10 追記
Ogawa::memoranda さんのアドバイスを受けて、カスタマイズ内容を修正しました(パッチの削除&MTIfCategory タグの記述変更)。

Posted by yujiro ReTweet This!
関連記事
この記事を読んだ人はこんな記事も読んでいます
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


トラックバック

MTカスタマイズ:個別エントリーに関連記事を表示するプラグインMTTagInvoke from Dog*Walkキャバグロでゴー!
今まで「MTEntriesWithSubCategories」タグを使って、 &... [続きを読む]

Tracked on May 30, 2007 11:38 AM
コメント

yujiro さん、こんにちは!
今回のカスタマイズたのしみに待っておりました。
おかげさまで大変参考になりました。
いつもありがとうございます。

[1] Posted by taka : November 10, 2006 8:25 AM

ContentHandlers.pmに当てているパッチ部分がよくないです。@namesに対して毎回同じ比較を行っています。書くのなら以下のようになりますね。

for (@names) {
  return 1 if $cat->label eq $_;
}

また、以下のようにテンプレートを書けばこの改造は必要ないようにも思います。

<MTIfCategory name="[除外したいカテゴリー1]">
<MTElse>
<MTIfCategory name="[除外したいカテゴリー2]">
<MTElse>
   :
[通常のMTタグ]
   :
</MTElse>
</MTElse>
</MTIfCategory>

[2] Posted by (o) : November 10, 2006 1:53 PM

>takaさん
こんばんは。
ご連絡ありがとうございます。
記事公開が遅くなってすいませんでした。

>(o)さん
こんばんは。
アドバイスありがとうございました。
MTIFCategory が複数利用できるとは思いつきませんでした。

とり急ぎ、記事の方のみ先に修正させて頂きました。
遅くなりましたがこの場をお借りしてお礼申し上げます。

[3] Posted by yujiro : November 11, 2006 2:24 AM

はじめまして。
いつも色々と参考にさせていただいてます。
ひとつ質問なんですが
カテゴリーアーカイブで親カテゴリー内に子カテゴリーのエントリーは表示出来たんですが、今度はそのエントリーごとのカテゴリー名を付けたいんですがすべて親カテゴリー名になってしまうんですが子カテゴリー名など区別して表示するにはどうすればいいでしょうか。
よろしくお願いします。

[4] Posted by yama : November 20, 2006 10:22 AM

>yamaさん
こんにちは。
ご返事遅くなってすいません。
ご質問の件ですが、下記の MTEntryCategory タグではいかがでしょうか?

<a href="<$MTEntryLink archive_type="Category"$>"><$MTEntryCategory$></a>

リンクは省略しても構いません。
それではよろしくお願い致します。

[5] Posted by yujiro : November 22, 2006 12:18 PM

ありがとうございました。
ちゃんと子カテゴリー名など区別して表示されました。
MTEntryCategoryでよかったなんて気付きませんでした。

欲を言ってもう一つ質問させてください。カテゴリーの説明の部分を区別して表示する方法ってありますか?
<$MTCategoryDescription$>
では親カテゴリーのものが表示されるだけで子カテゴリーのも区別して表示する方法があったら教えていただきたいのですが。
よろしくお願いします。

[6] Posted by yama : November 24, 2006 5:43 AM

>yamaさん
こんにちは。
ご質問の件ですが、「[4]のコメントの質問と同じ場所に表示したい」ということであれば、今のところいいアイデアが思いつきません。
MTSubCategories で括られている、例えばサブカテゴリーリストで用いるのであれば表示は可能です。
それではよろしくお願い致します。

[7] Posted by yujiro : November 24, 2006 5:13 PM

yujiroさんありがとうございます。
[4]のコメントと同じ場所に表示したかったんですがとりあえずカテゴリー名が表示出来たんで良かったです。
本当にありがとうございました。

[8] Posted by yama : November 24, 2006 11:47 PM

>yamaさん
ご連絡ありがとうございました。
また何かございましたらご連絡ください。
ではでは!

[9] Posted by yujiro : November 26, 2006 9:41 PM
コメントする
greeting

*必須



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

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

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

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

Now loading...
Introduction
Entry Trackbacks
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
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 ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.261