|
In continuare trebuie sa verificam daca fisierul in care stocam mesajele
(care se va numi "mesaje.xml") exista deja pe hard-disk si in caz contrar sa
cream acest fisier in format XML:
<?php if (!file_exists("mesaje.xml")){
$doc = new_xmldoc('1.0');
$root = $doc->add_root('mesaje');
$filename="mesaje.xml";
$fp = @fopen($filename,'w');
if(!$fp) {
die(mesaj_eroare=Nu pot crea fisierul XML');
}
fwrite($fp,$doc->dumpmem());
fclose($fp);
}?>
Dupa acest pas fiserul va fi gasit si va putea fi deschis (fie din cauza ca
tocmai a fost creat fie din cauza ca deja exista).Pentru a deschide fisierul trebuie sa ne folosim de comanda
domxml_open_file care din pacate necesita calea completa catre fisier. Din
acest motiv avem nevoie sa definim valoarea PATH ca mai jos. In cazul in
care calea unde ati stocat dumneavoastra „mesaje.xml” nu corespunde cu
cea data mai jos, modificati-o pentru a pointa spre locul unde este stocat
fisierul dumneavoastra:
<?php
define ("PATH", 'c:\apache2\htdocs\guestbook\');
if (!$doc = domxml_open_file(PATH . "mesaje.xml")) {
echo " mesaj_eroare=Eroare la deschidere XML";
exit;
}?>
Acum vom adauga o variabila care sa pointeze spre radacina
documentului, variabila prin intermediul careia vom putea adauga noile
valori:
<?php
$root = $doc->document_element();
Ne vom folosi în continuare de "new_child" pentru a adăuga un nod
nou (respectiv un nod cu numele "mesaj" dar a cărui conţinut va fi format
din alte noduri pe care le vom adăuga de asemenea folosind "new_child":
<?php
$mesaj_nou = $root->new_child('mesaj','');
<br />
$nume_ = $mesaj_nou->new_child('nume',$nume);
<br />
$mesaj_ = $mesaj_nou->new_child('msg',$msg);
<br />
$data_=$mesaj_nou->new_child('data',$data);
<br />
$identificare_= $mesaj_nou->new_child ('identificare','');
<br />
$ip_ = $identificare_->new_child('ip',$ip);
$mail_ = $identificare_->new_child('mail',$mail);
$web_ = $identificare_->new_child('web',$web);
?>
Acum, in variabila $doc vor fi retinute tot arborele XML. Pentru a-l putea
vizualiza sau scrie pe HardDisk ne vom folosi de functia dumpmem().
Modul de scriere a fisierului pe HDD este clasic si nu insistam asupra
functiilor implicate, in final vom inchide scriptul PHP prin utilizarea
marcajului final "?>":
<?php
$filename="mesaje.xml";$fp = @fopen($filename,'w');
if(!$fp) {
die(' mesaj_eroare=Nu pot crea fisierul XML');
}
fwrite($fp,$doc->dumpmem());
fclose($fp);
echo "mesaj_eroare=OK";
?>
Salvati scriptul de mai sus cu numele "adauga.PHP" si copiati-l in
directorul in guestbook din htdocs. Executati acest PHP de mai multe ori,
scriind in browser: http://localhost/guestbook/adauga.PHP si apasând
repetat "refresh". In acest mod veti crea un XML ce va contine mai multe
norudi.
Dupa fiecare executie ar trebui sa obtineti o pagina care sa contina
"mesaj=OK" si sa gasiti in directorul guestbook un fisier XML
"mesaje.xml" care sa contina variabilele definite la inceputul PHP-ului
(eventual de mai multe ori).
Scriptul PHP va rula pe server dar avem nevoie de o aplicatie de tip
client care sa comunice datele (numele, mesajl, etc.). Aplicatia de pe client
poate fi un formular HTML (caz in care aplicatie este mult spus) sau poate
fi un obiect Flash.
Obiectul Flash va fi construit in trei parti (nu vom adauga un preloader
la acest flash deorece este destul de mic si mesajele nu sunt - in general -
foarte multe). Prima parte este cea care va afisa toate mesajele si este cea
care va apare atunci când Flash-ul va fi deschis in browser. Partea a doua
este constituita dintr-un formular care are rolul de a transmite datele catre
PHP-ul construit mai devreme iar cea de-a treia parte va afisa un mesaj de
confirmare (sau de eroare).
Vom construi guest-book-ul incercând sa folosind atât script cât si
constructii grafice.
Drept constructii grafice veti realiza trei imagini reprezentând un plic,
un glob pamântesc respectiv un cursor pentru scroll. Primele doua imagini
vor reprezenta legaturi catre e-mailul respectiv pagina web a celui ce a
postat mesajul (daca au fost introduse). Dupa ce au fost redimensionate la
12x12 pixeli, imaginile vor fi transformate in MovieClip (indiferent ca sunt
imagini scalare - importate in Flash sau imagini vectoriale) si li se vor da ca nume de legatura valorile "pictograma_mail", "pictograma_web"
respectiv "cursor_scroll".
Pentru inceput vom incarca fisierul XML (cel ce contine mesajele) si-l
vom afisa. Urmatorul cod este cel mai banal atunci când vrem sa incarcam
un obiect XML dintr-un fisier extern (nu vom incerca sa interpretam inca
datele ci doar sa afisam continutul. Flashul pe care il veti crea va fi salvat in
acelasi director in care este si fisierul XML si se va numi "guestbook.fla".
Initial vom defini doar obiectul XML si vom afisa continutul sau.
Fisierul XML nu se va incarca instant de pe server; orice persoana care a
utilizat vreodata internetul stie ca in anumite momente datele se incarca
mai repede, alte dati mai incet. Dupa ce am dat comanda catre server sa ne
trimita fisierul ce contine mesajele nu ne putem astepta ca la instructiunea
imediat urmatoare informatiile sa fie deja la client. Din acest motiv ne vom
folosi de evenimente - cum ar fi eventimentul incarcarii XML-ului in
memorie. Codul (care va fi pus in primul cadru al unui nou document
Flash) este urmatorul:
var mesaje = new XML();
mesaje.ignoreWhite = true;
mesaje.onLoad = function() {
trace (mesaje.toString());
};
mesaje.load("mesaje.xml");
In prima linie de cod se aloca memorie pentru obiectul XML, se ignora
spatiile albe din cadrul XMLului (unui om ii este mai usor sa inteleaga
continutul unui fisier XML daca este structurat asa cum este structurat mai
sus... calculatorul nu are nevoie ca datele sa fie aliniate, mai mult spatiile
albe precum tab-ul sau spatiul dauneaza interpretarii corecte a obiectului
XML - acest lucru este valabil in Flash). In momentul incarcarii complete a
XMLului in memorie se va executa (automat) functia "onLoad" care va
afisa continutul obiectului XML. In finalul codului mai trebuie sa dam
comanda serverului sa ne trimita fisierul XML: mesaje.load("mesaje.xml");
Ceea ce vrem noi sa facem este mai mult decât doar sa afisam XMLul.
Trebuie sa formatam informatia sa apara cum ne place noua. Ştergeti codul
initial (el a fost pus doar pentru a testa daca fisierul XML se incarca corect)
si sa incercam sa scriem codul pentru adevaratul guestbook. Pentru inceput
vom face câteva initializari:
_root._lockroot = true;
_root.maxx = Stage.width-1;
_root.maxy = Stage.height-1;
var textformat = new TextFormat("tahoma", 11, 0, false);
textformat.color = 0x003366;
var textformat_nume = new TextFormat("tahoma", 11, 0, true);
textformat_nume.color = 0x003333;
var textformat_data = new TextFormat("tahoma", 11, 0, false);
textformat_data.color = 0x003333;
var mesaje = new XML();
mesaje.ignoreWhite = true;
In aceasta portiune din cod am setat proprietatea lockroot a scenei ca
fiind adevarata. Aceasta proprietate este necesara pentru ca player-ul Flash
sa stie unde trebuite sa incarce datele. Daca Flash-ul pe care tocmai il
construiti va fi ulterior atasat (prin intermediul comenzii loadMovie) altui
obiect Flash exista pericolul ca cele doua "root-uri" (al Flash-ului ce incarca
respectiv din cel incarcat) sa se confunde. Prin blocarea radacinii8
obiectului Flash se evita aceasta problema.
|