PHP DOM ja Templatet - Luento 17
Tutkitaan, miten PHP:llä voidaan hyödyntää DOM-rajapintaa, ulkopuolisia verkkopalveluita ja templateja.
Luentotaltiointi
- sovellukset17.mp3 16M
- sovellukset17.wmv 58M
- sovellukset17.avi 211M
PHP DOM
DOM-rajapinta PHP:ssa toimii hyvin samaan tapaan kuin Javascriptissäkin.
Tarkastellaan esimerkkien kautta, miten DOM:ia voidaan hyödyntää:
- Taulukon luominen DOMDocumentin avulla
- XML-datan lataaminen DOMDocument->load-metodin avulla.
- Elementtien siirtäminen DOMDocumentista toiseen ja epävalidin dokumentin käsittely
- RSS-feedin tekeminen ATK-keskuksen ajankohtaista tiedoista
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:
- Yhteiset osat kootaan samaan paikkaan
- Yhteiset osat liitetään automaattisesti sivulle
- Sivun tekijän tarvitsee keskittyä ainoastaan sisältöosaan
- Voidaan myös pyrkiä erottamaan ohjelmalogiikka esitystavasta.
- Erotetaan SQL:t ja ohjelmakoodit muualle
- Sivun sisällön, ulkoasun ja bisneslogiikan tuottajat voivat tehdä työtä erikseen
- Ei kannata kuitenkaan pyörää keksiä uudelleen - näiden välillä on aina jonkinlaisia kytköksiä
Template-esimerkki
Tehdään users.jyu.fi:ssä toimiva template-esimerkki ilman erilliskirjastoja käyttäen Apache handlereita:
Yhteiset tiedostot:
- .htaccess - määrätää template.tmpl php-tiedostojen käsittelijäksi, .tmpl on php5-skripti itsessään
- testi.php - sivun sisältö, voidaan suorittaa php-komentoja
- pohja.xml - sivupohja, jossa navigoinnit
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.

Käyttäjien kommentit