PHP DOM ja Templatet - Luento 17

Tutkitaan, miten PHP:llä voidaan hyödyntää DOM-rajapintaa, ulkopuolisia verkkopalveluita ja templateja.

Luentotaltiointi

Ongelmia videon katselussa?

PHP DOM

DOM-rajapinta PHP:ssa toimii hyvin samaan tapaan kuin Javascriptissäkin.

Tarkastellaan esimerkkien kautta, miten DOM:ia voidaan hyödyntää:

DOM ja namespacet

DOMDocument->getElementsByTagNameNS

Templatet

Yhtenäisen sivuston eri sivuilla on usein samankaltaisia osia, jotka joudutaan jokaisella sivulla liittämään includella tai copy&pastella jokaiselle sivulle. Näitä osia ovat esimerkiksi navigoinnit ja autentikoinnista huolehtiminen. Entäpä jos joltain sivulta tärkeitä käyttäjätarkistus unohtuukin?

Templateilla (eli sivupohjilla) saavutetaan seuraavia etuja:

Template-esimerkki

Tehdään users.jyu.fi:ssä toimiva template-esimerkki ilman erilliskirjastoja käyttäen Apache handlereita:

Yhteiset tiedostot:

Sivupohja, joka yhdistää pohja.xml:n ja testi.php:n (tai muun samassa tai alihakemistossa olevan .php-tiedoston) tuottaman XHTML-koodin DOM:n avulla:

Template-pohjaan lisätty autentikointi:

Template-ongelmia

Alikansioissa sijaitsevien dokumenttien käsittely pitää tehdä seuraavalla tavalla tai toinen vaihtoehto on kirjoittaa käsittelijään kaikki tiedostoviittaukset absoluuttisilla poluilla ja aina siirtyä käsiteltävän tiedoston kansioon.



// polku käsiteltävään tiedostoon
$file = $_SERVER["PATH_TRANSLATED"];
// oletuspolku (käsittelijän polku)
$sijainti = getcwd();

// suhteellinen polku käsiteltävään _kansioon_
$suhtpolku = ereg_replace("/home(.*)/html/", "../", $file);

// siirrytään kansioon ennen tiedoston käsittelyä
// koska muuten kaikki suhteelliset operaatiot
// toimivat väärin
chdir($suhtpolku);
include($file);
// palataan oletuspaikkaan
chdir($sijainti);
// oletuspaikkaan ei tarvi palata jos käsittelijän omat
// tiedosto-operaatiot tehdään absoluuttisilla poluilla
// vrt "pohja.xml" vs. "/omaHOMEpolku/html/sovellukset/handlers/pohja.xml"

Huomaa kuitenkin, että sivun Javascript-viitteet toimivat normaalisti suhteessa selaimen pyytämään hakemistoon, koska Javascript-tiedostojen haku tapahtuu selaimen toimesta.

Jos template ei toimi XHTML-tiedostojen kanssa, niin vika piilee luultavasti XHTML-dokumenttien xml-deklaraatioissa joita php-tulkki kuvittelee php:ksi. Käytä siis readfile-funktiota html-tiedostoille include-funktion sijaan. toinen vaihtoehto on laittaa .htaccessiin rivi:

php_flag short_open_tag off

Ei voida asettaa valitettavasti users.jyu.fi:ssä, antaa Server Erroria.

Valmiita template-järjestelmiä

PHP:lle on kirjoitettu useita valmiita template-järjestelmiä, jotka helpottavat sivuston luomista ja ylläpitoa. Kts.

Lisätietoa

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/luennot/luento17/
© Antti Ekonoja (anjoekon@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2008-04-29 11:36:33
Informaatioteknologia - Jyväskylän yliopiston IT-tiedekunta ja avoin yliopisto