IPRO - PC Magazine Romania, Mai 2003
SOLUȚII PENTRU PROGRAMATORII ȘI DESIGNERII WEB Flash și XML: Tutorial
Ioan Alexandru Lazăr
Am spus în ultimul articol că Macromedia Flash include, începând cu versiunea
5.0, un parser XML. În versiunea MX, acest parser a atins o versiune matură
și îl puteți folosi cu mare încredere în aplicațiile dvs.
Și totuși, cum se folosește parser-ul acesta? Vă spun eu: foarte ușor. Urmați
acest tutorial, și pe urmă faceți un test încercând să realizați același
lucru fără a recurge la XML. Probabil că veți renunța la jumătate. Eu așa
am pățit.
Așadar, vom construi un program care va citi date dintr-un fișier XML.
Aceste date vor consta într-un număr oricât de mare de perechi [etichetă]
- [url].
Programul va citi etichetele și va genera un meniu format din butoane,
pe fiecare buton fiind scris un nume, adică una dintre etichete, iar ca link
informația pereche a etichetei - [url]. Când veți apăsa pe un buton, veți
fi trimis la url-ul asociat etichetei butonului.
Pentru această aplicație, vom folosi un fișier xml pe care îl vom numi
meniu.xml, un câmp de text dinamic și un movie-clip pentru fiecare element
al meniului.
Rezultatul final al tutorialului îl puteți găsi pe CD-ul revistei.
Ce se-ntâmplă
Haideți să vedem ce trebuie să facă aplicația noastră! În primul rând,
va avea nevoie de un obiect XML, pe care îl vom crea astfel: meniuXml
= new
XML(). Apoi, trebuie să poată "număra" elementele meniului nostru, număr
pe care îl vom păstra în variabila n. Pentru a aplica etichetele pe butoane,
vom folosi un câmp de text dinamic numit itemLabel, care va fi modificat
prin secvența
item.itemLabel.text = menuItem[n].attributes.eticheta.
Puteți vedea că eu am folosit aici nume, iar un element este trecut în fișierul
xml ca
<buton eticheta="eticheta"
url="http://www.url.ro" />.
În fine, trebuie ca programul să atribuie butonului un url. De asta se ocupă
secvența
item.myUrl = menuItem[n].attributes.url.
Urmează crearea fișierului xml
din care programul își va lua datele.
Cum facem să se întâmple
Mai întâi vom crea fișierul xml. Folosind Notepad sau alt editor de text
(vă recomand Crimson Editor sau UltraEdit), vom crea un fișier care să conțină
perechile etichetă-url. Ar trebui să arate cam așa:
< ?xml version="1.0"?>
< meniu>
< buton eticheta="PC Magazine" url="http://www.pcmagazine.ro" />
< buton eticheta="IPRO" url="http://www.pcmagazine.ro/ipro/" />
< buton eticheta="NET Report" url="http://www.netreport.ro/" />
< buton eticheta="PC Concrete" url="http://www.pcconcrete.ro" />
< /meniu>
Evident, puteți folosi orice link-uri doriți. Atenție însă la tagul <buton
eticheta> pentru că ne vom folosi de el în ActionScript.
Salvați acest fișier cu numele meniu.xml. Acum vom trece la partea de ActionScript.
Creați un fișier Flash, inserați un movie-clip de dimensiuni 150 pe 20
pixeli. În el, desenați o formă geometrică care vă place mai mult - elipsă,
dreptunghi,
în fine, orice vreți, numai să semene cât de cât a buton. Și tot acolo
creați și un câmp de text dinamic căruia îi vom da, în caseta Instance Name,
numele
itemLabel. Aveți grijă ca acest câmp de text să se afle deasupra oricărui
desen. Apoi, în caseta Linkage, dați movie-clip-ului pe care tocmai l-am
creat numele meniuClip.
OK, cam aici ia sfârșit partea de desenare. Nu puneți nimic în scenă, păstrați
totul în Library. În primul cadru-cheie al fișierului tocmai creat vom
introduce codul, care e foarte-foarte scurt. Adică:
meniuXml = new XML();
meniuXml.ignoreWhite = true;
meniuXml.onLoad = function() {
menuItem = this.firstChild.childNodes;
for (var n=0; n<menuItem.length; n++) {
item = _root.attachMovie("meniuClip", "meniuClip" + n, n);
item._x = 0;
item._y = 20*n;
item.itemLabel.text = menuItem[n].attributes.eticheta;
item.myUrl = menuItem[n].attributes.url;
item.onRelease = function() {
getURL(this.myUrl,"_blank");
}
}
}
meniuXml.load("meniu.xml");
Două lucruri vă sunt probabil neclare, așa că le voi explica imediat.
menuItem = this.firstChild. childNodes; Aruncați o privire peste fișierul
XML. Vă veți da seama că fiecare pereche etichetă-url este o subdiviziune
(copil -"child") a tagului <meniu>. Fiecare pereche conține informația
de care e nevoie, iar această instrucțiune spune parser-ului unde se află
informația de care e nevoie.
Instrucțiunea for (var n=0; n<menuItem.length; n++) calculează câte elemente
are meniul și repetă execuția instrucțiunilor incluse în ea de tot atâtea
ori. Altfel spus: citește primul element și îl desenează (de aceea am folosit
un ciclu "for"). Trece la al doilea, și tot așa până la ultimul. Când a ajuns
la ultimul, îl desenează și pe acesta, dar nu trece mai departe pentru că
își dă seama că nu mai există elemente. E clar, nu?
Încercați să testați scena. Merge? Nu? Verificați unde ați salvat fișierul
xml: trebuie să fie în același director cu fișierul flash (în cazul nostru,
fișierul se numește "meniu.xml"). Verificați dacă ați făcut referirile
corecte (că nu ați scris, de exemplu, item.itemLabel.text = menuItem[n].attributes.name
în loc de item.itemLabel.text = menuItem[n].attributes.nume. Trebuie să
meargă...
mie mi-a mers :).
În orice caz, ceea ce tocmai ați realizat este un program care citește
date dintr-un fișier xml și le mai și folosește pentru ceva util.
Mai
mult
Mai puteți găsi o serie de tutoriale pe tema Flash-XML la Flashkit (www.flashkit.com).
Înainte de a încerca să faceți ceva foarte, foarte serios ar fi bine
să citiți cu atenție documentația FlashMX cu privire la integrarea
XML-Flash. Dacă
nu aveți documentația FlashMX, o puteți găsi pe situl Macromedia (www.macromedia.
com). Acum, dacă vă place atât de mult XML, puteți încerca să scrieți
un
MP3 player. Așa, ca temă pentru acasă :).
Nu e greu!
|