エンジニアブログ

エンジニアブログ
MT技術情報

MT4でMTタグのアトリビュート内で更にタグを使用する

いたはし 2007年09月05日

皆さんこんばんは。板橋です。

MT4.22ではsetvarモディファイアでさらに簡単にできるようになりました!

Movable Typeを使っていると、MTタグのアトリビュート(属性値)の中で
更にMTタグを使用したい時があります。

例えば、同じカテゴリーに属するエントリーの一覧を出したいとき。
<MTEntries category="<$MTEntryCategory$>">
・・・
</MTEntries>
と書くことができればすぐに完了するのですが、
Movable Type 3.xの標準の機能ではそれが出来ません。

Movable Type 3.xでは、MTTagInvoke(*1)というプラグインを導入し、拡張してようやく実装ができました。

しかし、他でも言及されている通り、MT4にメジャーバージョンアップするに伴って、今まで汎用的に使用されていたいくつかのプラグインが使用できなくなります。
MTTagInvokeもそのひとつです。(*2)

(※弊社配布プラグインに関しては、こちらのエントリーで紹介していますので、
 あわせてご参照ください。
 →Movable Type4 既存プラグイン動作検証

MovableType4では、SetVar、GetVarを始めとするVarタグが強化されました。
このタグは、MTSetVarタグで値を一時保存し、
MTVar、あるいはMTGetVarタグを使ってその値を任意の場所に呼び出すことができます。

記述例

<$MTSetVar name="setValue" value="あああ"$>
<p><$MTGetVar name="setValue"$></p>

上記タグの表示例

<p>あああ</p>

(※SetVar自体は表示されません)

では、以下のような要件をSetVarタグを使って実装してみましょう。

要件
エントリーアーカイブで、そのエントリーと同じカテゴリーに属するエントリーを15件出したい。

TagInvokeでの記述例

<MTTagInvoke name="MTEntries">
<MTTagInvokeAttribute name="category"><$MTEntryCategory$></MTTagInvokeAttribute>
<MTTagInvokeAttribute name="lastn">15</MTTagInvokeAttribute> <MTTagInvokeContents>
<h2><$MTEntryTitle$></h2>
<p><$MTEntryExcerpt$></p>
</MTTagInvokeContents>
</MTTagInvoke>

3.xまでは上記タグで対応していましたが、
4.0からはMTSetVarBlockにて同様の処理が可能になります。
下記にその方法を記載します。

SetVar記述例

<MTSetVarBlock name="catList"><$MTEntryCategory$></MTSetVarBlock>
<MTEntries category="$catList" lastn="15">
<h2><$MTEntryTitle$></h2>
<p><$MTEntryExcerpt$></p>
</MTEntries>

必要なのは、これだけです。
内に格納したい値(この場合はEntryCategory)を記述します。SetVarBlockタグは、まず処理を行ってから出てきた値を格納してくれます。

この場合ですと、エントリーが属するカテゴリーのラベルに変換されたMTEntryCategoryが格納されます。

呼び出しの部分でGetVarタグを利用していないのは、
MTタグのアトリビュート内でMTタグが利用できないためです。
ですので、$catListという変数名で呼び出しをかけます。
(SetVarで指定したnameは、変数名になります)

今回はTagInvokeとの置き換えという形で紹介させていただきましたが、
このようにMT4のデフォルトのタグを使うことで、
3.x以前のプラグインの機能をカバーすることができるようになりました。
特にSetVar、GetVar(Var)タグは非常に利用頻度が高いため、使い方を覚えておくと良いでしょう。

今回紹介できなかったSetVarTemplateタグは、
下記エントリーで紹介していますので、こちらも併せてご覧ください。
MTSetVarTemplateタグについて


*1 プラグイン固有のタグを組み合わせることで、
   タグの中でタグを利用することなどが出来る。
*2 2007年8月28日18時現在。