Movable Typeで複数ブログのブログ記事を同名のカテゴリ別に振り分ける方法
Movable Typeで、複数ブログのブログ記事を同名のカテゴリ別に振り分ける方法を紹介します。
このエントリーでは2つのパターンについて解説します。
1.パターン1の前提条件
次のカテゴリとブログ記事を用意します。カテゴリは1階層のみです。
ブログA(ブログID:2)
├ カテゴリaaa
│ └ 記事A1
├ カテゴリbbb
│ └ 記事A2
└ カテゴリccc
└ 記事A3
ブログB(ブログID:3)
├ カテゴリaaa
│ └ 記事B1
├ カテゴリbbb
│ └ 記事B2
└ カテゴリccc
└ 記事B3
これを次のように表示します。
カテゴリaaa
├ 記事A1
└ 記事B1
カテゴリbbb
├ 記事A2
└ 記事B2
カテゴリccc
├ 記事A3
└ 記事B3
2.パターン1のテンプレート
1項を実現するには次のテンプレートを利用します。
<mt:Entries blog_ids="2,3">
<mt:SetVarBlock name="title">
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
</mt:SetVarBlock>
<$mt:EntryCategory setvar="cat"$>
<$mt:SetVar name="list" key="$cat" value="$title" prepend="1"$>
</mt:Entries>
<mt:loop name="list" sort_by="key">
<mt:if name="__first__">
<ul>
</mt:if>
<li><mt:GetVar name="__key__">
<ul><mt:GetVar name="__value__"></ul>
</li>
<mt:if name="__last__">
</ul>
</mt:if>
</mt:loop>
まず、前半のMTEntriesタグにblog_idsモディファイアを与えて、取得したいブログのブログIDを設定します。赤色のブログIDは適宜書き換えてください。
<mt:Entries blog_ids="2,3">
...
</mt:Entries>
MTEntriesタグの中で、MTEntryTitleタグとMTEntryPermalinkの情報を変数titleに設定します。
<mt:SetVarBlock name="title">
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
</mt:SetVarBlock>
また、MTEntryCategoryタグの情報を変数catに設定します。
<$mt:EntryCategory setvar="cat"$>
そして、それぞれの変数をハッシュに設定します。ハッシュに設定する際にはprependモディファイア(またはappendモディファイア)を与えて、valueモディファイアの内容を結合していきます。
<$mt:SetVar name="list" key="$cat" value="$title" prepend="1"$>
そして、MTLoopタグでハッシュの内容を出力します。
<mt:loop name="list" sort_by="key">
<mt:if name="__first__">
<ul>
</mt:if>
<li><mt:GetVar name="__key__">
<ul><mt:GetVar name="__value__"></ul>
</li>
<mt:if name="__last__">
</ul>
</mt:if>
</mt:loop>
これで次のように出力されます。
MTMultiBlogタグを利用したい場合は、前述のMTEntriesタグを次のように括ってください。MTEntriesタグのblog_idsモディファイアは削除してください。
<mt:MultiBlog blog_ids="2,3">
<mt:Entries>
...
</mt:Entries>
</mt:MultiBlog>
3.パターン2の前提条件
次のカテゴリとブログ記事を用意します。ブログBのカテゴリは2階層のものを含んでます。
ブログA(ブログID:2)
├ カテゴリaaa
│ └ 記事A1
├ カテゴリbbb
│ └ 記事A2
└ カテゴリccc
└ 記事A3
ブログB(ブログID:3)
├ カテゴリaaa
│ └ カテゴリddd
│ └ 記事B1
├ カテゴリbbb
│ └ カテゴリeee
│ └ 記事B2
└ カテゴリccc
└ カテゴリfff
└ 記事B3
これを次のように表示します。ブログBについては、サブカテゴリの親カテゴリにひもづけます。
カテゴリaaa
├ 記事A1
└ 記事B1
カテゴリbbb
├ 記事A2
└ 記事B2
カテゴリccc
├ 記事A3
└ 記事B3
4.パターン1のテンプレート
3項を実現するには次のテンプレートを利用します。
<mt:Entries blog_ids="2,3">
<mt:SetVarBlock name="title"><li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li></mt:SetVarBlock>
<mt:EntryPrimaryCategory>
<mt:HasParentCategory>
<mt:ParentCategory>
<$mt:CategoryLabel setvar="cat"$>
</mt:ParentCategory>
</mt:HasParentCategory>
<mt:HasNoParentCategory>
<$mt:CategoryLabel setvar="cat"$>
</mt:HasNoParentCategory>
</mt:EntryPrimaryCategory>
<$mt:SetVar name="list" key="$cat" value="$title" prepend="1"$>
</mt:Entries>
<mt:loop name="list" sort_by="key">
<mt:if name="__first__">
<ul>
</mt:if>
<li><mt:GetVar name="__key__">
<ul><mt:GetVar name="__value__"></ul>
</li>
<mt:if name="__last__">
</ul>
</mt:if>
</mt:loop>
基本的な構造は2項のテンプレートと同じです。ここでは2項との差分のみ解説します。
2項ではMTEntryCategoryタグを使ってカテゴリ情報を取得していましたが、ここでは次のテンプレートを利用してカテゴリ情報を取得します。
<mt:EntryPrimaryCategory>
<mt:HasParentCategory>
<mt:ParentCategory>
<$mt:CategoryLabel setvar="cat"$>
</mt:ParentCategory>
</mt:HasParentCategory>
<mt:HasNoParentCategory>
<$mt:CategoryLabel setvar="cat"$>
</mt:HasNoParentCategory>
</mt:EntryPrimaryCategory>
まず、MTEntryPrimaryCategoryタグを使って、メインカテゴリ情報のコンテキストに移動します。
<mt:EntryPrimaryCategory>
...
</mt:EntryPrimaryCategory>
その中でMTHasParentCategoryタグを使ってメインカテゴリに親カテゴリが存在するかチェックし、存在する場合はMTParentCategoryタグで親カテゴリのコンテキストに移動して、MTCategoryLabelタグでカテゴリ名を取得します。
<mt:HasParentCategory>
<mt:ParentCategory>
<$mt:CategoryLabel setvar="cat"$>
</mt:ParentCategory>
</mt:HasParentCategory>
また、MTHasNoParentCategoryタグを使ってメインカテゴリに親カテゴリが存在しないかをチェックし、存在しない場合はMTCategoryLabelタグでメインカテゴリのカテゴリ名を取得します。
<mt:HasNoParentCategory>
<$mt:CategoryLabel setvar="cat"$>
</mt:HasNoParentCategory>
これで次のように出力されます。
MTMultiBlogタグを利用したい場合は、2項の最後に示した変更を行ってください。
5.3階層以上の場合
カテゴリが3階層以上で最上位のカテゴリを取得したい場合は、4項のMTParentCategoryタグをMTTopLevelParentタグに変更してください(2階層の場合でも使えます)。
<mt:HasParentCategory>
<mt:TopLevelParent>
<$mt:CategoryLabel setvar="cat"$>
</mt:TopLevelParent>
</mt:HasParentCategory>
- Movable Type6で記事のない親カテゴリのカテゴリページを出力する方法
- Movable Typeでブログ記事が属するカテゴリアーカイブのリンクをブログ記事ページに表示する
- Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法
- Movable Typeで親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリストを表示する
- Movable Typeのカテゴリのベースネームについて
- Movable TypeのMTIfCategoryタグとMTEntryIfCategoryタグの違い
- Movable Typeのカテゴリリストで階層別に背景画像を変更する
- Movable Typeのカテゴリ・フォルダで特定の最上位階層を表示しない方法
- Movable Typeのカテゴリリストにダミーの親カテゴリを表示する
- MTEntriesタグのcategoryモディファイアに「AND」を含むカテゴリを指定する
- ブログ記事ページに自分が属するカテゴリのツリーと直属カテゴリの他のブログ記事一覧を表示する
- Movable Type 5でのMTEntriesタグのcategory/catgoriesモディファイアの動作改善について
- 親カテゴリーアーカイブにサブカテゴリーのブログ記事を表示する場合に特定のサブカテゴリーのブログ記事をフィルタリングする
- 特定のカテゴリのブログ記事を表示する
- 親カテゴリページにサブカテゴリページのリンクを表示する