MT4:世界のナベアツをテンプレートタグで表現(2)
今度はJavaScriptではなく、自作プラグインを使用した。
ちなみに、mixiのコミュで、お題として挙げている。
こんにちは、yoshiといいます。 「NabeAzz 世界のナベアツをテンプレートタグで表現してみる」 というお題を提案してみます。 ・40までのループを作成する ・3で割れる、3のつく数のときアホっぽくなる →3,6,9,12,13,15,18,21,23,24,27,30,31,32,33,34,35,36,37,38,39 ・5で割れる、5のつく数のとき犬っぽくなる →5,10,15,20,25,30,35,40 アホや犬のときは、さまざまなバリエーションがあるとGood。 (たとえば、犬は「ワン」「ワフ」「ガルル」「ウー」とかのバリエーション) FizzBuzzと似ていますが、更に高度です。 有用度ゼロですが、腕磨きにはいいと思います。
更に以下のような仕様を盛り込んだ。
- 拡張性を重視する
- 重度のアホデータを10件準備
- 軽度のアホデータを10件準備
- 重度の犬データを10件準備
- 軽度の犬データを10件準備
- 3の公倍数のときは軽度のアホ
- 3のつく数のときは重度のアホ
- 5の公倍数のときは軽度の犬
- 5のつく数のときは重度の犬
- 重度のアホを軽度のアホより優先
- 重度の犬を軽度の犬より優先
- アホと犬がかぶったときはアホな犬になる
- 自作のCalcRndプラグインを使って、2テンプレートタグ使用
準備
CalcRndプラグインが必要。
ここにある。
MT4.1:プラグインを書いてみようソース
<MTIgnore>軽度のアホのデータを準備</MTIgnore>
<MTSetVar name="ahodata[1]" value="[軽度アホ]あほです">
<MTSetVar name="ahodata[2]" value="[軽度アホ]アホウです">
<MTSetVar name="ahodata[3]" value="[軽度アホ]アホィです">
<MTSetVar name="ahodata[4]" value="[軽度アホ]アヘです">
<MTSetVar name="ahodata[5]" value="[軽度アホ]アヒです">
<MTSetVar name="ahodata[6]" value="[軽度アホ]アホホです">
<MTSetVar name="ahodata[7]" value="[軽度アホ]ホアです">
<MTSetVar name="ahodata[8]" value="[軽度アホ]アホゥです">
<MTSetVar name="ahodata[9]" value="[軽度アホ]ホホです">
<MTSetVar name="ahodata[10]" value="[軽度アホ]ホホホーです">
<MTIgnore>重度のアホのデータを準備</MTIgnore>
<MTSetVar name="ahodata[11]" value="[重度アホ]ヌコが好きですがヌコってなんですか">
<MTSetVar name="ahodata[12]" value="[重度アホ]ボクのお父さんはこの亀です">
<MTSetVar name="ahodata[13]" value="[重度アホ]チップスアホィを食べるです">
<MTSetVar name="ahodata[14]" value="[重度アホ]アホウドリはお母さんです">
<MTSetVar name="ahodata[15]" value="[重度アホ]今から消防署へ行きます">
<MTSetVar name="ahodata[16]" value="[重度アホ]ボクのおうちは山です">
<MTSetVar name="ahodata[17]" value="[重度アホ]うんこしていいですか">
<MTSetVar name="ahodata[18]" value="[重度アホ]そしてそれ食べていいですか">
<MTSetVar name="ahodata[19]" value="[重度アホ]本当は犬っぽくなりたかとです">
<MTSetVar name="ahodata[20]" value="[重度アホ]ヌコっぽかのもよかどですじゃけえ">
<MTIgnore>軽度の犬のデータを準備</MTIgnore>
<MTSetVar name="inudata[1]" value="[軽度いぬ]ワン">
<MTSetVar name="inudata[2]" value="[軽度いぬ]ワフ">
<MTSetVar name="inudata[3]" value="[軽度いぬ]バウ">
<MTSetVar name="inudata[4]" value="[軽度いぬ]ワウワウ">
<MTSetVar name="inudata[5]" value="[軽度いぬ]バウワウ">
<MTSetVar name="inudata[6]" value="[軽度いぬ]ウー">
<MTSetVar name="inudata[7]" value="[軽度いぬ]ガルル">
<MTSetVar name="inudata[8]" value="[軽度いぬ]ウルルル">
<MTSetVar name="inudata[9]" value="[軽度いぬ]キャン">
<MTSetVar name="inudata[10]" value="[軽度いぬ]キャイーン">
<MTIgnore>重度の犬のデータを準備</MTIgnore>
<MTSetVar name="inudata[11]" value="[重度いぬ]俺犬だけどワンとかいわねえぜ">
<MTSetVar name="inudata[12]" value="[重度いぬ]だけど骨は大好きだぜ">
<MTSetVar name="inudata[13]" value="[重度いぬ]庭へ埋めてあるんだ">
<MTSetVar name="inudata[14]" value="[重度いぬ]俺の宝物の骨を">
<MTSetVar name="inudata[15]" value="[重度いぬ]こないださー3年ぶりに掘り起こしてみたのさ">
<MTSetVar name="inudata[16]" value="[重度いぬ]そしたら芽が出てて和んだぜ畜生">
<MTSetVar name="inudata[17]" value="[重度いぬ]食ってみたのさそれを">
<MTSetVar name="inudata[18]" value="[重度いぬ]中にせみの幼虫がいたさ">
<MTSetVar name="inudata[19]" value="[重度いぬ]でもかまわず食っちまった">
<MTSetVar name="inudata[20]" value="[重度いぬ]最低な犬だよな俺は">
<MTIgnore>アホと犬のインデックスを初期化</MTIgnore>
<MTSetVarTemplate name="Init">
<MTSetVar name="ahoindex1" value="0"><MTIgnore>重度のアホ</MTIgnore>
<MTSetVar name="ahoindex2" value="0"><MTIgnore>軽度のアホ</MTIgnore>
<MTSetVar name="inuindex1" value="0"><MTIgnore>重度の犬</MTIgnore>
<MTSetVar name="inuindex2" value="0"><MTIgnore>軽度の犬</MTIgnore>
</MTSetVarTemplate>
<MTIgnore>メイン処理</MTIgnore>
<ul>
<MTFor var="x" from="1" to="40">
<MTIgnore>アホのインデックスを取得</MTIgnore>
<MTIf name="x" like="3">
<MTSetVarBlock name="ahoindex1"><$MTCalcRnd$></MTSetVarBlock>
<MTSetVar name="ahoindex2" value="0">
<MTElse>
<MTIf name="x" op="%" value="3" eq="0">
<MTSetVarBlock name="ahoindex2"><$MTCalcRnd$></MTSetVarBlock>
<MTSetVar name="ahoindex1" value="0">
</MTIf>
</MTIf>
<MTIgnore>犬のインデックスを取得</MTIgnore>
<MTIf name="x" like="5">
<MTSetVarBlock name="inuindex1"><$MTCalcRnd$></MTSetVarBlock>
<MTSetVar name="inuindex2" value="0">
<MTElse>
<MTIf name="x" op="%" value="5" eq="0">
<MTSetVarBlock name="inuindex2"><$MTCalcRnd$></MTSetVarBlock>
<MTSetVar name="inuindex1" value="0">
</MTIf>
</MTIf>
<li>
<MTGetVar name="x">:
<MTIgnore>重度のアホ場合の出力</MTIgnore>
<MTIf name="ahoindex1" gt="0">
<MTSetVar name="ahoindex1" value="10" op="+">
<MTGetVar name="ahodata[$ahoindex1]"><br />
</MTIf>
<MTIgnore>軽度のアホ場合の出力</MTIgnore>
<MTIf name="ahoindex2" gt="0">
<MTGetVar name="ahodata[$ahoindex2]"><br />
</MTIf>
<MTIgnore>重度の犬っぽい場合の出力</MTIgnore>
<MTIf name="inuindex1" gt="0">
<MTSetVar name="inuindex1" value="10" op="+">
<MTGetVar name="inudata[$inuindex1]"><br />
</MTIf>
<MTIgnore>軽度の犬っぽい場合の出力</MTIgnore>
<MTIf name="inuindex2" gt="0">
<MTGetVar name="inudata[$inuindex2]"><br />
</MTIf>
<MTIgnore>全てのインデックスを初期化</MTIgnore>
<MTGetVar name="Init">
</li>
</MTFor>
</ul>
解説
まず、配列で、重度のアホ、軽度のアホ、重度の犬、軽度の犬のデータを10件づつ準備する。中は面倒なので適当に書いた。
次に、アホと犬のインデックスを初期化する。このインデックスの初期化は、後のForループでも使用するので、関数として使用できるように、MTSetVarTemplateタグを用いている。initという名前をGetVarすれば、中に書いてあるIndexデータが全て初期化される(=0がセットされる)仕組み。
メイン処理はForループで行う。前半はアホのインデックスと犬のインデックスの取得に集中する。このコードでは、重度(=3がつく、5がつく)のデータのほうが重視される。なお、重度では軽度が、軽度では重度のインデックスを初期化し、双方が同時に出力されないようにしている。
アホと犬は同時にインデックスを取得することができる。本当は、15,30,35のケースでは、文字列変数へ結果を連結する方式(appendモデファイアで文字列連結)にしたかったが、MT4の配列では、どうもvalueモデファイアへ配列を指定できない。
重度のアホの場合は、プアな自作プラグインが「1-10までの乱数を取得」の機能しかないため、インデックス変数へ+10している。これで11-20の乱数としている。
※もしvalueモデファイアへ配列を指定できれば、コードは更に簡素にできる。3の場合と5の場合は同じ処理を行っているので、Forループ自体を入れ子にし、外Forと内Forで同じ処理のパッキングができる。でも、これができないんだよなぁ~。惜しい
出力コードはMTIf文の横並べ。わたしはIF文の入れ子がどうも苦手で、好かん。なので細かくインデックスを与えて、合致する条件のとき結果を出力する「IF横並べ」とした。ネストが深いdivしかり、コードの見通しが悪くなるのが嫌いなのだ...。
ループ終端でMTGetVar name="Init"としてインデックスを初期化する関数をコールする。こういう使い方ができるんだのうー。こりゃ便利かも。
アホな実験だが、MT4.1のエッセンスが詰め込まれている。
貼ってみる
- 1:
- 2:
-
3:
[重度アホ]チップスアホィを食べるです
- 4:
-
5:
[重度いぬ]俺の宝物の骨を
-
6:
[軽度アホ]ホホホーです
- 7:
- 8:
-
9:
[軽度アホ]ホホホーです
-
10:
[軽度いぬ]ワフ
- 11:
-
12:
[軽度アホ]アホウです
-
13:
[重度アホ]うんこしていいですか
- 14:
-
15:
[軽度アホ]あほです
[重度いぬ]俺の宝物の骨を
- 16:
- 17:
-
18:
[軽度アホ]アホゥです
- 19:
-
20:
[軽度いぬ]キャイーン
-
21:
[軽度アホ]アヒです
- 22:
-
23:
[重度アホ]ヌコが好きですがヌコってなんですか
-
24:
[軽度アホ]あほです
-
25:
[重度いぬ]中にせみの幼虫がいたさ
- 26:
-
27:
[軽度アホ]アヘです
- 28:
- 29:
-
30:
[重度アホ]今から消防署へ行きます
[軽度いぬ]ワフ
-
31:
[重度アホ]アホウドリはお母さんです
-
32:
[重度アホ]ヌコが好きですがヌコってなんですか
-
33:
[重度アホ]本当は犬っぽくなりたかとです
-
34:
[重度アホ]今から消防署へ行きます
-
35:
[重度アホ]今から消防署へ行きます
[重度いぬ]俺犬だけどワンとかいわねえぜ
-
36:
[重度アホ]ヌコが好きですがヌコってなんですか
-
37:
[重度アホ]アホウドリはお母さんです
-
38:
[重度アホ]ボクのおうちは山です
-
39:
[重度アホ]ヌコっぽかのもよかどですじゃけえ
-
40:
[軽度いぬ]ウルルル
- カテゴリ:212MT4.1実験室
トラックバック(0)
このブログ記事を参照しているブログ一覧: MT4:世界のナベアツをテンプレートタグで表現(2)
このブログ記事に対するトラックバックURL:
- Categories
- Entries
-
- MT4のテンプレートタグとプラグインでサインカーブを描く
- MT4.1:クマーを色々(MTSetvarTemplate)
- MT4分科会第2回勉強会に参加しました
- MTOS4.2RC1:各ページの拡張子を得る
- MTでAA
- MT4:MTの変数演算をプラグインで拡張
- MT4.1:「MT」という文字をテーブルの背景色で表現
- 「NabeAzzテンプレート問題・パート2」へ乗ってみる
- 作りたいプラグインの覚え書き
- 世界のナベアツをプラグインで表現
- MT4:世界のナベアツをテンプレートタグで表現(2)
- MT4.1:プラグインを書いてみよう
- MT4.1:予約変数の実験
- Movable Type 4.15 テスト中(1)
- mtde.info の、反省点
- mtde.info の、できる経緯
- MT4:前のエントリ・次のエントリのリンクをカテゴリごとに(条件あり)
- MT4:世界のナベアツをテンプレートタグで表現
- MT4.1:カテゴリ並べ替え・表示非表示切り替え(非プラグイン非カスタムフィールド)
- MT4.1:変数参照専用のモジュールの可能性
- MT4:XHTML+CSS素材テンプレート化の不具合修正・要望リスト
- MT4.1:Movable Type 4.1用テンプレート作った
コメントする