Movable Type のテンプレートタグで配列を利用する機会はあまりないかもしれませんが、例えばカスタムフィールドを使って追加したテキスト入力欄の内容をカンマで区切って配列として格納しておき、MTFor タグでループしてひとつずつ取り出せば、プルダウンメニューが作れたりします。個人的には配列を使うことってほとんどないのでノーマークだったのですが、このくらいできるのかな?と思って調べてみたら、どうもそうはなっていないようなので作りました。自分自身で使う機会があるかどうかわかりませんが、たとえば EC サイトで、商品の色などを選択できるプルダウンメニューを作る、といった目的には役立つかもしれません。
MTSetArray ファンクションタグを使用できるようになります。MTSetArray ファンクションファグでは、MTIfNonEmpty や MTIfNonZero ファンクションタグのように、tag モディファイアで値を取得したいタグの名前を指定します。そして tag モディファイアで指定された値を sep モディファイアで指定した文字で値を区切って配列を作成、name モディファイアで指定した名前の配列に格納する、という動作をします。格納された配列からは、MTFor などのブロックタグを使うことで、ひとつずつ値を取り出すことができます。
たとえば、あるブログにブログ記事が二つ投稿されていて、<$MTEntryData$> というファンクションタグで値を取り出せるカスタムフィールドに、それぞれ英語表記の曜日と日本語表記の曜日がカンマ区切りで入力されているとします。すると、以下のようなテンプレートタグを書くことで、曜日をプルダウンとして出力することができます。
<mt:entries>
<h1><$mt:entrytitle$></h1>
<$mt:setvar name="week" value=""$>
<$mt:setarray tag="EntryData" name="week" sep=","$>
<mt:for var="x" from="0" to="6">
<mt:if name="__first__">
<select>
</mt:if>
<option value="<$mt:getvar name="week[$x]"$>"><$mt:getvar name="week[$x]"$></option>
<mt:if name="__last__">
</select>
</mt:if>
</mt:for>
</mt:entries>
上記のようなテンプレートタグの場合、以下のように出力されます。
SetArray プラグインを使った出力例
Movable Type ver. 4.0 以降。ver. 4.2 でも動作確認してあります。ver 4.2 いいよーみんなー
通常のプラグインと同様に、解凍してできた SetArray フォルダを plugins ディレクトリ内にそのままアップロードしてください。正しくアップロードできていれば、システム・メニューのプラグイン設定に SetArray プラグインが表示されます。
値を区切り、配列に格納するファンクションタグです。モディファイア指定できるもののうち、基本的なものは以下の三つです。
また、SetVar ファンクションタグなどと同じように、function モディファイアが使用できます。既存の変数が存在する場合のためのモディファイアです。
CSSNite で CHEEBOW さんが 「(プログラミングはモテないけど)プラグインはモテるかもしれないね」っておっしゃってたので作ってみました。でも作ってる途中でやっぱりモテない気がしてきました というか作るものによるなって思いました
基本的にご利用は無償かつ自己責任ですが、継続的な開発、更新のため、よろしければドネーションをご検討ください。以下のボタンから、PayPal を通じて行うことができます。
また、フィードバックもぜひ kenmin.okayama@gmail.com までお送りください。コメントでもかまいません。
Comments