Under the Bridge

a Picture of the Late Him

タグ名の全取得、配列へセット、生成文字列連結

2008年1月 1日 13:12 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

Movable Type 4.1から使用が可能になると思われる、「タグ名の全取得、配列へセット、生成文字列連結」するサンプル。このサンプルでは、全タグの取得、取得したタグ名データを配列へ格納し、後にForループでカンマ区切り文字に変換するという、「配列、ループ、MTSetVarBlock」の実践的な小規模サンプル。

タグが「タグ1」「タグ2」「タグ3」「タグ4」「タグ5」とある場合、「タグ1,タグ2,タグ3,タグ4,タグ5,」という文字列を生成する。

サンプルコード


<$mt:setvar name="counter" value="0"$>
<MTTags>
<$mt:setvar name="counter" op="++"$>
<MTSetvarBlock name="TagData[$counter]"><$MTTagName$></MTSetvarBlock>
</MTTags>

<MTSetVarBlock name="CreateStrings"><mt:for var="x" from="1" to="$counter"><MTGetVar name="TagData[$x]">,</mt:for></MTSetVarBlock>
<MTGetVar name="CreateStrings">

説明および考察

1行目:counterという名称の変数を0で初期化する。

2行目:MTTagsブロックタグのループ開始。

3行目:counter変数をインクリメントする。

4行目:TagData[]配列へタグ名をセット。配列カッコ内でcounter変数を扱うときは先頭へドルマークを付加する。

5行目:MTTagsブロックタグのループ終了。

6行目:空白で意味は無い。

7行目:Forループですべての配列をGetVarとカンマ付加し、ループの外側SetVarでCreateStrings変数へ代入している。つまりSetvarとForとGetvarの入れ子である。

8行目:CreateStrings変数を出力。

このコードは手抜きをしており、生成されるCreateStrings文字列は最後のカンマが余計である。しかしこの変数を絞込みなどの処理目的で使用するならば、動作不具合が起こらなければこれでイイ。きちんと作るなら6行目辺りでcounter変数を-1デクリメントし、CreateStrings文字列をそのまま生成(タグがひとつ足りない文字列となる。タグ1,タグ2,タグ3,タグ4,)、最後に配列ラストのタグを付加(タグ1,タグ2,タグ3,タグ4,タグ5)すればいい。

願わくば文字列操作(変数に格納された文字列の文字数を数える、左カット、右カット、指定位置からの抜き出しなどなど)が行えればもっと簡単で理にかなったコードとなるが、WEB上にはMTに関するそういう情報もないし、現時点では無理だろう。

ところで、MT4で文字列型の変数をつなげるなどの操作はちょっと違和感が。少し調べた限りでは、数値変数は算術演算が可能であるが、文字列型はGetvar+Setvarでやるのね。

トラックバック(0)

このブログ記事を参照しているブログ一覧: タグ名の全取得、配列へセット、生成文字列連結

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)