コンテンツデータで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>
のように増やしてください(もうちょっとエレガントな方法はあると思いますが)。
Posted by yujiro このページの先頭に戻る
- Movable Type検索結果画面のMTIncludeタグでファイルを読み込む方法
- Movable Typeの月別コンテンツアーカイブリスト用テンプレート
- MTContentFieldタグの使い方
- Movable Typeでブログ記事一覧をカスタムフィールドでソートする方法
- MTの本文フィールドからimg要素のURLを取得する方法
- MTEntriesタグで指定した数の記事を除外して表示する方法
- Movable Typeのテンプレートタグの中でテンプレートタグを使う方法
- Movable Typeのテンプレートタグをテンプレートで生成する方法
- Movable TypeのMTEntriesタグで特定の複数ブログ記事を出力する方法
- Movable TypeでCSVデータからtable要素を作る方法
- MTIncludeタグのnameモディファイア
- Movable Type(MT)の特殊変数の入れ子
- ブロックタグにelseタグを組み込んで判定する
- Movable Type 5 におけるウェブサイトとブログの複数指定方法
- ウェブサイトとブログでグローバルナビゲーションを共有する
トラックバックURL
コメントする
greeting