WidgetSetLoopプラグイン

MTOS-DEVメーリングリストで、「『WidgetSetLoop』というテンプレートタグが欲しい」という提案が出ていました。
個人的にもこのタグは欲しいと思ったので、プラグインとして作ってみました。

1.MTOS-DEVメーリングリストでの提案

サイドバー等のウィジェットを管理する機能として、「ウィジェットセット」があります。
また、ウィジェットセットに登録したウィジェットを順次出力するためのタグとして、「MTWidgetSet」があります。

ただ、MTWidgetSetタグは、ウィジェットをただ順番に出力するだけです。
「ウィジェットセット内の先頭のウィジェットのときだけ、何か特別な処理をする」といったことができません。
場合によっては、これでは問題が起こることがあります。

例えば、以下のようにタグを組むとします。

<div class="widgetset">
<$MTWidgetSet name="foo"$>
</div>

もし、ウィジェットセットfooにウィジェットをまったく登録していない場合、上記の部分を再構築すると、空のdiv要素が出力されます。
この場合、スタイルシートでwidgetsetクラスに背景や罫線を設定してあると、背景や罫線だけの空枠が表示されてしまいます。

この他、MTWidgetSetタグでは、以下のようなことを行うことができません。

  • 偶数/奇数番目のウィジェットごとに出力方法を変える(例えば、ウィジェットごとに背景色を変えるなど)
  • 特定のウィジェットのときだけ何か処理をする

2.インストール

WidgetSetLoopプラグインは、以下からダウンロードすることができます。

WidgetSetLoop_1_00.zip

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

ダウンロードしたファイルを解凍すると、「WidgetSetLoop」という名前のフォルダができます。
そのフォルダを、Movable Typeの「plugins」ディレクトリの中にアップロードします。

3.このプラグインで追加されるテンプレートタグ

このプラグインは、提案のページにある仕様に沿って動作するように作りました。
追加されるテンプレートタグは以下の通りです。

3-1.MTWidgetSetLoopタグ

ウィジェットセット内の個々のウィジェットを順に出力するためのブロックタグです。
nameモディファイアで、ウィジェットセットの名前を指定します。

3-2.MTWidgetContentタグ

MTWidgetSetLoopタグのブロックの中で、個々のウィジェットを出力するファンクションタグです。
例えば、<MTWidgetSet name="foo">のタグは、MTWidgetSetLoop/MTWidgetContentタグを使うと、以下のように書くことができます。

<MTWidgetSetLoop name="foo">
<$MTWidgetContent$>
</MTWidgetSetLoop>

3-3.MTWidgetSetLabelタグ

現在処理中のウィジェットセットの名前を出力するファンクションタグです。
例えば、<MTWidgetSetLoop name="foo">~</MTWidgetSetLoop>のブロックの中では、MTWidgetSetLabelタグの出力は「foo」になります。

3-4.MTWidgetLabelタグ

現在処理中のウィジェットの名前を出力するファンクションタグです。

例えば、ウィジェットセットfooに、「月別アーカイブ」「カテゴリアーカイブ」の2つのウィジェットを登録しているとします。
また、以下のようにタグを組むとします。

<dl>
<MTWidgetSetLoop name="foo">
<dt><$MTWidgetLabel$></dt>
<dd><$MTWidgetContent$></dd>
</MTWidgetSetLoop>
</dl>

この出力は以下のようになります。

<dl>
<dt>月別アーカイブ</dt>
<dd>「月別アーカイブ」ウィジェットの内容</dd>
<dt>カテゴリアーカイブ</dt>
<dd>「カテゴリアーカイブ」ウィジェットの内容</dd>
</dl>

3-5.MTWidgetSetLoopHeader/MTWidgetSetLoopFooterタグ

ウィジェットセット内の先頭/最後のウィジェットかどうかを判断するブロックタグです。
例えば、以下のようにタグを組むと、ウィジェットセットの内容が空の場合、ウィジェットセットの前後のdivタグが出力されなくなり、空のdiv要素ができなくなります。

<MTWidgetSetLoop name="foo">
<MTWidgetSetLoopHeader><div class="widgetset"></MTWidgetSetLoopHeader>
<$MTWidgetContent$>
<MTWidgetSetLoopFooter></div></MTWidgetSetLoopFooter>
</MTWidgetSetLoop>

4.MTWidgetSetLoopタグのブロックの中で使える変数

MTWidgetSetLoopタグのブロックの中では、他の繰り返し系ブロックタグと同様に、「__first__」「__last__」「__odd__」「__even__」「__counter__」の各変数を使うことができます。
また、提案には「__size__」という変数も出ていましたので、その変数も使えるようにしています。
__size__変数は、ウィジェットセットに含まれるウィジェットの数を表します。

5.ライセンス

このプラグインはMITライセンスで公開します。
MT商用版およびMTOSでお使いいただくことができます。