melodicant

特定のタグ付きアイテムの有無による条件分岐方法

0

下記の問題で皆さんのお知恵を拝借できればと思います。

あるエントリーに複数個のアイテムがあり、その一部にタグを付けて、タグなしアイテムとタグ付きアイテム(たとえばsubitemなど)を分離して表示したいと考えています。

タグなしアイテムは必ず存在するのでmt:EntryAssetsでsubitemタグ付きアイテムを除外して出力できます。一方タグ付きアイテムはエントリーによって存在しない場合もあるため、ある場合のみ表示するようにしたいのですが、HTMLタグとセットでの表示・非表示切り替えが必要なため、単純な出力ではなくconditionalな条件分岐が必要と考えます。

判定するならばアイテムに設定したタグ(subitem)の有無で、と考えるのですが、mt:Ifでのタグ付き記事アイテムからのタグ指定や、mt:EntryAssetsの文脈でアイテムのタグを取得することができないようです(該当するファンクションタグも見当たらず)。

mt:AssetIfTaggedはmt:Assetsの文脈内とする必要がありそうですし、仮にできてもアイテム数が非常に多いので、保存のたびに全アイテムにスキャンがかかるのは問題です。mt:EntryAssetsの文脈内で、特定のタグを持ったアイテムがある場合のみ、そのタグで条件分岐できる方法はないでしょうか。

どうしても難しい場合は、mt:AssetFilenameでファイル名に特定の文字列が含まれる場合で判定する方法も検討しています(条件判定のみ、動作は確認できています)。

返信(2)

| 返信する
  • >melodicantさん
    こんにちは。

    ご質問の件について記事を書きました。

    http://www.h-fj.com/blog/archives/2017/05/22-234050.php

  • 壱さん、ご助言ありがとうございます。
    早速、上記記事のコードそのままで動作確認したところ、
    判定や出力自体は問題ありませんでした。


    しかし当方の問題設定に大きなヌケ落ちがありました。
    ご提案いただいたコードは、EntryAssets中で「タグ自体の有無」により
    判定するものでしたが、実際の条件は、条件判定したいタグ以外の
    タグが設定されている場合もあるため、タグ自体の有無では判定できず、
    「特定のタグの有無」で判定しなければならない条件でした。


    タグそのものの有無を判定条件とすると、判定したい
    タグ以外のタグが設定されている場合にもヒットしてしまい、
    そのままでは利用できませんでした。


    そこで、タグの有無での条件判定部分をカットし、冒頭の
    mt:EntryAseetにtagモディファイアで判定したい任意のタグを
    指定した上でアイテム出力部分を変数とし、その条件でループさせることで、
    任意のタグ付き画像のみを出力でき、その条件下のみ
    付帯ブロックを表示する(合致しない場合は表示しない)
    ことができました。

    <mt:EntryAssets tag="判定したい任意のタグ">
    <mt:SetVarBlock name="tagged_images" function="push">
    ループさせたいアイテム
    </mt:SetVarBlock>
    </mt:EntryAssets>
    
    


    <mt:Loop name="tagged_images">
    <mt:If name="__first__">ループ外ブロック前部</mt:If>
    <$mt:Var name="__value__"$><mt:Ignore>ループ本体</mt:Ignore>
    <mt:If name="__last__">ループ外ブロック後部</mt:If>
    </mt:Loop>


    mt:EntryAssetsでのtagモディファイアによる指定では、
    単にアイテムを出力するかどうかしかできず、付帯ブロックごとの
    表示・非表示がコントロールできませんでしたが、
    これで問題なさそうです。


    ロスもあるかもしれませんが、意図通りに出力できるように
    なりました。ありがとうございます。

返信する


カテゴリグループ

フォーラムカテゴリー

21 76

最新のトピック: 公開終了日の取り消し (2013年10月18日 gsk)

262 784

最新のトピック: MTAppjQueryについて (2017年4月21日 natsu)

373 1058

最新のトピック: Windows Live Writerに変わるものって (2017年4月28日 narizy007)

OpenID対応しています OpenIDについて