re:MT。

ネタ元:MT。

今度はJunnamaさんよりもっと変態的(MT的な意味で)に書けとのお題が。

問題

5×5のテーブルを二つ作ってセルの背景色で「MT」って見えるようにするってのどうでしょう。

回答

今度はテンプレートを分けてみました。

<mt:setvar name="m" value="1000111011111111010110001">
<mt:setvar name="t" value="1111100100001000010000100">
	
<MTInclude module="makeTable" char="$m">
<MTInclude module="makeTable" char="$t">

makeTableモジュール

<mt:for from="1" to="25">
<mt:if name="__first__"><table></mt:if>
<mt:if test="$__index__%5 == 1"><tr></mt:if>
<mt:getvar name="char" regex_replace="/^([01]{1})[01]+$/","$1" setvar="num">
<td<mt:if name="num" eq="1"> style="background:red"</mt:if>><mt:getvar name="patrn">T</td>
<mt:getvar name="char" regex_replace="/^[01]{1}([01]+)$/","$1" setvar="char">
<mt:if test="$__index__%5 == 0"></tr></mt:if>
<mt:if name="__last__"></table></mt:if>
</mt:for>

出力サンプル

解説

まずは文字データをどのように保持するか。
色を塗るか塗らないかなので、ビット型(0と1)で保存してパーサーさえ用意しておけば、今後文字の種類が増加してもビットデータを追加するだけですみます。

<mt:setvar name="m" value="1000111011111111010110001">
<mt:setvar name="t" value="1111100100001000010000100">

パーサーなのですが、MTテンプレートに関数なんてないのでモジュールで代用。

モジュール内で利用する変数に文字データを送りこめば生成してくれるように作成。

<MTInclude module="makeTable" char="$m">
<MTInclude module="makeTable" char="$t">

makeTableモジュール内では、まずは単純にテーブルの作成。

<mt:for from="1" to="25">
<mt:if name="__first__"><table></mt:if>
<mt:if test="$__index__%5 == 1"><tr></mt:if>
	
<mt:if test="$__index__%5 == 0"></tr></mt:if>
<mt:if name="__last__"></table></mt:if>
</mt:for>

配色の付け方は文字データ$charから1文字づつ取り出して、1の場合色を付ける。

色を付けたら$charは最初の一文字を削除したものを次のループに渡します。

<mt:getvar name="char" regex_replace="/^([01]{1})[01]+$/","$1" setvar="num">
<td<mt:if name="num" eq="1"> style="background:red"</mt:if>><mt:getvar name="patrn">T</td>
<mt:getvar name="char" regex_replace="/^[01]{1}([01]+)$/","$1" setvar="char">

MTでここまでやれば十分変態じゃないかな。

関連エントリー

re:NabeAzzテンプレート問題・パート2
MTでopモディファイアを利用して複雑なレイアウトを行う
Movable TypeでSEO対策-Feed編-
>Movable Typeの再構築 高速化いろいろ
MTのカテゴリー操作 色々

スポンサードリンク

«re:NabeAzzテンプレート問題・パート2 | メイン | jQueryを使ったサンプルコード»