ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版・改)
「ブログ記事に同一カテゴリーのブログ記事リストを表示(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項に注記を追加しました。
- ブログ記事ページでその記事以外のブログ記事一覧を表示する方法
- MTEntriesタグをテンプレートで複数使う時に記事を重複させない方法
- Movable Type5.2のTinyMCEを5.1のボタンに戻す方法
- Movable Typeで製品情報のテーブルを作る
- Movable Typeのブログ記事ページのファイル名に日別の通番を振る
- 予定日を過ぎたブログ記事を「最近のブログ記事」に表示しない
- mt-csv2customfields v0.03
- 複数ブログのブログ記事を時間順に1件ずつ表示する
- Movable Type のブログ記事にフラグメント識別子(ページ内リンク)を設定する
- 特定のカテゴリーに属するブログ記事一覧を表示する(改)
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その2)
- Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法(その1)
- ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)
- 概要と本文を切り替える(Movable Type 4・デフォルトテンプレート版)
- Movable Type で画像挿入時の form 要素について
こんばんは。
いつもありがとうございます。
本日4.2の執筆された本をamazonで購入させて頂きました。
明日届くのですが、カスタマイズでその本に記載されていましたらお許しください。
こちらの記事で同じカテゴリの記事をサイドバーに表示させる方法を記載されていますが、同じカテゴリでは無くて同じタグの記事をエントリー欄に表示することは、可能でしょうか?出来るのであれば方法を教えて頂きたいのですが、宜しくお願いいたします。
>kankitiさん
こんばんは。
拙著ご購入ありがとうございます。
ご質問の件は可能です。書籍の447ページ(6.10節)に記載されておりますので、そちらをご確認頂ければ幸いです。
それではよろしくお願い致します。
こんにちは。
本日本が届きまして6.10節のサンプルテンプレートの01~015を入力しましたが、何も表示されません。
再構築時のエラーも無いのですが、何かやり忘れてるんでしょうか?
お手数おかけしますが、お願いいたします。
>kankitiさん
こんにちは。
ご質問の件ですが、サンプルの、
<mt:entryTags glue=" OR " setvar="tags">
<mt:tagName />
</mt:entryTags>
の部分は、空白や改行を除去して、
<mt:entryTags glue=" OR " setvar="tags"><mt:tagName /></mt:entryTags>
とされましたでしょうか(書籍に(多分)そのように記載していたと思います)。ご確認頂ければ幸いです。
上記の修正を行うことでサンプルのサブテンプレートが動作することは、改めて確認しております。
それではよろしくお願い致します。
はい。下記のように一行で記入しています。
先ほども見直ししたのですが、間違いないと思うのですが・・・
<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="コメント" />
すいません。また失敗してしまいました。
申し訳ありません。
先ほどの件ですが、本に書いてあるように1行に直しています。
こちらにUPしていますので見ていただいてよろしいでしょうか?
お手数おかけします。
yujiro様 お手数かけましたが、表示されておりました。
トップページのエントリー下に表示されると思いきってまして(;^_^A アセアセ・・・
それでトップのエントリー下に表示されるようにしたのですが、
・エントリーの日付のような帯をつけたいのです。
・タイトルの前の○マークを画像を使えるようにできますでしょうか?
以上2点宜しくご指導お願い申し上げます。
>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の解説も掲載していますので、可能であればテスト用のブログをひとつ作り、そのブログにサンプルテンプレートを適用して、学んで頂けると幸いです。
それではよろしくお願い致します。
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を使っているからでしょうか?
それとも、根本的に使い方を間違えているのでしょうか?
もし解決法がわかりましたら、アドバイスをよろしくお願いいたします。
>lexさん
こんばんは。
ご質問の件ですが、プラグインがMovable Type 5対応となっていなかったため、バージョンアップしました。
http://www.koikikukan.com/archives/2008/02/24-022222.php
から再度ダウンロードしてご確認ください。
それではよろしくお願い致します。
yujiro様 こんにちは。
やはり、MT5に対応していなかったと言うことだったんですね。
そして早速のMT5への対応ありがとうございました。
MT5対応版でうまく動きました。
<MTEntryIfCategory name="りんご">でもできたのですが、カテゴリ名が変わった場合に書き直さないといけないのでCategoryIDで管理したかったものですから、とても助かりました。
他にも工夫次第でいろんな用途に使えそうなプラグインだと思います。
重ねて、MT5への対応をしていただきありがとうございました。