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.