TopMovable Typeカスタマイズカテゴリー > 2012年10月
2012年10月20日

Movable Typeで複数ブログのブログ記事を同名のカテゴリ別に振り分ける方法

October 20,2012 12:03 AM
Tag:[, , ]
Permalink

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>
Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3