MovableType

MTLoopタグでCMS管理されていないテキストの連想配列を作る方法

CMS管理されていないテキスト

MovableType や PowerCMS に、記事やウェブページとしてデータ登録されている値ではなく、テンプレートで管理しているテキストを、MTLoopタグで出力する方法です。

例えば、テンプレートで管理している、外部ページへのリンクを管理する場合に使用できます。

データ登録されている値で、連想配列を作成する方法は、こちらをご参照ください。

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>