MovableType

MTIFタグで条件を満たす場合のみ表示させる方法

ページコンテンツには「必須」と「非必須」項目がある。

指定フィールドのいずれかに入力がある場合に「表示する」や、

全ての指定フィールドに入力がある場合に「表示する」といった処理を簡単に書く方法です。

例えば、見出しと本文のフィールドのどちらかに入力がある場合、見出しと本文のフィールド両方に入力がある場合を判定したい場合などに使用します。

サンプルテンプレート

MTSetVarBlockタグ の値に、対象フィールドに入力がある場合は「1」が出力される様に設定します。

<mt:ignore>MT7</mt:ignore>
<mt:SetVarBlock name="onflag">
    <mt:ContentField content_field="見出し">1</mt:ContentField>
    <mt:ContentField content_field="本文">1</mt:ContentField>
</mt:SetVarBlock>

<mt:ignore>MT6</mt:ignore>
<mt:SetVarBlock name="onflag">
    <mt:if tag="EntryTitle">1</mt:if>
    <mt:if tag="EntryBody">1</mt:if>
</mt:SetVarBlock>

見出しと本文のフィールドのどちらかに入力がある場合

MTIFタグ のlikeモディファイアで、MTSetVarBlockタグの値に「1」が含まれる場合を判定条件に設定します。

<mt:if name="onflag" like="1">
    表示する内容
</mt:if>

タイトルを名前、本文をプロフィール文としている場合など、どちらかが未入力でも成り立つコンテンツの場合に使用します。

<mt:if name="onflag" like="1">
    <div>
        <h2>プロフィール</h2>
        <div>
            <h3>タイトル(名前)</h3>
            <p>本文(プロフィール文)</p>
        </div>
    </div>
</mt:if>

見出しと本文のフィールド両方に入力がある場合

MTIFタグ のtestモディファイアで、MTSetVarBlockタグの値に「1」が含まれる数を判定条件に設定します。

「含まれるフィールドの数」とある箇所に、見出し、本文のフィールドの数「2」を設定します。

<mt:If test="$onflag = $onflag =~ s/1//g; $onflag == 含まれるフィールドの数">
    表示する内容
</mt:if>

タイトルを企業名、本文を事業内容としている場合など、全て登録されて成り立つコンテンツの場合に使用します。

<mt:If test="$onflag = $onflag =~ s/1//g; $onflag == 2">
    <div>
        <h2>パートナー会社</h2>
        <div>
            <h3>タイトル(企業名)</h3>
            <p>本文(事業内容)</p>
        </div>
    </div>
</mt:if>

番外編:見出しと本文のフィールド両方とキーワードに入力がある場合

MTIFタグ のtestモディファイアで、MTSetVarBlockタグの値に「1」と「2」が含まれる数を判定条件に設定します。

「含まれるフィールドの数1」とある箇所に、見出し、本文のフィールドから出力される「1」の数「2」を設定します。

「含まれるフィールドの数2」とある箇所に、見出し、本文のフィールドから出力される「2」の数「1」を設定します。

ただ、条件が複雑になると可読性が低下するので、あまりおすすめできません。

<mt:SetVarBlock name="onflag">
    <mt:ContentField content_field="見出し">1</mt:ContentField>
    <mt:ContentField content_field="本文">1</mt:ContentField>
    <mt:ContentField content_field="キーワード">2</mt:ContentField>
</mt:SetVarBlock>

<mt:If test="
    $con1 = $onflag =~ s/1//g;
    $con2 = $onflag =~ s/2//g;
    $con1 == 含まれるフィールドの数1 && $con2 == 含まれるフィールドの数2
">
    表示する内容
</mt:if>

このような場合は以下の様に書き換え、ページコンテンツの「必須」と「非必須」項目を切り分けのために使用するのが良いと思います。

<mt:If test="$onflag = $onflag =~ s/1//g;$onflag == 2">
    <div>
        <h2>パートナー会社</h2>
        <div>
            <h3>タイトル(企業名)</h3>
            <p>本文(事業内容)</p>
            <mt:ContentField content_field="キーワード">
                表示する内容
            </mt:ContentField>
        </div>
    </div>
</mt:if>

あとがき

条件のフィールドが少ない場合は、フィールドの入力判定で良いかもしれませんが、改修、引き継ぎを考えると、上記の様な判定の方が、仕様が分かりやすく「表示条件っぽいのがある」と気づかせる書き方かなと思います。

見出しと本文のフィールド両方に入力がある場合

<mt:ContentField content_field="見出し">
<mt:ContentField content_field="本文">
    表示する条件
</mt:ContentField>
</mt:ContentField>