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

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

Posted at February 25,2008 2:22 AM
Tag:[Category, Customize, Entry, MovableType]

ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)」や、これまでの似たようなカスタマイズでは、次の問題あることが判明しました。

1.問題点

異なる親カテゴリーに同名のサブカテゴリーがある場合、対応できない。

具体的には、次のようなカテゴリー構成を想定します。

 cat-A
  ├ cat-1
  └ cat-2
 cat-B
  ├ cat-1
  └ cat-2

この構成で「ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)」を行うと、cat-A/cat-1 に属するブログ記事と、cat-B/cat-1 に属するブログ記事は「同一カテゴリーのブログ記事リスト」とみなされてしまいます。

2010.10.31追記:MT5では、MTEntriesタグにcategoryモディファイアを与え、モディファイアの値に親カテゴリーから子カテゴリまでを階層的に指定することで、この問題は解消されます。

2.原因

「同一カテゴリーのブログ記事リスト」のキー情報として、MTEntryCategory という、ブログ記事に属するメインカテゴリー名のみ使っており、カテゴリーの親カテゴリーまで含めた情報やID番号でサーチしていないためです。

こうなった経緯は、そもそも、Movable Type 3 の途中まで「サブカテゴリー」という概念が存在しませんでした。つまり、親カテゴリーしか作れなかったため、同名のカテゴリーの存在が許されず、これまでのサブテンプレートを使えば「同一カテゴリーのブログ記事リスト」を実現できた、という訳です。

3.対処

3.1 EntryCategoryID プラグインを使う

EntryCategoryID プラグイン」を使い、ブログ記事のメインカテゴリーのID番号と、ブログ記事リストのカテゴリーIDを比較し、同一カテゴリーID のブログ記事のみリスティングします。

<mt:setvarblock name="entrycategoryid"><$MTEntryCategoryID$></mt:setvarblock>
<dt class="sidetitle">
Entries of this Category
</dt>
<dd class="side">
  <ul>
  <MTCategories>
  <mt:setvarblock name="currentcategoryid"><$MTEntryCategoryID$></mt:setvarblock>
  <mt:if name="currentcategoryid" eq="$entrycategoryid">
    <MTEntries>
      <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
    </MTEntries>
  </mt:if>
  </MTCategories>
  </ul>
</dd>

3.2 MTParentCategories タグを使う(その1)

これは後から気がついたのですが、MTParentCategories タグを使い、ブログ記事のメインカテゴリーの親カテゴリーを取得すれば、3.1項と同じことができます。

<MTParentCategories glue="/" setvar="entrycategories"><$MTCategoryLabel$></MTParentCategories>
<dt class="sidetitle">
Entries of this Category
</dt>
<dd class="side">
  <ul>
  <MTCategories>
  <MTParentCategories glue="/" setvar="currententrycategories"><$MTCategoryLabel$></MTParentCategories>
  <mt:if name="currententrycategories" eq="$entrycategories">
    <MTEntries>
      <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
    </MTEntries>
  </mt:if>
  </MTCategories>
  </ul>
</dd>

MTParentCategories のカテゴリーのセパレータには "/"、また MTSetvarBlock タグの代わりに setvar モディファイアを利用しています。

3.3 MTParentCategories タグを使う(その2)

こちらは、MTEntries タグに category モディファイアを与えて、とりあえず自カテゴリーで絞り込んでから親カテゴリーと比較します。

<mt:setvarblock name="entrycategory"><$MTEntryCategory$></mt:setvarblock>
<MTParentCategories glue="/" setvar="entrycategories"><$MTCategoryLabel$></MTParentCategories>
<dt class="sidetitle">
Entries of this Category
</dt>
<dd class="side">
  <ul>
<MTEntries category="$entrycategory">
  <MTParentCategories glue="/" setvar="currententrycategories"><$MTCategoryLabel$></MTParentCategories>
  <mt:if name="currententrycategories" eq="$entrycategories">
    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
  </mt:if>
</MTEntries>
  </ul>
</dd>

2008.02.25
3.3項を追加しました。

2010.10.31
1項に注記を追加しました。

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


コメント

こんばんは。
いつもありがとうございます。
本日4.2の執筆された本をamazonで購入させて頂きました。
明日届くのですが、カスタマイズでその本に記載されていましたらお許しください。

こちらの記事で同じカテゴリの記事をサイドバーに表示させる方法を記載されていますが、同じカテゴリでは無くて同じタグの記事をエントリー欄に表示することは、可能でしょうか?出来るのであれば方法を教えて頂きたいのですが、宜しくお願いいたします。

[1] Posted by kankiti : August 25, 2008 12:21 AM

>kankitiさん
こんばんは。
拙著ご購入ありがとうございます。
ご質問の件は可能です。書籍の447ページ(6.10節)に記載されておりますので、そちらをご確認頂ければ幸いです。
それではよろしくお願い致します。

[2] Posted by yujiro logo : August 25, 2008 1:11 AM

こんにちは。
本日本が届きまして6.10節のサンプルテンプレートの01~015を入力しましたが、何も表示されません。

再構築時のエラーも無いのですが、何かやり忘れてるんでしょうか?
お手数おかけしますが、お願いいたします。

[3] Posted by kankiti : August 25, 2008 1:32 PM

