45式::雑記
45式::雑記は、日々の事を記してないから日記ではなく雑記です。

条件分岐タグによる真偽判定の結果一覧表

コメント
0件
トラックバック
0件

小粋空間さんの記事MTIfNonEmptyタグは、「MTUnlessタグ+tagモディファイア」で置き換えられますという文章を見つけました。(現在は修正されています)

その間違いを指摘した後しばらくして、「もしも違ったらどうしよう」と不安になったので検証、ついでに一覧表を作ってみました。

条件分岐タグ

検証を行ったのは数あるMTの条件分岐タグから、汎用的に使える次の四つです。

表にまとめたのは、タグあるいは変数の値の有無を判定した場合の真偽結果です。
変数のテストはMovableType4.261で次のソースを実行して行いました。
MovableType.jpに載っていないだけで、MTIfNonEmptyMTIfNonZeroタグは変数に対する判定も行えます。

<MTSetHashVar name="hoge">
	<$MTSetVar name="empty"  value=""$>
	<$MTSetVar name="minus"  value="-1"$>
	<$MTSetVar name="zero"   value="0"$>
	<$MTSetVar name="plus"   value="1"$>
	<$MTSetVar name="string" value="string"$>
</MTSetHashVar>

<MTLoop name="hoge" sort_by="value">
変数の値    :<$MTGetVar    name="__value__"$>
MTIf        :<MTIf         name="__value__">○<MTElse>×</MTIf>
MTIfNonEmpty:<MTIfNonEmpty name="__value__">○<MTElse>×</MTIfNonEmpty>
MTIfNonZero :<MTIfNonZero  name="__value__">○<MTElse>×</MTIfNonZero>
MTUnless    :<MTUnless     name="__value__">○<MTElse>×</MTUnless>
</MTLoop>

値の有無だけを判定するのでeqをなどの比較演算については扱いません。

タグのテストは色々な方法があります。
ただ、負の数字を格納したタグが見つかりませんでしたので、入力欄に-1を記述する事でタグの値を用意しました。

タグの値    :<$MTBlogName$>
MTIf        :<MTIf         tag="BlogName">○<MTElse>×</MTIf>
MTIfNonEmpty:<MTIfNonEmpty tag="BlogName">○<MTElse>×</MTIfNonEmpty>
MTIfNonZero :<MTIfNonZero  tag="BlogName">○<MTElse>×</MTIfNonZero>
MTUnless    :<MTUnless     tag="BlogName">○<MTElse>×</MTUnless>

真偽判定の結果一覧表

Trueが真判定、Falseが偽判定になります。
タグの場合も変数の場合も結果が同じだった為、区別せずにまとめました。

条件分岐タグの真偽判定
MTタグ タグ/変数の値
-1 0 1 文字列
MTUnless True False True False False
MTIf False True False True True
MTIfNonEmpty False True True True True
MTIfNonZero False True False True True

わかりやすくするため、MTUnlessタグとMTIfタグを隣にしてみました。

注目して欲しいのはMTIfNonZeroタグによる空判定の結果です。
MTIfNonEmptyタグはその名の通り、空と空以外を区別します。
ところがMTIfNonZeroタグは00以外を区別、とはなりません。

MTIfNonZeroタグは非推奨タグ

MTIfNonZeroタグの判定結果についてSixApartへフィードバックを送った所、仕様だという返事を頂きました。

ご報告いただいたMTIfNonZeroの動作は仕様となります。
ご記述のようなご利用の際は、MTIfタグをご利用下さい。

どうぞよろしくお願いいたします。

--
Movable Type 品質保証チーム

MTIfNonZeroタグで値が空の変数を判定した場合、偽判定されます。
MTIfNonEmptyタグでは値が"0"と""が区別される事ので、MTIfNonZeroタグも同様に逆の判定結果がでると思いました。

(中略)

これは不具合ではなく仕様なのでしょうか。

MTIfNonZeroタグの意義はどこに……えっ! MovableType.jpのタグリファレンスが更新されました。

このタグは非推奨です。mt:If タグを利用してください。以下のように記載することで、同様の挙動となります。

フィードバックから一日で更新とは仕事が早いですな。
さらばMTIfNonZeroタグ。
MTIfNonZeroタグからMTIfタグへの乗り換えはお早めに。

コメント[0]

コメントはまだありません。

コメント投稿フォーム

コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。

コメント投稿フォーム

トラックバック[0]

トラックバックはまだありません。

カテゴリ
アーカイブ
ヘルプ
Feed

フィードとは