前回、

★の数に対応したXMLを定義する
XMLに★の数を挿入するために、
現在のXMLは、
<?xml version="1.0" encoding="utf-8"?>
<entries>
<entry id="9" title="お台場">
<img src="http://www.3oclock.com/my_first_blog-gihyojp/images/2007-03-25-FromDaiba.jpg" />
</entry>
</entries>
そこで、
<?xml version="1.0" encoding="utf-8"?>
<entries>
<entry id="9" title="お台場" rating="3">
<img src="http://www.3oclock.com/my_first_blog-gihyojp/images/2007-03-25-FromDaiba.jpg" />
</entry>
</entries>
実は、
そこで、
MTで計算を行うには変数を扱うMTタグ<$mt:SetVar$><$mt:GetVar$>などにopモディファイアという演算のモディファイアを追加して行います。
そこで、
MTタグで変数を設定する
MTで変数を扱う場合に基本になる部分です。変数を設定する場合は、
<$mt:SetVar name="age" value="38"$>
//age=38
<$mt:SetVar name="name" value="NORI"$>
//name="NORI"
※ //ではじまる行は、
また、
<mt:SetVarBlock name="blogurl"><$mt:BlogURL$></mt:SetvarBlock>
//blogurl=<$mt:BlogURL$>
※ <mt:SetVarBlock>は、
MTタグで変数を出力する
上記の方法で設定した変数を出力する場合は、
<$mt:GetVar name="age"$>
//trace(age)
<$mt:GetVar name="name"$>
//trace(name)
<$mt:GetVar name="blogurl"$>
//trace(blogurl)
MTタグで変数の値を参照する
変数を利用するときにもっとも利用価値があるのは、
<$mt:SetVar name="age2" value="$age"$>
//age2 = age
MTタグで変数を使用して計算する
MTタグを使用して四則演算をするには、
このopモディファイアは、
- add または +: 加算
- sub または -: 減算
- mul または *: 乗算
- div または /: 除算
- mod または %: 剰余
- inc または ++: インクリメント
(1増加) - dec または --: デクリメント
(1減少)
たとえば、
<$mt:SetVar name="age" op="+" value="100"$>
//age+=100
<$mt:SetVar name="age" op="-" value="2"$>
//age-=2
<$mt:SetVar name="age" op="*" value="3"$>
//age*=3
<$mt:SetVar name="age" op="/" value="4"$>
//age/=4
<$mt:SetVar name="age" op="%" value="5"$>
//age%=5
<$mt:SetVar name="age" op="++"$>
//age++
<$mt:SetVar name="age" op="--"$>
//age--
上記のMTタグだけでは、
※ opモディファイアは、
変数がひと通り使えるようになったので、
※ 詳細は
エントリーごとにコメント欄を調べる
エントリー毎のコメント欄をみたい場合は、
コメントの本文は、
まとめると、
※ コメントとして<mt:Ignore>タグを使用しています。このタグの間のテキストはコメントとして処理され、
<mt:Entries>
<mt:Ignore>***********エントリー開始***********</mt:Ignore>
<mt:Comments>
<$mt:CommentBody$>
</mt:Comments>
<mt:Ignore>***********エントリー終了***********</mt:Ignore>
</mt:Entries>

