コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグ
小粋空間 » Movable Type » テンプレートタグ » コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグ
コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグを紹介します。
1.問題点
コンテンツデータでMTEntriesWithSubCategoriesと同等のタグ(MTContentsWithSubCategories)はありません。
ということで、コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグを紹介します。
2.前提条件
- コンテンツタイプ名:products
- コンテンツタイプに設定しているコンテンツフィールドのカテゴリセット名:field_category
- カテゴリセット名:category
- カテゴリセットの構造:下記(2階層まで)
cat1
cat1-1
cat1-2
cat1-3
3.代替テンプレートタグ(親カテゴリが1つの場合)
赤字の部分は自由に書き換えてください。
<mt:CategorySets name="category">
<mt:TopLevelCategories>
<mt:HasParentCategory>
<mt:setvarblock name="all"><mt:var name="all"> OR <mt:var name="top">/<mt:CategoryLabel></mt:setvarblock>
</mt:HasParentCategory>
<mt:HasNoParentCategory>
<mt:CategoryLabel setvar="top">
<mt:setvarblock name="all"><mt:var name="top"></mt:setvarblock>
</mt:HasNoParentCategory>
<mt:SubCatsRecurse>
</mt:TopLevelCategories>
</mt:CategorySets>
<mt:Contents content_type="products" field:field_category="$all">
<mt:ContentLabel><br />
</mt:Contents>
4.3の解説
テンプレートタグの前半で次のようなカテゴリ名の一覧を取得します。
cat1 OR cat1/cat1-1 OR cat1/cat1-2 OR cat1/cat1-3
この文字列を、後半のmt:Contentsタグの"field:field_category"オプションの値に設定します。
5.代替テンプレートタグ(親カテゴリが2つの場合)
赤字の部分は自由に書き換えてください。
<mt:setvar name="counter" value="0">
<mt:CategorySets name="category">
<mt:TopLevelCategories>
<mt:HasParentCategory>
<mt:setvarblock name="all[$counter]"><mt:var name="all[$counter]"> OR <mt:var name="top">/<mt:CategoryLabel></mt:setvarblock>
</mt:HasParentCategory>
<mt:HasNoParentCategory>
<mt:setvar name="counter" op="++">
<mt:CategoryLabel setvar="top">
<mt:setvarblock name="all[$counter]"><mt:var name="top"></mt:setvarblock>
</mt:HasNoParentCategory>
<mt:SubCatsRecurse>
</mt:TopLevelCategories>
</mt:CategorySets>
<mt:setvarblock name="filter"><mt:Var name="all" index="1"> OR <mt:Var name="all" index="2"></mt:setvarblock>
<mt:Contents content_type="products" field:field_category="$filter">
<mt:ContentField content_field="BookTitle"><mt:ContentFieldValue></mt:ContentField>
</mt:Contents>
6.5の解説
CategorySetsタグの中で、次のようなカテゴリ名の一覧を、親カテゴリ単位に配列の変数に取得します。
cat1 OR cat1/cat1-1 OR cat1/cat1-2 OR cat1/cat1-3
取得した配列変数をORで連結して、さきほどと同様、後半のmt:Contentsタグの"field:field_category"オプションの値に設定します。
親カテゴリが3つ以上の場合は、
<mt:setvarblock name="filter"><mt:Var name="all" index="1"> OR <mt:Var name="all" index="2"></mt:setvarblock>
の部分について、赤字で示す、
<mt:setvarblock name="filter"><mt:Var name="all" index="1"> OR <mt:Var name="all" index="2"> OR <mt:Var name="all" index="3"></mt:setvarblock>
のように増やしてください(もうちょっとエレガントな方法はあると思いますが)。