TopMovable Typeカスタマイズエントリー > ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)
News
各種ブログテンプレート
2007年11月27日

エントリー本文

ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)

Posted at November 27,2007 1:10 AM
Category:[エントリー, カテゴリー]
Tag:[, , , ]

Movable Type 4 で、ブログ記事アーカイブ(エントリーアーカイブ)に同一カテゴリーのブログ記事リスト(エントリーリスト)を表示するためのカスタマイズです。
質問を頂きましたので本エントリーにて解説致します。

Movable Type 3 までは、MTTagInvoke を使ったカスタマイズ「個別エントリーアーカイブに同一カテゴリーのエントリーを表示」が可能でしたが、Movable Type 4 ではこのプラグインが利用できなくなっています。

MT3 と同等のカスタマイズを行うには MTEntryCategoryEntries というプラグインがお勧めですが、ここでは、MTIf タグを使った方法を、順を追ってカスタマイズする形で紹介したいと思います。

読むのが面倒な方は、2項~4項のいずれかのサンプルを、そのままサイドバーに貼り付けてお使いください。

1.基本設定

ブログ記事に同一カテゴリーのブログ記事リストを表示する場合の基本形です。

<MTSetVarBlock name="entrycategory"><$MTEntryCategory$></MTSetVarBlock>
 
<dt class="sidetitle">
Entries of this Category
</dt>
 
<dd class="side">
  <ul>
  <MTEntries category="$entrycategory">
    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
  </MTEntries>
  </ul>
</dd>

1行目にある、

<MTSetVarBlock name="entrycategory"><$MTEntryCategory$></MTSetVarBlock>

で、<$MTEntryCategory$> の評価内容を取得し、entrycategory という MT の変数に設定します。
そして、

<MTEntries category="$entrycategory">

で、先に設定した変数 entrycategory の値を用いてブログ記事リストを特定のカテゴリーでフィルタリングしています。MTGetVar の name 属性で変数を使用する場合は $ を付与しませんが(下)、

<MTGetVar name="entrycategory">

MTEntries タグの category 属性に用いる場合は、$ を付与して、MT の変数であることを明示します。

2.特定のアーカイブのみで表示させる

1項の状態では、サイドバーをインクルードする全てのページで表示されてしまうため、ブログ記事アーカイブのみにも適用されてしまいます。

このリストをブログ記事アーカイブだけに表示させるには、リスト全体 MTIf タグで括ります。

<MTIf name="entry_template">
<MTSetVarBlock name="entrycategory"><$MTEntryCategory$></MTSetVarBlock>
 
<dt class="sidetitle">
Entries of this Category
</dt>
 
<dd class="side">
  <ul>
  <MTEntries category="$entrycategory">
    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
  </MTEntries>
  </ul>
</dd>
</MTIf>

1行目の MTIf タグの name 属性には、ブログ記事のみで有効になる "entry_template" という値を設定します。

<MTIf name="entry_template">

これでブログ記事アーカイブ以外では、このリストは表示されなくなります。

アーカイブで使える変数値については、「予約変数一覧 for Movable Type 4(その1)」にまとめてありますので、参考になれば幸いです。

3.現在のブログ記事タイトルをリストから除外する

2項までの設定では、現在表示されているブログ記事のタイトルも表示されてしまうので、次にこれを非表示にする制御を行います。

非表示にするには、現在表示されているブログ記事ページのID番号と、リスティングされているブログ記事のID番号を比較・判定する処理(青色部分)を追加します。

<MTIf name="entry_template">
<MTSetVarBlock name="entryid"><$MTEntryID$></MTSetVarBlock>
<MTSetVarBlock name="entrycategory"><$MTEntryCategory$></MTSetVarBlock>
 
<dt class="sidetitle">
Entries of this Category
</dt>
 
<dd class="side">
  <ul>
  <MTEntries category="$entrycategory">
  <MTSetVarBlock name="currententryid"><$MTEntryID$></MTSetVarBlock>
  <MTIf name="currententryid" ne="$entryid">
    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
  </MTIf>
  </MTEntries>
  </ul>
</dd>
</MTIf>

現在表示されているブログ記事ページのID番号は、2行目の

<MTSetVarBlock name="entryid"><$MTEntryID$></MTSetVarBlock>

で取得し、リスティングされているブログ記事ページのID番号は、MTEntries タグブロック内の

<MTSetVarBlock name="currententryid"><$MTEntryID$></MTSetVarBlock>

で取得しています。これで、

entryid:現在表示されているブログ記事ページのID番号
currententryid:リスティングされているブログ記事ページのID番号

となり、あとはこれを MTIf タグで判定します。

<MTIf name="currententryid" ne="$entryid">

ne 属性で判定しているので、判定結果が「真」、つまりお互いのブログ記事IDが等しくなければ、MTIf ブロック内の行を実行します。

4.リストが1件の場合はリストを非表示にする

