Upotreba PHP-a u drugim jezicima Za ovu lekciju se podrazumevaju osnovna znanja iz JavaScript-a i ActionScript-a. Ono što smo do sada radili, jeste PHP van konteksta ili u veb kontekstu, što je zapravo i jedini kontekst u kome PHP egzistira. To ne znači da PHP nije jezik kojim je moguće stvoriti i nešto drugo, na primer: windows aplikaciju. Ipak, ako želite da izvedete ovakav poduhvat, biće Vam potrebno poznavanje winapi-ja, i retko ko se (niko) odlučuje na ovakvu opciju. Sa druge strane, PHP je odličan u ulozi cgi skript jezika (jezika za veb aplikacije). Odnosno, ima funkcionalnost nižih programskih jezika (c, c++) i jednostavnost koja nam omogućava da se koncentrišemo na HTML i ponekad skrenemo u serverski skript, radi ispunjenja zahteva tog HTML-a. Obzirom da smo testiranje primera u ovom kursu vršili putem veb čitača, a sam PHP startovali putem veb servera, iza nas već stoji nekolicina veb strana i jedino što treba da uradimo, to je da te PHP elemente, koje smo naučili da pravimo, implementiramo u neke ozbiljnije HTML strane. Da bismo te strane napravili, potreban nam je pre svega HTML, ali često i još neki jezik koji će obrañivati klijentsku funkcionalnost strane. Još je u prvim lekcijama rečeno da PHP nije jezik kojim možemo napraviti animacije ili bilo kakve druge aktivnosti na klijentu. Za ovo nam služe razne klijentske tehnologije, koje su urañene u sopstvenim skript jezicima. Dve najpopularnije su JavaScript i ActionScript. JavaScript nam je, iz dosadašnjih lekcija prilično poznat, ali ActionScript (skript jezik za rukovanje Flash animacijama), nešto manje. Oba ova jezika imaju zajedničku karakteristiku: Izvršavaju se na klijentu i nisu u stanju da samostalno rukuju sa serverom. Što se JavaScripta tiče, mi ćemo ovde samo proširiti dosadašnje znanje, dok ćemo za ActionScript proučiti, sa stanovišta ovog kursa, potpuno novu tehnologiju, povezivanja Flasha i izvora podataka (zapravo, ovo je jedna od tehnologija). JavaScript i PHP Tokom kursa, koristili smo se, u nekoliko navrata i javascriptom. Ovo je uvek bio javascript implementiran u stranu. Ali, poznato je da je moguće u stranu učitati i eksterni javascript fajl. Zapravo, ovaj fajl i ne mora biti dokument koji, za sadržinu ima samo JavaScript, niti mora biti fajl koji će imati ekstenziju js. Bitno je samo da će, ukoliko ovaj fajl implementiramo u aktuelnu stranu kroz JavaScript src atribut: <script src="fajl.js">
taj fajl biti učitan i tretiran kao JavaScript. To znači da bi umesto fajl.js, fajl mogao da se zove i fajl.php ili fajl.php?x=1, što opet znači da možemo, na osnovu nekog serverskog podatka, odlučiti o tome kako će izgledati JavaScript kod. Napravimo jednu stranu, koja će imati jednu JavaScript import liniju i plejsholder za rezultat (div tag): <html><body> <div id="ciljnidiv"></div> </html></body> <script src="js.php?drzava=engleska"></script> Kao adresu src fajla, uneli smo, umesto.js fajla,.php fajl i obratili mu se najobičnijim GET upitom. Sada možemo napraviti i js.php fajl i u njemu rešiti logiku, koja će da formira skriptu na osnovu unetih parametara. Možemo za to upotrebiti «čuveni» niz glavnih gradova. Standardnim umetanjem HTML (u ovom slučaju JavaScript) u PHP, kreiramo JavaScript kod, koji radi sa dinamikom, emitujući različit rezultat na osnovu dobijenih parametara. $niz=array("srbija"=>"beograd","francuska"=>"pariz","engleska"=>"london ","Spanija"=>"Madrid"); if(isset($_get['drzava'])) $v=$_get['drzava']; document.getelementbyid("ciljnidiv").innertext = " echo $niz[$v]; "; Ovaj primer je banalan, ali, kada bi se, umesto lokalne, u src atribut stavila javna, apsolutna putanja i umesto niza država upotrebljavali neki drugi, «user specific» podaci, a kao parametar prosleñivao neki jedinstveni identifikator, mogla bi se formirati kompletna skripta, koja bi bila potpuno enkapsulirana i jedinstvena, bez obzira na podnosioca zahteva, te tako funkcionisala u vidu JavaScript servisa. ActionScript i PHP Takoñe, jedna od popularnih klijentskih tehnologija je i Flash, odnosno, njegov script jezik AcrionScript. Flash aplikacije, kao i JavaScript, takoñe nisu u stanju da direktno dobave podatke iz baze podataka, već se obično podaci smeštaju u fajlove na veb serveru, koji se posle toga čitaju iz flash aplikacije. Upravo tu tehnologiju, sa malim modifikacijama, možemo upotrebiti za dobavljanje materijala iz baze. Naime, ukoliko umesto običnog fajla,
ActionScript-u prosledimo PHP fajl, možemo u tom PHP fajlu stvoriti logiku za dobavljanje podataka iz baze. Za ostvarivanje ovog primera, potreban nam je jedan flash dokument sa dinamičkim tekst boksom, čije je name svojstvo: rez. Ovaj dokument treba da bude implementiran u veb stranicu na veb serveru, u istom folderu u kome će se nalaziti i PHP fajl koji će ga opsluživati. Zatim, u ActionScriptu ovog dokumenta možemo obraditi ulazne parametre: //prvo inicijalizujemo LoadVars objekat var podaci = new LoadVars(); //zatim napravimo anonimus funkciju koja će se aktivirati //prilikom onload dogañaja objekta podaci podaci.onload=function() //kada su podaci učitani //smeštamo dobijeni podatak u tekst boks pri čemu se ključ podatka //tačkom lepi na naziv objekta. rez.text=podaci.grad; //konačno, učitavamo podatke podaci.load("asbroker.php");
Sada je još samo potrebno da obezbedimo aplikaciju asbroker.php, koja će opskrbiti ovu skriptu podacima, što je još jednostavniji korak. Potrebno je samo napraviti jedan PHP dokument, čiji će sadržaj biti: echo "grad=pozdrav iz PHP-a"; Ovo bi, ukoliko sve funkcioniše, trebalo da rezultira ispisom poruke: Pozdrav iz PHP-a, u fleš aplikaciji, na veb strani. Nakon toga, ostaje samo da se, umesto statičkog ispisa teksta Pozdrav iz PHP-a dobave i emituju podaci iz nekog dinamičkog izvora (recimo, to bi mogla biti adresa slike, koja se prosleñuje flashu na obradu). Osim na ovaj način, podaci se (malim modifikacijama dosadašnjeg koda), izmeñu ActionScripta i PHP-a mogu kretati i dvosmerno, što je faktor koji omogućava pravljenje ozbiljnje Flash aplikacije, koja radi sa podacima. Da bismo ovo postigli, potrebno je intervenisati na dosadašnjem ActionScript i PHP kodu i samoj Flash aplikaciji. Napravimo dva tekst boksa, jedan tipa Input i drugi tipa Dynamic i jedan taster (Windows>Components>Button). Nazovimo napravljene kontrole respektivno (drzava, grad, taster) Input tekst boksu možemo aktivirati svojstvo Show Border Around Text da bi bio vidljiv Zatim, prenos parametara u ActionScriptu možemo realizovati sledećim kodom:
//kreiranje dva LoadVars objekta, jedan za prijem i drugi za slanje parametara var rezultat = new LoadVars(); var zahtev = new LoadVars(); //obrada onload dogañaja, kroz anonimus funkciju //vrednost parametra grad objekta rezultat //smesta se u tekst polje grad rezultat.onload=function() grad.text= rezultat.grad; //obrada dogañaja pritiska na taster //inicijalizuje se parametar drzava, objekta zahtev //i dodeljuje mu se vrednost iz tekst polja drzava taster.onrelease = function() zahtev.drzava=drzava.text; //aktivira se sendandload metod objekta zahtev //koji prosleñuje parametre objekta rezultat //po cijem zavrsetku se aktivira onload dogadjaj objekta rezultat zahtev.sendandload("asbroker.php", rezultat, POST); Kada je Flash aplikacija napravljena i prevedena, potrebno je izraditi i serversku logiku. //provera da li postoji parametar sa nazivom drzava if(isset($_post['drzava'])) //dodeljivanje vrednosti superglobalne promenljive drzava varijabli drzava $drzava=$_post['drzava']; //pravljenje dobro pozntog niza drzava i gradova //koji simulira podatke iz nekog izvora podataka $niz=array("srbija"=>"beograd","francuska"=>"pariz","engleska"=>"london ","Spanija"=>"Madrid"); //emitovanje naziva grada koji odgovara ulaznom kljucu (drzavi) echo "grad=". $niz[$drzava]; Najvažnije iz lekcije: 1. Moguće je u src atribut pri ucitavanju eksternog JavaScript-a uneti i PHP dokument 2. Moguće je dobaviti serverske podatke za ActionScript putem PHP-a 3. Prilikom rukovanja eksternim podacima u ActionScript-u koristi se LoadVars klasa 4. Kreiranje klijentske dinamike nije moguće u PHP-u 5. PHP je jezik širokog spektra, ali je njegov primarni vid implementacije u vebu