複数カテゴリの最新情報5件(例2)
複数カテゴリの最新情報を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>
>
<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モジュールの新規追加が必要となるこのカスタマイズはかなり面倒。
- カテゴリ:211Movable Type4
トラックバック(0)
このブログ記事を参照しているブログ一覧: 複数カテゴリの最新情報5件(例2)
このブログ記事に対するトラックバックURL:
- Categories
- Entries
-
- MT4:エントリ投稿画面をホゲる実験
- MT4LP5で得たもの
- MT4LP5に参加しました
- MT4.1:mtde.info 開設しました。
- Movable Type4で、かなり気に入っていること
- Movable Type4で、かなり気に入らないこと
- MT4.1:CustomEditorButton2 プラグイン
- MT4.1:「テンプレートの編集」画面のコードスニペットを拡張する
- MT4.1:自サイト・他サイトのFeed情報を取得してリスト化(続編)
- 日記(K0、mtde、MT)
- MT4.1:自サイト・他サイトのFeed情報を取得してリスト化
- ノープラグインでカテゴリーソート(MT4.1専用版)多分に反則
- 自サイト内の特定カテゴリのRSSを出力
- MT4.1:モジュール化(雑談ですが)
- MT4.1:カテゴリリストへ代表画像を付与する(Asset系)
- MT4.1:カテゴリリスト+エントリ全展開+エントリのAsset代表画像表示
- MT4.1:イメージの幅指定で高さを自動的に計算(Asset系)
- MT4.1:MTでサポートされない演算をJavaScript関数ライブラリ化する
- MT4.1:エントリと同じタグのついた他エントリをリストアップする(自エントリを強調表示・改良版)
- エントリと同じタグのついた他エントリをリストアップする(自エントリを強調表示)
- 最新記事で使用されているタグの最新5件を表示
- MT4.1:エントリリストへ、特定カテゴリ用画像をつける
- MT4LP5
- MT4.1で乱数を取得したい場合
- ★マークでエントリ数を示すエントリリストつきカレンダー
- 横型カレンダー(素ノーマル)
- ファンキーな横置きカレンダー
- サムネイル画像エントリリストの改造(MT4.1用)
- MT4.1 ついにリリース
- 日記
- MT4.1:変数2つでの演算 (2)
- MT4.1:テンプレートタグで100までの数から素数を求める
- MT4.1:変数2つでの演算
- 日記
- MT4.1:年度タイトルつき月別アーカイブ(4月で新年度切り替え)
- MT4.1:年タイトルつき月別アーカイブ(1月で新年切り替え)
- 全カテゴリからエントリを3件ずつ表示する。キメウチ禁止
- MT4.1:カテゴリの並べ替え+表示切り替え+現カテゴリ展開+強調表示つき(カスタムフィールド+ハッシュ変数)
- MT4.1:カテゴリの並べ替え+表示切り替え(カスタムフィールド+ハッシュ変数)
- MT4.1:カテゴリの並べ替え(カスタムフィールド+ハッシュ変数)
- 日記
- MT4.1:文字列を繋げる
- MT4.1:カテゴリの並べ替え(プラグイン使わず)
- エントリと同じタグのついた記事一覧をリストアップ(3)
- あるエントリの存在するカテゴリの、サブカテゴリ内のエントリを抽出する
- 配列に対するpopとshift
- MTのテンプレートタグでFizzBuzz。
- エントリと同じカテゴリ内のエントリ一覧取得
- MT4.1:Forループ(文字列の連結)
- MT4.1:Forループ(配列中より特定のデータのインデックスを取得)
- MT4.1:Forループ(配列の並びを逆にする)
- MT4.1:Loopループ(基本形)
- MT4.1:Forループ(基本形)
- MT4.1:配列サンプル(配列の先頭・末尾からデータ取得・削除)
- MT4.1:配列サンプル(特定カテゴリの全エントリのみを配列へ代入)
- MT4.1:配列サンプル(全カテゴリを配列へ代入)
- 外部ブログのRSSを自サイトへ読み込み
- 名無しコメントに対応する
- 複数カテゴリの最新情報5件(例2)
- 複数カテゴリの最新情報5件(例1)
- カテゴリごとの表示形態を変える(多カテゴリ対応)
- 特定のカテゴリの最新エントリ5件をメインページへ表示
- 変数専用モジュールで取得したカテゴリ情報配列をほかのモジュールで使用する
- 定数・変数専用のモジュールを使う
- タグ名の全取得、配列へセット、生成文字列連結
- カテゴリ名の全取得、配列へセットする
- サムネイル画像エントリリストの改造(さらにチューン)
- サムネイル画像エントリリストの改造(OK版)
- サムネイル画像エントリリストの改造
- MT4のコメントフォーム
- 配列使ってみたテスト
- ブログ記事投稿時のタグ・キーワードとか
- 実験記事:キーワードのつけ方と概要の書き方
- デザイン小変更
- MT4書籍購入
- MT4で日本語を用いたタグクラウドがおかしい・~が出ない問題点
- 小粋な本の購入
- ちょっと気づいたこと
- MTSetVarでクリッカブルマップ
- 画像サムネイルエントリリスト(改)
- MTGetVarによるアンカーリンク
- MT3>MT4バージョンアップ時不具合
- pageを用いたナビゲーションバー
- 画像の取り扱い
- MT3サイトをMT4サイトへコンバート
- 月別アーカイブのタイトルが0000年12月となる不具合
- MT4で、エントリが再構築されないとき
- MTGetVarで文字列置換
- エントリと同じタグのついた記事一覧をリストアップ(2)
- 同一カテゴリーに属するエントリ一覧
- Folderの親子関係を調べる
- FolderLabel・FolderDescription関係調査
- カテゴリ・エントリリスト(改)
- カテゴリ・エントリリスト
- folder調査用テンプレート(1)
- トップレベルのウェブページのみ抜き出す
- ドロップダウンタグリスト
- Feed情報調査用テンプレート
- MTEntryCreatedDate
- コメント調査用テンプレート
- カテゴリ数、エントリ数、ウェブページ数の取得
- strip_tagsモデファイア
- replaceモデファイア
- regex_replaceモデファイア
- count_paragraphsモデファイア
- count_charactersモデファイア
- catモデファイア
- count_wordsモデファイア
- MTAuthor関連調査
- 画像サムネイルエントリリスト
- MTAsset関連調査(2)
- MTAsset関連調査
- カテゴリ毎に表示を変えるには?
- 強調表示付きカテゴリリスト
- MT4ライセンス購入
- MT4:Webページで生成するグローバルナヴィゲーション
- MT4:エントリと同じタグのついた記事一覧をリストアップ
- MT4:テンプレート構想変更
- MT4:beta7の生成xhtmlコード解析、ほか
- MT4:うっかりやってはいけないこと
- MT4:スタイルシートの切り替え
- MT4:モジュール化成果
- MT4:モジュール化・アルファ(本文)エリアの改造
- MT4:モジュール化・システムテンプレート
- MT4:モジュール化・ウェブページ
- MT4:モジュール化・エントリアーカイブページ
- MT4:モジュール化・カテゴリアーカイブページ
- MT4:モジュール化・アルファ(本文)エリア
- MT4:エントリについて
- MT4:モジュール化・バナーエリア
- MT4:モジュール化・ヘッダコード
- MT4:モジュール化・モジュール名の命名規則
- MT4:モジュール化・基本形改造
- MT4:XML宣言モジュール
- MT4:モジュール化・基本形
- MT4:カテゴリソート(MTCategoryLabel remove_html="1")

コメントする