>kankitiさん
こんにちは。
ご質問の件ですが、サンプルの、

<mt:entryTags glue=" OR " setvar="tags">
  <mt:tagName />
</mt:entryTags>

の部分は、空白や改行を除去して、

<mt:entryTags glue=" OR " setvar="tags"><mt:tagName /></mt:entryTags>

とされましたでしょうか(書籍に(多分)そのように記載していたと思います)。ご確認頂ければ幸いです。

上記の修正を行うことでサンプルのサブテンプレートが動作することは、改めて確認しております。

それではよろしくお願い致します。

[4] Posted by yujiro logo : August 25, 2008 3:37 PM

はい。下記のように一行で記入しています。
先ほども見直ししたのですが、間違いないと思うのですが・・・

<mt:include module="ブログ記事の詳細" />
</div>
<h3 class="content-header">関連記事</h3>
<div class="content">
<mt:entryTags glue=" OR " setvar="tags"><mt:tagName /></mt:entryTags>
<mt:entries tag="$tags">
  <mt:entriesHeader>
<ul>
  </mt:entriesHeader>
  <li><a href="<mt:entryPermalink valid_html="1" />"><mt:entryTitle encode_html="1" /></a></li>
  <mt:entriesFooter>
</ul>
  </mt:entriesFooter>
</mt:entries>
</div>
<mt:include module="トラックバック" />
 
<mt:include module="コメント" />
[5] Posted by kankiti : August 25, 2008 5:29 PM

すいません。また失敗してしまいました。
申し訳ありません。


先ほどの件ですが、本に書いてあるように1行に直しています。
こちらにUPしていますので見ていただいてよろしいでしょうか?
お手数おかけします。

[6] Posted by kankiti : August 25, 2008 5:47 PM

yujiro様 お手数かけましたが、表示されておりました。
トップページのエントリー下に表示されると思いきってまして(;^_^A アセアセ・・・

それでトップのエントリー下に表示されるようにしたのですが、

・エントリーの日付のような帯をつけたいのです。
・タイトルの前の○マークを画像を使えるようにできますでしょうか?

以上2点宜しくご指導お願い申し上げます。

[7] Posted by kankiti : August 25, 2008 7:56 PM

>kankitiさん
こんにちは。
ご質問の件ですが、スタイルシートに次のような内容を設定すれば大丈夫だと思います(設定値は適宜変更してください)。

.content-header {
    margin-bottom: 5px;
    padding-left: 8px;
    color: #fff;
    background: #ff8c00;
    font-size: 100%;
    font-weight: bold;
    line-height: 2.0;
}
.entry .content ul {
    margin-left: 3px;
    padding-left: 0;
}
.entry .content li {
    list-style: none;
    padding-left: 15px;
    background: url(画像ファイル名) no-repeat 0 5px;
}

書籍のサンプルテンプレートは当ブログで配布しているテンプレートと若干異なりますが、サンプルテンプレート(と6章のカスタマイズ)にはCSSの解説も掲載していますので、可能であればテスト用のブログをひとつ作り、そのブログにサンプルテンプレートを適用して、学んで頂けると幸いです。
それではよろしくお願い致します。

[8] Posted by yujiro logo : August 25, 2008 8:39 PM

どうもありがとうございました。

勉強の方も頑張りますが、また宜しくお願いします。

[9] Posted by kankiti : August 25, 2008 10:44 PM

yujiro様、こんばんは。
いつもお世話になっています。
こちらのEntryCategoryIDを使いたく、ウェブサイトのメインページに

<MTEntries blog_ids="2">
<MTSetVarBlock name="en_cate_id"><$MTEntryCategoryID$></MTSetVarBlock>
<MTIf name="en_cate_id" eq="1">りんご <$MTEntryTitle$><MTElseIf name="en_cate_id" eq="2">オレンジ <$MTEntryTitle$></MTElseIf></MTIf>
</MTEntries>

と書いてみたのですが、
エラーが発生しました。
Undefined subroutine &MT::Template::Context::_hdlr_category_id called

となってしまいます。

こちらのエラーは私がMT5を使っているからでしょうか?
それとも、根本的に使い方を間違えているのでしょうか?

もし解決法がわかりましたら、アドバイスをよろしくお願いいたします。

[10] Posted by lex : April 23, 2010 12:04 AM

>lexさん
こんばんは。
ご質問の件ですが、プラグインがMovable Type 5対応となっていなかったため、バージョンアップしました。

http://www.koikikukan.com/archives/2008/02/24-022222.php

から再度ダウンロードしてご確認ください。
それではよろしくお願い致します。

[11] Posted by yujiro logo : April 27, 2010 3:14 AM

yujiro様 こんにちは。

やはり、MT5に対応していなかったと言うことだったんですね。
そして早速のMT5への対応ありがとうございました。

MT5対応版でうまく動きました。
<MTEntryIfCategory name="りんご">でもできたのですが、カテゴリ名が変わった場合に書き直さないといけないのでCategoryIDで管理したかったものですから、とても助かりました。
他にも工夫次第でいろんな用途に使えそうなプラグインだと思います。

重ねて、MT5への対応をしていただきありがとうございました。

[12] Posted by lex : May 1, 2010 5:31 PM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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