記事のアイテムをタグの有無で分ける

MTQに、「記事のアイテムをタグの有無で分けて出力したい」といった内容の質問がありました。
この質問に答えます。

1.考え方

記事のアイテムを出力するには、MTEntryAssetsタグのブロックを使います。
このブロックの中で、個々のアイテムにタグが1つでもあるかどうかで、処理を分けます。

タグがある場合とない場合のそれぞれで、個々のアイテムの出力を配列に保存します。
そして、MTEntryAssetsループの後に、タグがある場合とない場合のそれぞれの配列を出力するようにします。

2.テンプレート

上記の考え方に基づいてテンプレートを組むと、以下のようになります。

<mt:EntryAssets>
  <$mt:SetVar name="tag_flag" value="0"$>
  <mt:AssetTags><$mt:SetVar name="tag_flag" value="1"$></mt:AssetTags>
  <mt:If name="tag_flag">
    <mt:SetVarBlock name="tagged_images" function="push">
      タグ付きの画像の場合の出力
    </mt:SetVarBlock>
  <mt:Else>
    <mt:SetVarBlock name="not_tagged_images" function="push">
      タグなしの画像の場合の出力
    </mt:SetVarBlock>
  </mt:If>
</mt:EntryAssets>
<mt:Loop name="tagged_images">
  <mt:If name="__first__">
    タグ付き画像一覧の先頭に出力する内容
  </mt:If>
    <$mt:Var name="__value__"$>
  <mt:If name="__last__">
    タグ付き画像一覧の最後に出力する内容
  </mt:If>
</mt:Loop>
<mt:Loop name="not_tagged_images">
  <mt:If name="__first__">
    タグなし画像一覧の先頭に出力する内容
  </mt:If>
    <$mt:Var name="__value__"$>
  <mt:If name="__last__">
    タグなし画像一覧の最後に出力する内容
  </mt:If>
</mt:Loop>

2-1.前半

前半のMTEntryAssetsタグのブロックは、記事のアイテムを、タグの有無で分ける部分です。

2行目と3行目で、個々のアイテムにタグがあるかどうかを判断しています。
2行目で変数tag_flagを0にしています。
そして、3行目のMTAssetTagsタグのブロックで、変数tag_flagを1にします。
結果として、アイテムにタグがついていなければtag_flagの値は0のままで、タグが1つでもあれば1になります。

そして、4行目のMTIfタグで、変数tag_flagの値(=タグの有無)で処理を分けます。
それぞれ、tagged_imagesとnot_tagged_imagesという配列変数に、個々のアイテムのマークアップを追加しています。

2-2.後半

後半の2つのMTLoopタグで、タグが付いているアイテムと、ついていないアイテムを、それぞれ順に出力します。
個々のアイテムのマークアップを、tagged_imagesとnot_tagged_imagesという配列変数に代入しましたので、MTLoopタグで配列から1つずつ取り出して出力します。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください