案件のバグ対応しながらで「あれ?」って気づいてしまったというか初歩的なミスで「あ〜そうだよね」ってなってしまった。凡ミスというか普通の感覚で条件分岐使ってましたという内容になります。
以前、MTAppjQueryのJSONTableの記事に関して投稿したのですが、既定値に入力値がなかった時の条件分岐の仕方についてメモしておきたいと思いました。
値とは関係ない外側のHTMLが、値がなくても出力されていることに気づいたからことが発端です。※なんで出力されているの?
例えば、hogeというtextareaの種類のカスタムフィールドを作った時に以下のような条件分岐ができると思います。
<mt:If tag="hoge">
<div class="hoge_box">
◯◯の機能: <mt:hoge>
</div>
</mt:If>
通常カスタムフィールドはtagなの判定で動作するのですが、前回紹介した既定値にJSONを入れている状態だとtagとして値がすでに入っているため<mt:If tag="hoge">
は処理が抜けて外側のHTMLは条件にマッチしているため出力されてしまいます。
※なんで値入れてないのに動いているの?って思ったら既定値入っているからだ!と気づきました。。( ゚д゚)ハッ!そりゃそうだよね。<mt:If tag="hoge">
で外を囲ってました。初歩的すぎる。。
今回の場合は、既定値で◯◯件すでにJSONで値をセットした状態で、MTAppAssetFieldを使っての処理だったのでアップロードしない記事もあったりしていたので、解決方法を考えた結果valueの値を比較の対象にした形で動かせば良いかなって思い実装してみました。
前回の【Memo】MTタグでMTAppjQueryのJSONTableに孫オブジェクトがある場合の取得方法の記事で使ったソースを少し見直してみた結果がこちら
-
<mt:If tag="hoge">
の変わりに<mt:If name="ImagePathHash">
を条件対象にしておく値があったら出力したいHTMLはここの中に組み込んでおく。
<mt:Loop name="items">
<mt:Var name="items" index="$items_index" setvar="item">
<mt:Var name="item" key="imagePath" setvar="ImagePathHash"> // itemのimagePathを変数に格納
<mt:If name="ImagePathHash">
<mt:Var name="ImagePathHash" json_decode="1" setvar="jsonImagePath"> // imagePathに対してjson_decodeを定義し変数に格納
<mt:Var name="jsonImagePath" key="url" setvar="ImagePath_url"> // キーのurlを取得し変数格納
</mt:If>
<mt:If name="ImagePathHash"> // ImagePathHashを分岐に加えておく。フィールドの値がなかった場合は以下のHTMLは出力されません。
// メインのHTMLループ部分
<mt:If name="__first__">
<h1>タイトルが入ります。</h1>
<ul>
</mt:If>
<li>
<img src="<mt:Var name="ImagePath_url" />" alt="<mt:Var name="item" key="description">"/>
</li>
<mt:If name="__last__">
</ul>
</mt:If>
</mt:If>
<mt:SetVar name="items_index" op="++"> // items_indexの値をインクリメント
</mt:Loop>
結論として、カスタムフィールドに既定値にすでに値がある場合は<mt:If tag="◯◯">
って一致して動いちゃうよね?って話になるのですが、MTAppJSONTableを使ったケースで尚且つ既定値にJSONがある場合も同じで<mt:If tag="◯◯">
って処理通るようですね。
当たり前なんですがテーブルにセルに値がないから、そこの条件にマッチしないから通らないのが正常なんだと思い錯覚してしまいました。あなたは正常だったのですよ。正常ではないのは私でした。すみませんm(_ _)m
既定値あったらtag動きます。私自身がバグでございました(思い込みってすごいな)
大したことじゃないのですが、時間がたつと忘れる自分のためのメモにしようと思いました。