Nytkun on ollut jonkin verran sivupohjista puhetta, niin päätin tehdä PHP:llä luokan, jonka avulla voi toteuttaa yksinkertaisia toiminnan ja ulkoasun erottelun. Samalla harjoittelin luokkien käyttöä ja nyt haluaisin hieman kommenttia, että mitä olisi kannattanut tehdä toisin...
*** EasyTemplate.php <?php class EasyTemplate { // Luokan kentät private $document = ""; private $index = array(); private $value = array(); // Hakee tallentaa sivunpohjan kenttään public function setXHTMLdocument($document_path) { $this->document = file_get_contents($document_path); } // Korvaa viitteen tehtävällä public function assign($index, $value) { $this->index[$index] = "{%".$index."%}"; $this->value[count($this->index)-1] = $value; } // Suorittaa XHTML-sivun public function saveXHTML() { echo str_replace($this->index, $this->value, $this->document); } } ?>
*** pohja.html <html> <head> <title>{%title%}</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> </head> <body> <form action="" method="POST"> <input type="text" name="text"> <input type="submit" name="submit" value="Paina!"> <br /><br /><input type="text" name="result" value="{%result%}"> </form> </body> </html>
*** esimerkki.php <?php // Sisällytetään luokka require_once("EasyTemplate.php"); // Luodaan ilmentymä ja asetetaan // sivupohja. $document = new EasyTemplate(); $document->setXHTMLdocument("pohja.html"); // Asetetaan sivun otsikko // ja tuloskentän teksti. $document->assign("title","Hello World.com"); $document->assign("result",$_POST['text']); // Suoritetaan XHTML-tiedosto $document->saveXHTML(); ?>
En ole PHP-asiantuntija, mutta ...
Triton kirjoitti:
<?php -- // Suoritetaan XHTML-tiedosto $document->saveXHTML();
... kuvaavatkohan nämä kaksi riviä (erityisesti jälkimmäinen) sitä, mitä ollaan tekemässä? :)
Joku voisi väitellä peräkkäisistä suuraakkosista funktioiden nimissä tai funktiokutsun argumenttien sijoittelusta, mutta en usko sinun tarkoittaneen tällaisia muutosehdotuksia.
Sen sijaan, en näe trim
-funktion käytölle (assign-funktiossa) mitään perustetta - eihän sille koskaan ole mitään käyttöä, kun sekä tekstin alku että loppu ovat "fixed", eivätkä sisällä whitespacea reunoilla.
edit: tjaa, ei ollut siis aivan viimeisessä muodossaan vielä :)?
P.S. pohja.html ei ole XHTML:ää - ja kun luokka ei ole rajoitettu XHTML:n kanssa käytettäväksi, onko termi välttämätön? Kiertoilmaisuksi kävisi esim. markup.
Assign-funktion sisältö on minusta vähintäänkin epäilyttävä. Mikset käytä samaa indeksiä molemmissa taulukoissa? Myös nimeäminen on tosiaan kummallista, kuten eq jo mainitsikin. Siistisin koodia näin:
<?php # EasyTemplate.php class EasyTemplate { private $template = null; private $variables = array(); // Hakee sivupohjan public function loadTemplate($document_path) { $this->template = file_get_contents($document_path); } // Lisää muuttujalle arvon public function assign($index, $value) { $this->variables['{%'.$index.'%}'] = $value; } // Tulostaa sivun public function output() { echo str_replace(array_keys($this->variables), array_values($this->variables), $this->template); } } ?>
No siis kyllä tuo Assign-funktio näytti minustakin omituiselta, mutta ongelma oli se, etten tiennyt array_keys()-funktion olemassa oloa, jotta olisi voinut lukea alkioiden avaimia (tätä kuitenkin aluksi yritin)... No teidän neuvojen avulla sainkin tuon toimivaan ihan kivasti.
Triton kirjoitti:
No siis kyllä tuo Assign-funktio näytti minustakin omituiselta, mutta ongelma oli se, etten tiennyt array_keys()-funktion olemassa oloa —
Olisit silti voinut kirjoittaa sen loogisemmin vaikka näin:
<?php public function assign($index, $value) { $this->index[$index] = "{%".$index."%}"; $this->value[$index] = $value; } ?>
Mutta eipä mitään, tekemällä oppii.
Niin no joo... tuo on aivan totta :)
Ja sekä Zendin että PEARin konventioissa privaatit (toinen näistä + itse suosin tätä myös protected-jäsenille) jäsenet suositellaan aloittamaan alaviivalla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.