テスト用にインデックステンプレートを新規作成し、
再構築すると、
また、
<mt:Entries>
<mt:Ignore>***********エントリー開始***********</mt:Ignore>
<$mt:EntryTitle$>
<mt:Comments>
<$mt:CommentBody remove_html="1"$>
</mt:Comments>
<mt:Ignore>***********エントリー終了***********</mt:Ignore>
</mt:Entries>
これで、
次は、
コメントの数値を合計する
コメントの中の数値を加算していくのは、
resultがすべてのエントリーを対象にして合算するのを防ぐため、
<mt:Entries>
<mt:Ignore>***********エントリー開始***********</mt:Ignore>
<$mt:EntryTitle$>
<$mt:SetVar name="result" value="0" $>
<mt:Comments>
<mt:SetVarBlock op="+" name="result"><$mt:CommentBody remove_html="1"$></mt:SetVarBlock>
</mt:Comments>
<mt:Ignore>***********エントリー終了***********</mt:Ignore>
</mt:Entries>
コメント総数を調べる
平均値は、
その値を変数countに代入するために<mt:SetVarBlock name="count"><$mt:EntryCommentCount$></mt:SetVarBlock>を使用して、
<mt:Entries>
<mt:Ignore>***********エントリー開始***********</mt:Ignore>
<$mt:EntryTitle$>
<$mt:SetVar name="result" value="0" $>
<mt:SetVarBlock name="count"><$mt:EntryCommentCount$></mt:SetVarBlock>
<mt:Comments>
<mt:SetVarBlock op="+" name="result"><$mt:CommentBody remove_html="1"$></mt:SetVarBlock>
</mt:Comments>
<mt:Ignore>***********エントリー終了***********</mt:Ignore>
</mt:Entries>
MTタグで平均値を求める
平均値は、
- コメントの合計値…result
- コメントの総数…count
- 平均値=result÷count
これを、
次の行では、
<$mt:SetVar name="result" op="/" value="$count"$>
MTタグで四捨五入する
四捨五入は、
「resultに0.
※ 四捨五入のアイデアは、
整数部分だけを取り出すために、
sprintfモディファイアは、
<$mt:SetVar name="result" op="+" value="0.5"$>
<$mt:SetVarBlock name="result"><$mt:GetVar name="result" sprintf="%d"$></mt:SetVarBlock>
MTタグをまとめる
さて、
<?xml version="1.0" encoding="utf-8"?>
<entries>
<mt:Entries>
<mt:Ignore>***********エントリー開始***********</mt:Ignore>
<$mt:SetVar name="result" value="0" $>
<mt:SetVarBlock name="count"><$mt:EntryCommentCount$></mt:SetVarBlock>
<mt:Comments>
<mt:SetVarBlock op="+" name="result"><$mt:CommentBody remove_html="1"$></mt:SetVarBlock>
</mt:Comments>
<$mt:SetVar name="result" op="/" value="$count"$>
<$mt:SetVar name="result" op="+" value="0.5"$>
<$mt:SetVarBlock name="result"><$mt:GetVar name="result" sprintf="%d"$></mt:SetVarBlock>
<mt:Ignore>***********以前作成したphoto.xmlのインデックステンプレート***********</mt:Ignore>
<entry id="<$mt:EntryID$>" title="<$mt:EntryTitle$>" rating="<$mt:GetVar name="result"$>">
<mt:EntryAssets type="image">
<img src="<$mt:AssetURL$>" />
</mt:EntryAssets>
</entry>
<mt:Ignore>***********エントリー終了***********</mt:Ignore>
</mt:Entries>
</entries>

出力ファイル名をphoto.
Flashでrating属性に対応する
Flashのソースでは、
(1)
(1)
function onLoaded(e:Event):void {
//XMLデータとして読み込んだテキストデータをパース
var myXML:XML=new XML(e.target.data);
//E4XでmyXMLを解析
for each (var entrydata:XML in myXML.*) {
//Objectの配列としてデータを格納
var t_object:Object = new Object();
t_object.src=entrydata.img.@src;
t_object.id=entrydata.@id;
t_object.rating=entrydata.@rating;
t_object.title=entrydata.@title;
image_array.push(t_object);
}
showPicture(0);
}
(2)
starsは5フレームまであるムービークリップです。★の数が、
stars.gotoAndStop(image_array[current_image_num].rating)

(3)
var myURLRequest:URLRequest=new URLRequest("http://www.3oclock.com/my_first_blog-gihyojp/photo.xml?rnd="+Math.random()*10);
まとめ
今回は、
MTテンプレートはMT4.
コメントの内容を、
また、
今回作成したFlashは、
次回は、