[MT]変数予約いろいろ

投稿者: | 2016年3月2日

MT仕事で必要となってきたのが、変数のセット。
この分岐を理解することが、複雑な分岐がある程度クリアできてくる。

まずは変数をセットする構文。
大体2種類があるがどれも同じ命令となる。
例えば、mt:EntryIDをentry_numに入れる方法。


<MTSetVarBlock name="entry_num"><mt:EntryID></MTSetVarBlock>

<mt:EntryID setvar="entry_num">

例えば、記事のエントリーIDが999の場合は、この「999」がentry_numに収められる。
2番目のはmt:EntryIDを直で書いているように見えるが、変数に入れられるので表示はされない。

そして、entry_numに入った値を表示する方法は、Getvarを使う。


<mt:GetVar name="entry_num">

しかし、この値をMTタグ内で使用する際は、getvarでは対応できないので、「$」で呼び出すことになる。


<mt:Entries id="$entryid">
<mt:EntryTitle>
</Entries>

mt:if内では、nameに入れて、その値をモディファイアと比較することで、分岐を行える。
下記の内容だと、エントリーIDが999の場合、1000の場合、それ以外の場合、という分岐の内容になる。


<mt:If name="entry_num" eq="999">
<p>私はゾウを愛しています</p>
<mt:ElseIf eq="1000">
<p>私はゾウより、シロクマを愛しています</p>
<mt:Else>
<p>私はゾウもシロクマも愛していないのです</p>
</mt:If>


これを利用して、インデックステンプレートかカテゴリーテンプレートか、それとも記事テンプレートか・・・というような判別にも使える。各テンプレートの1行目などに仕込んでおくと超便利。下記の物はサンプルであるので、独自に名前を付けたり、インデックステンプレートが複数あるから名前を変えるなどもOK。


<$MTSetVar name="main_index" value="1"$>
<$MTSetVar name="category_index" value="1"$>
<$MTSetVar name="entry_archive" value="1"$>
<$MTSetVar name="page_archive" value="1"$>

そしてこれを分岐させる。


<mt:If name="main_index">
トップの時
<mt:ElseIf name="archive_index">
アーカイブ用インデックスの時
<mt:ElseIf name="entry_archive">
エントリーの時
<mt:ElseIf name="page_archive">
ウェブページの時
<mt:Elseif name="category_archive">
カテゴリの時
<mt:ElseIf name="datebased_archive">
月や年アーカイブの時
<mt:else>
その他
</mt:If>

MTの分岐もいろいろ面倒だが、分かりやすいと言えば分かりやすい。

追記。ループの回数でもいろいろできる模様。
例えば、記事を3個出すが、それぞれdivのクラスが違う場合とかに使える。



<MTEntries lastn="3">

<mt:If name="__counter__" eq="1">
            <div class="box1">
<mt:elseIf name="__counter__" eq="2">
            <div class="box2">
<mt:elseIf name="__counter__" eq="3">
            <div class="box3">
<mt:Else>           
</mt:If>

  <$mt:Include module="ブログ記事概要"$>
  </div>
</MTEntries>

incrementを使うことで増加する数値にも対応できるらしい。それについてはまだ必要ないかもしれないが。
これらで使える特殊変数はこんな物がある。

__first__
ループ出力の最初である場合 true (1) となります。

__last__
ループ出力の最後である場合 ture (1) となります。

__odd__
ループ出力の奇数回目の場合 ture (1) となります。

__even__
ループ出力の偶数回目の場合 ture (1) となります。

__index__
ループのインデックスを格納します。

__counter__
ループした回数を格納します。

コメントを残す

メールアドレスが公開されることはありません。