ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)
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">
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その2)
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その1)
- ブログ記事に同一カテゴリーのブログ記事の前後リンクを表示する
- ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版・改)
- ブログ記事の入力フィールドに初期値を設定するプラグイン
- トップページの最新記事に Google Adsense を貼り付ける
- アーカイブページのリストの表示内容が異なる理由
- 概要と本文を切り替える(Movable Type 4・デフォルトテンプレート版)
- Movable Type で画像挿入時の form 要素について
- 概要と本文を切り替える(公開テンプレート版)
- カテゴリー・アーカイブのカテゴリーリストで該当カテゴリーのエントリーのみを表示する
- 概要と本文を切り替える(デフォルトテンプレート版)
- Updated Now プラグイン v2.1
- Updated Now プラグイン for WordPress
- 最新のエントリーに投稿日付を表示する for WordPress
- Movable Type で全エントリーを表示する方法
- Movable Type のエントリー削除でHTMLファイルも自動的に削除する
- Movable Type で blockquote 要素を記述する時の注意
- エントリー・アーカイブで親カテゴリーに含まれる全エントリーをサブカテゴリー別に表示
いつも見させていただいてます。
ひとつお聞きしたいのですが、
MT4でやっていますが、
トップページのサイドバーを全ページで共通化させるには
どのようにしたらよいのでしょうか?
テンプレートはデフォルトのままです。
どうかよろしくお願いいたします。
>佐藤さん
こんにちは。
ご質問の件につきましては、来週前半辺りに別途エントリー致します。
すいませんが少々お時間ください。
MTTagInvokeが機能していない事に気づき、慌てていたところです。
上記の方法をさっそく試してみたところ、別々の親カテゴリーの子カテゴリーに同名のMTEntryCategoryで表示されるカテゴリー名があるために、実際は別のカテゴリーにあるブログ記事も合わせて表示してしまい、困っています。
今更カテゴリー名を変更する事もできず、MTCategoryDescriptionも別に利用してしまっているため、思いつく方法がありません。
MTCategoryIDで選別できればいいんですが…
なにかいい方法はありませんでしょうか?
>footbrainさん
こんばんは。
ご要望の件、承りました。
ちなみにMTTagInvokeでもこのリストは出せませんね。
まず、MTCategoryIDを取得するプラグイン作ってから、リストを公開します。
それではよろしくお願い致します。
>footbrainさん
こんばんは。
ご連絡が遅くなりましたが、「ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版・改)」で公開しています。
それではよろしくお願い致します。

