Under the Bridge

a Picture of the Late Him

複数カテゴリの最新情報5件(例2)

2008年1月 4日 10:43 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

複数カテゴリの最新情報を5件ずつ表示するサンプル。

Movable Type 4.1b2で動作確認。Movable Type 4.01でも恐らく大丈夫と思う。先の例1に対し、2008/1/3のエントリ「カテゴリごとの表示形態を変える(多カテゴリ対応)」およびMTIfやSetVar系のテンプレートタグを用いた応用編。

前準備

まずは、2008/1/3のエントリ「カテゴリごとの表示形態を変える(多カテゴリ対応)を読んでいただいてから。

カテゴリの作成

「各カテゴリ新着情報」というカテゴリを新規作成する。

ブログ記事の作成

そしてそのカテゴリに(ここから先は好みの問題で何でもいいが)ブログ記事タイトル「新着情報」、本文「最新の情報を表示するページです」、カテゴリは先に作った「各カテゴリ新着情報」を選択する。ポストするブログ記事はこれ一件だけでいい(ここに記載の内容以外のカスタマイズを行わない場合、メインページにのみ本文が表示され、カテゴリページには本文は登場しない。まあ、好みで如何様にもできるだろう)。

ブログ記事リストテンプレートの改造

アーカイブテンプレート一覧の中の「ブログ記事リスト」を開き、以下のように改造する。テストサイトでは既に2008/1/3のエントリ「カテゴリごとの表示形態を変える(多カテゴリ対応)のような、カテゴリごとに表示を切り替える改造が行われている。

改造箇所は、「各カテゴリ新着情報」というカテゴリがあったら、Cattmpl4というモジュールをインクルードするというコードを追加しただけである。ちなみに、33~35行、55~57行が追加されたコードだ。

<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?><MTSetVarBlock name="body_class">mt-archive-listing mt-<MTVar name="archive_class"></MTSetVarBlock>
<MTSetVar name="sidebar" value="1"><MTSetVar name="module_about_context" value="1"><MTSetVarBlock name="page_title"><$MTArchiveTitle$></MTSetVarBlock><$MTInclude module="ヘッダー"$>
<$MTInclude module="mdlVar"$>

<p><a href="<$MTBlogURL$>" title="ホーム">ホーム</a>
&gt;
<MTIf name="category_archive">
  <$MTCategoryLabel cutfirstchar="3"$>
<MTElse>
  <$MTGetVar name="page_title"$>
</MTIf>
</p>



<!-- カテゴリの表示形態を変える -->
<!-- 比較用のカテゴリ名を取得 -->
<MTIf name="category_archive">
<MTSetVarBlock name="curValue"><MTCategoryLabel></MTSetVarBlock>
</MTIf>

<!-- 初期化(インクルードなし、デフォルトで) -->
<MTSetVar name="IncludeCatName" value="None">
<MTIf name="curValue" eq="210Movable Type">
	<MTSetVar name="IncludeCatName" value="Cattmpl1">
</MTIf>
<MTIf name="curValue" eq="211Movable Type4">
	<MTSetVar name="IncludeCatName" value="Cattmpl2">
</MTIf>
<MTIf name="curValue" eq="230クルマ">
	<MTSetVar name="IncludeCatName" value="Cattmpl3">
</MTIf>
<MTIf name="curValue" eq="各カテゴリ新着情報">
	<MTSetVar name="IncludeCatName" value="Cattmpl4">
</MTIf>

<MTIf name="IncludeCatName" eq="None">
	<MTSetVarBlock name="ecount">
	<$MTBlogEntryCount$>
	</MTSetVarBlock>
	<MTEntries lastn="$ecount">
	<$MTInclude module="ブログ記事の概要"$>
	<$MTInclude module="タグ"$>
	</MTEntries>
<MTElse>
	<MTIf name="IncludeCatName" eq="Cattmpl1">
		<$MTInclude module="Cattmpl1"$>
	</MTIf>
	<MTIf name="IncludeCatName" eq="Cattmpl2">
		<$MTInclude module="Cattmpl2"$>
	</MTIf>
	<MTIf name="IncludeCatName" eq="Cattmpl3">
		<$MTInclude module="Cattmpl3"$>
	</MTIf>
	<MTIf name="IncludeCatName" eq="Cattmpl4">
		<$MTInclude module="Cattmpl4"$>
	</MTIf>
