クライアントさんのサイトでFlashによる代理店表示というのをやってまして、
現状のままだと更新が大変になってきているので、
いっちょ、代理店データをXMLで管理して更新を簡素化しようと思いました。
以前のエントリでもFlashでXMLについて書いたんですが、本格的に仕事でやるのは初めて。実際、やってみるとこれが結構大変でしたが、何とか完成しました!
例を挙げて説明すると・・・
代理店のXMLデータ:dealer.xml
<dealers>
<dealer no='1'>
<name>Dealer hoge</name>
<address>Hamamatsu</address>
<phone>012-345-6789</phone>
<fax>001-234-5678</fax>
<link>http://www.hogehoge.com</link>
</dealer>
</dealers>
以上のデータの項目(タグ)値を取り出して、それぞれ表示させます。
「Action Script」
myxml = new XML();
myxml.onLoad = LoadXML;
myxml.load("dealer.xml");
myxml.ignoreWhite = true;
function LoadXML(success) {
if (success == true) {
rootNode = myxml.childNodes[0];
//代理店総数を「totalNode」に代入
totalNode = rootNode.childNodes.length;
//ページ数を調べて、「pmax」に代入
pmax = Math.ceil(totalNode/5);
if (_parent.p <= pmax) {
for (i = 5; i >= 1; i = i - 1) {
butMC = eval("but"+(5 - i));
butMC.name = rootNode.childNodes[5*_parent.p - i].childNodes[0].childNodes[0].nodeValue;
butMC.address = rootNode.childNodes[5*_parent.p - i].childNodes[1].childNodes[0].nodeValue;
butMC.phone = rootNode.childNodes[5*_parent.p - i].childNodes[2].childNodes[0].nodeValue;
butMC.fax = rootNode.childNodes[5*_parent.p - i].childNodes[3].childNodes[0].nodeValue;
butMC.link = rootNode.childNodes[5*_parent.p - i].childNodes[4].childNodes[0].nodeValue;
}
}
}
}
Action Scriptの上4行は、XMLデータを読み込むお決まりの構文。
LoadXMLという関数の13行目の for文でXMLデータの内容をそれぞれFlashの表示させるところに入力していってます。1表示につき5代理店分表示で、1代理店につき5項目ずつを変数に入力させています。
14行目の
butMC = eval("but"+(5 - i));
でムービークリップ(略してMC)「but0」〜「but4」を変数butMCで表現。
変数のMCのそれぞれの項目を代入していってるんですが、ここがミソで、
butMC.name = rootNode.childNodes[5*_parent.p - i].childNodes[0].childNodes[0].nodeValue;
XMLの例えば<name>タグの値、上の「dealer.xml」の「Dealer hoge」を指定するのに上の様な配列でも指定できるんですね。これが・・・
rootNode.childNodes[5*_parent.p - i]
これである特定の代理店を表していて、
次のchildNodes[0]
これで<name>Dealer hoge</name>を表します。
そして、最後の
childNodes[0].nodeValue
で、「Dealer hoge」を指定ということになります。
何書いてんのかわからない場合は、参考になった以下のサイトを参照。
http://ameblo.jp/flashmemo/theme4-10000010520.html