MovableType
MTLoopタグでCMS管理されていないテキストの連想配列を作る方法
CMS管理されていないテキスト
MovableType や PowerCMS に、記事やウェブページとしてデータ登録されている値ではなく、テンプレートで管理しているテキストを、MTLoopタグで出力する方法です。
例えば、テンプレートで管理している、外部ページへのリンクを管理する場合に使用できます。
データ登録されている値で、連想配列を作成する方法は、こちらをご参照ください。
サンプルテンプレート(基本)
<mt:SetVarBlock name="push(hash_special_links)" >
title=リンクタイトルを入力します。最初に表示されます。
link=https://example.com/
</mt:SetVarBlock>
<mt:SetVarBlock name="push(hash_special_links)" >
title=参考サイト1 2番目に表示されます。
link=https://cms-note.com/
</mt:SetVarBlock>
<mt:SetVarBlock name="push(hash_special_links)" >
title=参考サイト2 3番目に表示されます。
link=https://cms-note.com/movabletype/
</mt:SetVarBlock>
<mt:Loop name="hash_special_links">
<mt:if name="__first__"><ul></mt:if>
<mt:SetVars><mt:Var name="__value__"></mt:SetVars>
<li><a href="<mt:Var name="link">"><mt:Var name="title"></a></li>
<mt:if name="__last__"></ul></mt:if>
</mt:Loop>
解説
MTSetVarBlock タグの name に push を指定し、ハッシュ値(hash_special_links) に内容を登録します。 サンプルの様に MTSetVarBlock タグを繰り返すことで、ハッシュにも同様の順番で登録されます。
<mt:SetVarBlock name="push(hash_special_links)" >
title=リンクタイトルを入力します。
link=https://example.com/
</mt:SetVarBlock>
出力は、 MTSetVars タグを使用します。MTLoop タグの内部で、MTSetVarBlock タグで追加した内容を展開することで、変数として使用します。 あとは設定した値を、 MTVar タグで出力します。
<mt:Loop name="hash_special_links">
<mt:if name="__first__"><ul></mt:if>
<mt:SetVars><mt:Var name="__value__"></mt:SetVars>
<li><a href="<mt:Var name="link">"><mt:Var name="title"></a></li>
<mt:if name="__last__"></ul></mt:if>
</mt:Loop>
値の展開イメージ です。
<mt:SetVars>
title=リンクタイトルを入力します。
link=https://example.com
</mt:SetVars>
サンプルテンプレート(応用)
基本形では個別にリンクを設定しましたが、外部ページのリンクは同じ値を別々の場所に表示することが常です。同じ値は一元管理してしまいましょう。
<mt:SetVarBlock name="hash_special_links_1">
title=リンクタイトルを入力します。最初に表示されます。
link=https://example.com/
</mt:SetVarBlock>
<mt:SetVarBlock name="hash_special_links_2">
title=参考サイト1。
link=https://cms-note.com/
</mt:SetVarBlock>
<mt:SetVarBlock name="hash_special_links_3">
title=参考サイト2
link=https://cms-note.com/
</mt:SetVarBlock>
<mt:if tag="BlogID" eq="10">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_1">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_3">
<mt:elseif tag="BlogID" eq="20">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_3">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_1">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_2">
</mt:if>
<mt:Loop name="hash_special_links">
<mt:if name="__first__"><ul></mt:if>
<mt:SetVars><mt:Var name="__value__"></mt:SetVars>
<li><a href="<mt:Var name="link">"><mt:Var name="title"></a></li>
<mt:if name="__last__"></ul></mt:if>
</mt:Loop>
解説
MTSetVarBlock タグでリンクごとの内容を定義します。 name にはリンクわかりやすい名前をつけるのが良いです。今回は説明のため数字です。
<mt:SetVarBlock name="hash_special_links_1">
title=リンクタイトルを入力します。最初に表示されます。
link=https://example.com
</mt:SetVarBlock>
外部リンクを表示する条件ごとに、ハッシュ値(hash_special_links) に内容を登録します。
出力は基本形と同じ方法で行います。
<mt:if tag="BlogID" eq="10">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_1">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_3">
<mt:elseif tag="BlogID" eq="20">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_2">
<mt:SetVar name="push(hash_special_links)" value="$hash_special_links_3">
</mt:if>