カテゴリの種類別にアーカイブページの出力方法を変える(その2)

昨日の記事の続きで、カテゴリの種類別にアーカイブページの出力方法を変える方法を紹介します。
今日(後半)はカテゴリアーカイブテンプレートの作り方を解説します。

テンプレートの例

テンプレートの例は以下のようになります。

<mt:ParentCategory setvar="top"><$mt:CategoryLabel$></mt:ParentCategory>
<mt:If name="top" eq="市町村">
  <$mt:CategoryLabel setvar="city"$>
  <h2><$mt:GetVar name="city"$></h2>
  <mt:SubCategories category="有人・無人">
    <$mt:CategoryLabel setvar="type"$>
    <mt:SetVarBlock name="cond"><$mt:GetVar name="city"$> AND <$mt:GetVar name="type"$></mt:SetVarBlock>
    <mt:Entries category="$cond">
      <mt:EntriesHeader>
      <h3><$mt:GetVar name="type"$></h3>
      <ul>
      </mt:EntriesHeader>
        <li><$mt:EntryTitle$></li>
      <mt:EntriesFooter>
      </ul>
      </mt:EntriesFooter>
    </mt:Entries>
  </mt:SubCategories>
<mt:Else>
  <$mt:CategoryLabel setvar="type"$>
  <h2><$mt:GetVar name="type"$></h2>
  <mt:SubCategories category="市町村">
    <$mt:CategoryLabel setvar="city"$>
    <mt:SetVarBlock name="cond"><$mt:GetVar name="city"$> AND <$mt:GetVar name="type"$></mt:SetVarBlock>
    <mt:Entries category="$cond">
      <mt:EntriesHeader>
      <h3><$mt:GetVar name="city"$></h3>
      <ul>
      </mt:EntriesHeader>
        <li><$mt:EntryTitle$></li>
      <mt:EntriesFooter>
      </ul>
      </mt:EntriesFooter>
    </mt:Entries>
  </mt:SubCategories>
</mt:If>

テンプレートの内容

テンプレートの内容は以下の通りです。

1行目

親カテゴリを読み込み(MTParentCategoryタグ)、その名前(MTCategoryLabelタグ)を変数topに代入します。

2行目/19行目/36行目

変数topの値(=親カテゴリ名)が、「市町村」かどうかで条件判断します。
条件が成立した場合は、3行目以降(市町村ごとの出力)に進みます。
一方、条件が成立しない場合は、20行目以降(有人・無人ごとの出力)に進みます。

3行目

再構築中のカテゴリ名(この時点では市町村名)を、変数cityに代入します。

4行目

変数cityの値(=市町村名)を出力します。

5行目/18行目

MTSubCategoriesタグを使って、「有人・無人」カテゴリの配下のカテゴリを、順に読み込みます。

6行目

MTSubCategoriesタグで処理中のカテゴリ名(=「有人」か「無人」)を、変数typeに代入します。

7行目

変数cityの値(=市町村名)と、変数typeの値(=「有人」か「無人」)を、「 AND 」でつないだ文字列を作り、変数condに代入します。
例えば、cityの値が「A市」で、typeの値が「有人」だと、変数condの値は「A市 AND 有人」になります。

8行目/17行目

7行目で求めた変数condの値を、MTEntriesタグのcategoryモディファイアに指定します。
これで、特定の市町村のカテゴリに属し、かつ有人(または無人)のカテゴリに属する記事を読み込むことができます。

9~12行目

最初の記事の時には(MTEntriesHeaderタグ)、変数typeの値(=「有人」か「無人」)を出力し、またulタグも出力します。

13行目

個々の記事のタイトルを出力します。

14~16行目

最後の記事の時には(MTEntriesFooterタグ)、ulの閉じタグを出力します。

20~35行目

市町村ごとの記事を出力するのと同じ考え方で、有人/無人のそれぞれのカテゴリに属する記事を、市町村ごとに出力します。