コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグ

コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグ

Posted at January 17,2022 11:55 PM
Tag:[MovableType]

コンテンツデータで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>

のように増やしてください(もうちょっとエレガントな方法はあると思いますが)。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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