BLOG

Go to top


ファンクションタグの内容を区切って配列に格納する SetArray プラグイン

June 8, 2008 11:50 PM

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 プラグインを使った出力例SetArray プラグインを使った出力例

動作環境

Movable Type ver. 4.0 以降。ver. 4.2 でも動作確認してあります。ver 4.2 いいよーみんなー

ダウンロード

SetArray プラグイン(約 2.5 kb)

インストール

通常のプラグインと同様に、解凍してできた SetArray フォルダを plugins ディレクトリ内にそのままアップロードしてください。正しくアップロードできていれば、システム・メニューのプラグイン設定に SetArray プラグインが表示されます。

使用できるタグとモディファイア

MTSetArray

値を区切り、配列に格納するファンクションタグです。モディファイア指定できるもののうち、基本的なものは以下の三つです。

tag
値を取得したいファンクションタグを指定します。 例) tag="EntryData"
sep
区切り文字を指定します。tag モディファイアの指定によって取得された値は、sep モディファイアで指定された文字によって分割されます。例) sep=","
name
値を格納したい配列の名前を指定します。 例) name="week"

また、SetVar ファンクションタグなどと同じように、function モディファイアが使用できます。既存の変数が存在する場合のためのモディファイアです。

function="push"
配列変数の一番上(または一番最後)に新しい値を追加します。
function="unshift"
配列変数の一番下(または一番最初)に新しい値を追加します。
function="undef"
変数をクリアします。

補足

CSSNiteCHEEBOW さんが 「(プログラミングはモテないけど)プラグインはモテるかもしれないね」っておっしゃってたので作ってみました。でも作ってる途中でやっぱりモテない気がしてきました というか作るものによるなって思いました

お願い

基本的にご利用は無償かつ自己責任ですが、継続的な開発、更新のため、よろしければドネーションをご検討ください。以下のボタンから、PayPal を通じて行うことができます。

また、フィードバックもぜひ kenmin.okayama@gmail.com までお送りください。コメントでもかまいません。

Comments


Contact me

Copyright © 2005 - 2017 okayama All rights reserved.