</MTIf>
<$MTInclude module="フッター"$>

Cattmpl4モジュールを新規作成

Cattmpl4という名前で新規モジュールを作成、中に次のようなコードを書く。コメントや改行は、サンプルが見やすいように記述している。端折っていただいて構わない。

<!-- このモジュールは各カテゴリ新着情報専用である -->

<!-- 新着記事専用のカテゴリ名 -->
<MTSetVar name="myValue" value="各カテゴリ新着情報">

<!-- 新着記事リストを表示したいカテゴリをカンマ区切りで列挙 -->
<MTSetVar name="CatLists" value="210Movable Type,211Movable Type4,230クルマ">

<!-- カテゴリループ -->
<MTCategories>

	<!-- カテゴリループ内における現在のカテゴリを取得 -->
	<MTSetVarBlock name="curValue"><MTCategoryLabel></MTSetVarBlock>

	<!-- 「新着記事専用のカテゴリ」をはじく -->
	<MTIf name="curValue" ne="$myValue">

		<!--「 新着記事を表示したいカテゴリ」のリストへ「現在のカテゴリ」が含まれる場合 -->
		<MTIf name="CatLists" like="$curValue">

			<!-- エントリリスト5件 -->
			<h2><MTGetVar name="curValue"> の新着記事5件</h2>
			<MTEntries lastn="5">
				<h3 id="entry-<$MTEntryID$>"><$MTEntryTitle$></h3>
				<$MTInclude module="ブログ記事のメタデータ"$>
			</MTEntries>

		</MTIf>

	</MTIf>
</MTCategories>

Cattmpl4モジュールの解説

4行目:「各カテゴリ新着情報」というカテゴリ名自体をmyValue変数へ記憶。

7行目:新着情報を表示したいカテゴリ(以下カンマ区切りカテゴリリスト)を、カンマ区切りで列挙。CatLists変数へセット。

10行目:カテゴリループ開始(勘違いする人もいるだろうが、呼び出し元カテゴリループ中のループ(多重ループ)とはならない。呼び出し元は「ブログ記事リスト」テンプレート中で「各カテゴリ新着情報」を発見したときのみである)。

13行目:ループ中における、現在のカテゴリ名をcurValue変数へ記憶。

16行目:ループ中における、現在のカテゴリ名が「各カテゴリ新着情報」であった場合にはじく。neモデファイアは「一致しない場合にのみ実行」である。

19行目:If文のnameにカンマ区切りカテゴリリスト、likeモデファイアの変数へcurValueを使用するとこがミソかも知れない。つまりCatLists変数("210Movable Type,211Movable Type4,230クルマ") の中にcurValue(カテゴリ名)が含まれていないかをチェックする。モデファイアに変数を使用するときには変数の先頭にドルマークを付加する。

22~26行目:エントリを5件表示する。このサンプルのコードはてきとう。

そして再構築

この手法ではカテゴリページが再構築されないと、「最新の情報リスト」が正しく更新されない。

動作と考察

OKであった。「各カテゴリ新着情報」ページを開くと、狙ったカテゴリの最新情報が5件づつ表示された。

「ブログ記事リスト」テンプレートは、一度こんな感じで改造しておけば、後からの改造が発生した場合に、よくあるMTIf多重ネストへ付き合う必要は無く、単にMTIfの追記でOKな感じ。

Cattmpl4モジュールであるが、このモジュールは「各カテゴリ新着情報の列挙専用」のページの雛形である。のちに新しいカテゴリの新着情報も追加したくなった場合は、CatLists変数の代入値にカンマ区切りかなんかでカテゴリ名を追記してやるだけでOK。

「ブログ記事リスト」テンプレートの改造、Cattmpl4モジュールの新規追加が必要となるこのカスタマイズはかなり面倒。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 複数カテゴリの最新情報5件(例2)

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)