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

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

Posted at October 20,2012 12:03 AM
Tag:[Category, MovableType, MultiBlog]

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>
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)