前項の設定を行った場合、あるカテゴリーに属するブログ記事が1件の場合、リストに何も表示されなくなってしまいます。
これを回避するため、カテゴリーに属するブログ記事が1件の場合は、リスト全体を非表示にする制御を行います。

<MTIf name="entry_template">
<MTSetVarBlock name="entryid"><$MTEntryID$></MTSetVarBlock>
<MTSetVarBlock name="entrycategory"><$MTEntryCategory$></MTSetVarBlock>
 
<MTEntries category="$entrycategory">
  <MTSetVarBlock name="entrycount"><$MTGetVar name="__counter__"$></MTSetVarBlock>
</MTEntries>
 
<MTUnless name="entrycount" eq="1">
<dt class="sidetitle">
Entries of this Category
</dt>
 
<dd class="side">
  <ul>
  <MTEntries category="$entrycategory">
  <MTSetVarBlock name="currententryid"><$MTEntryID$></MTSetVarBlock>
  <MTIf name="currententryid" ne="$entryid">
    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
  </MTIf>
  </MTEntries>
  </ul>
</dd>
</MTUnless>
</MTIf>

該当カテゴリーのブログ記事数のカウントには、MTEntries タグ内で __counter__ を利用することで取得しています。
ところが、__counter__ という変数は、

<$MTGetVar name="entrycount" value="__counter__"$>

では正常に値を取得できない(変数値がそのまま変数名に設定されてしまう)ので、MTSetVarBlock と MTGetVar を組み合わせて、

<MTSetVarBlock name="entrycount"><$MTGetVar name="__counter__"$></MTSetVarBlock>

としています。

そして、MTUnless タグを用いて、カウント値が "1" でない場合にブロック内を実行するように制御します。

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


トラックバック

記事を小さく from 揚羽蝶のめも
少し居眠りをしておりましたぁ~。(笑)やる気満々でNostaleにINしようかと思ったらメンテナンスだったでし。しょうがないのでまたBLOGをいじっており... [続きを読む]

Tracked on November 29, 2007 10:19 AM

from CoffeeTime
以前こちらで書いていたMT5にアップしたときに出るエラー。 その原因が分かった。 小粋空間: ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版... [続きを読む]

Tracked on December 7, 2009 6:31 PM
コメント

いつも見させていただいてます。
ひとつお聞きしたいのですが、
MT4でやっていますが、
トップページのサイドバーを全ページで共通化させるには
どのようにしたらよいのでしょうか?
テンプレートはデフォルトのままです。

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

[1] Posted by 佐藤 : November 27, 2007 10:59 PM

>佐藤さん
こんにちは。
ご質問の件につきましては、来週前半辺りに別途エントリー致します。
すいませんが少々お時間ください。

[2] Posted by yujiro : November 29, 2007 10:22 AM

MTTagInvokeが機能していない事に気づき、慌てていたところです。

上記の方法をさっそく試してみたところ、別々の親カテゴリーの子カテゴリーに同名のMTEntryCategoryで表示されるカテゴリー名があるために、実際は別のカテゴリーにあるブログ記事も合わせて表示してしまい、困っています。

今更カテゴリー名を変更する事もできず、MTCategoryDescriptionも別に利用してしまっているため、思いつく方法がありません。

MTCategoryIDで選別できればいいんですが…

なにかいい方法はありませんでしょうか?

[3] Posted by footbrain : February 21, 2008 1:39 PM

>footbrainさん
こんばんは。
ご要望の件、承りました。
ちなみにMTTagInvokeでもこのリストは出せませんね。
まず、MTCategoryIDを取得するプラグイン作ってから、リストを公開します。
それではよろしくお願い致します。

[4] Posted by yujiro : February 24, 2008 12:54 AM

>yujiroさん

ありがとうございます。
リストの公開を楽しみにしています。

[5] Posted by footbrain : February 24, 2008 11:59 AM

>footbrainさん
こんばんは。
ご連絡が遅くなりましたが、「ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版・改)」で公開しています。
それではよろしくお願い致します。

[6] Posted by yujiro : February 27, 2008 12:03 AM

なぜか、これでタグを貼り付けても、
パーミッションエラーで再構築ができなくて困っております。

サーバの問題なのでしょうか?

助けていただけるとうれしいです。

[7] Posted by mizukagami : July 4, 2008 4:25 PM

>mizukagamiさん
こんにちは。
ご返事遅くなり申し訳ありません。
ご質問の件ですが、パーミッションエラーとは具体的にどのような事象になってますでしょうか。
また、タグをはずせばエラーは発生しないでしょうか?
詳細をご連絡頂ければ幸いです。
それではよろしくお願い致します。

[8] Posted by yujiro : July 14, 2008 12:56 PM
コメントする
greeting

*必須



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

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

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

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

Now loading...
Introduction
Entry Trackbacks
記事を小さく
 [揚羽蝶のめも] 11/29 10:19
MT5エラー解決&アップ完了
 [CoffeeTime] 12/07 18:31
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 5.02