Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法

Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法

Posted at April 24,2013 12:03 AM
Tag:[Category, Customize, MovableType]

Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法を紹介します。

1.完成例

このエントリーでは、次のように第1階層にカテゴリ名、第2階層に年、そして第3階層に記事タイトル一覧を表示します。

完成例
「カテゴリ+年別」の記事一覧

2.テンプレート

「カテゴリ+年別」の記事一覧を表示するには、次のテンプレートを利用します。

<mt:TopLevelCategories>
<ul>
  <li><$mt:CategoryLabel$>
  <mt:Entries>
    <$mt:EntryDate format="%Y" setvar="year"$>
    <mt:SetVarBlock name="title"><li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li></mt:SetVarBlock>
    <$mt:var name="list{$year}" value="$title" append="1"$>
  </mt:Entries>
  <mt:loop name="list" sort_by="key numeric reverse">
    <ul>
      <li><$mt:var name="__key__"$>年
        <ul><$mt:var name="__value__"$></ul>
      </li>
    </ul>
  </mt:loop>
  </li>
</ul>
  <$mt:SetVar name="undef(list)"$>
</mt:TopLevelCategories>

このテンプレートでは最上位のカテゴリのみを表示対象にしています。子カテゴリを表示する方法は後述します。

3.テンプレートの解説

まず、MTTopLevelCategoriesタグで最上位のカテゴリのみを繰り返し処理します。MTTopLevelCategoriesタグを使う場合、通常であればMTSubCatsRecurseタグと組み合わせて子カテゴリを再帰的に処理しますが、MTSubCatsRecurseタグを省くことで最上位のカテゴリだけを処理できます。

<mt:TopLevelCategories>
…中略…
</mt:TopLevelCategories>

MTTopLevelCategoriesタグの中で、MTCategoryLabelタグでカテゴリ名(第1階層)を表示します。

<ul>
  <li><$mt:CategoryLabel$>

次に、MTEntriesタグで該当カテゴリに属する記事の一覧を取得します。

  <mt:Entries>
  …中略…
  </mt:Entries>

MTEntriesタグの中では、MTEntryDateタグを使って記事の公開年を変数yearに保持します。

    <$mt:EntryDate format="%Y" setvar="year"$>

またMTSetVarBlockタグを使って、MTEntryPermalinkタグとMTEntryTitleタグの内容を変数titleに保持します。

    <mt:SetVarBlock name="title"><li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li></mt:SetVarBlock>

変数year(年)をキーに、ハッシュ変数listに変数titleを保持します。appendモディファイアを使っているので、例えばキー「2013」の値には、2013年に公開された記事タイトルのリンクが追加されていきます。

    <$mt:var name="list{$year}" value="$title" append="1"$>

変数listにすべての記事一覧を保持したら、MTLoopタグで年(第2階層)とブログ記事一覧(第3階層)を出力します。

  <mt:loop name="list" sort_by="key numeric reverse">
    <ul>
      <li><$mt:var name="__key__"$>年
        <ul><$mt:var name="__value__"$></ul>
      </li>
    </ul>
  </mt:loop>

4.最上位のカテゴリに子カテゴリの記事を含む

最上位のカテゴリに子カテゴリの記事を含むには、MTEntriesタグの代わりに、MTEntriesWithSubCategoriesタグを用いるだけです。

  <mt:EntriesWithSubCategories>
  …中略…
  </mt:EntriesWithSubCategories>

5.年を並び替える

1項のテンプレートでは新しい年が先に表示されます。古い年から表示するには、MTLoopタグのsort_byモディファイアから「reverse」を削除します

  <mt:loop name="list" sort_by="key numeric">

6.記事一覧の順番を並び替える

年ごとの記事一覧の順番を並び替えるには、MTEntriesタグにsort_orderモディファイアまたはsort_orderモディファイアを設定します。

またはappendモディファイアをprependモディファイアに変更します。

    <$mt:var name="list{$year}" value="$title" prepend="1"$>
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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