re:NabeAzzテンプレート問題・パート2

ネタ元:NabeAzzテンプレート問題・パート2

素敵に変態(MT的な意味で)なネタなのでチャレンジしてみました。

問題

回答

<mt:for from="1" to="200">
<mt:if name="__first__"><table></mt:if>
<mt:if test="$__index__%10 == 1"><tr></mt:if>
<td<mt:if test="(($__index__-1)/10+$__index__%10)%2 == 1"> style="background:red"</mt:if>>
<mt:setvar name="num" value="$__index__">
<mt:if test="$__index__%3 == 0"><mt:getvar name="num" regex_replace="/^(.+)$/","<b>$1</b>" setvar="num"></mt:if>
<mt:if name="__index__" like="3"><mt:getvar name="num" regex_replace="/^(.+)$/","<u>$1</u>" setvar="num"></mt:if>
<mt:if test="$__index__%5 == 0"><mt:getvar name="num" regex_replace="/^(.+)$/","<i>$1</i>" setvar="num"></mt:if>
<mt:if name="__index__" like="5"><mt:getvar name="num" regex_replace="/^(.+)$/","<s>$1</s>" setvar="num"></mt:if>
<mt:getvar name="num">
</td>
<mt:if test="$__index__%10 == 0"></tr></mt:if>
<mt:if name="__last__"></table></mt:if>
</mt:for>

解説

まず、1から200の数字を出力するということでMTForを使い200回のループを回します。

<mt:for from="1" to="200">
	
</mt:for>

次に「1行あたり10列のテーブルにして出力」します。

最初にtable要素の開始タグと最後にtable要素の閉じタグを出力。

現在の数値(__index__)に10割って1あまる時にtr要素の開始タグを出力。
現在の数値(__index__)に10割って0あまる時(つまり割り切れるとき)にtr要素の終了タグを出力。

td要素は毎回出力します。

これでテーブルは完成。

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

次にテーブルの個々のセルの背景に色を付けて、市松模様になるようにするとのことで、

1の位と10足した値が奇数(もしくは偶数)のときに色を指定すればよい。

と、ここで少しはまったのですが10とか20などの1の位が0の時だけすこし法則が異なります。

1行目が10の位が0、2行目が10の位が1という具合に法則性を持たすには、現在の数値から1引いたものを基準値として計算します。

($__index__-1)/10で10の位の値、正確には10の位以上の数値なんですが奇数の判定なので100の位は気にしなくて大丈夫。

$__index__%10で1の位の値。

それらを足したものを2で割ってあまりが1の時だけ背景色を出力します。

<td<mt:if test="(($__index__-1)/10+$__index__%10)%2 == 1"> style="background:red"</mt:if>>

次に3で割り切れる数(例:6)をbタグで囲みます。

ループ変数($__index__)のままだと加工ができないので一度、MTsetVarタグを使い変数numに代入。

3で割り切れる場合はMTifタグのtestモディファイアで判定。

MTGetVarタグでnumを取得して、regex_replaceを利用して前後にb要素を追加してsetvarモディファイアで、再び変数numに格納。

ここら辺は、MTSetVarBlockタグで書いたほうが、書き方として綺麗だけど、無駄に短く書きたかったので。。。

<mt:setvar name="num" value="$__index__">
<mt:if test="$__index__%3 == 0"><mt:getvar name="num" regex_replace="/^(.+)$/","<b>$1</b>" setvar="num"></mt:if>

同様にして3を含むとき、含むときはlikeモディファイアを利用すればよいです。

<mt:if name="__index__" like="3"><mt:getvar name="num" regex_replace="/^(.+)$/","<u>$1</u>" setvar="num"></mt:if>

5も同じ要領で処理すれば完成です。

よってたかってMTテンプレ。」たのしいコミュニティだ。

関連エントリー

MTカスタムフィールド画像を見えるようにする(正規表現)
MTでopモディファイアを利用して複雑なレイアウトを行う
Movable TypeでSEO対策-Feed編-
Movable Typeの再構築 高速化いろいろ
MTのカテゴリー操作 色々

スポンサードリンク

«[MT4LP5]ユーザー指向の管理画面をつくる by 野田純生 | メイン | re:MT。»