TOP
>
Movable Type
>
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のカテゴリー操作 色々