Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: sivupohjatesti

Triton [15.04.2009 18:28:45]

#

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();


?>

eq [15.04.2009 19:15:38]

#

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.

Metabolix [15.04.2009 19:40:01]

#

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);
	}
}
?>

Triton [15.04.2009 20:10:37]

#

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.

Metabolix [15.04.2009 20:18:52]

#

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.

Triton [15.04.2009 20:20:00]

#

Niin no joo... tuo on aivan totta :)

tsuriga [15.04.2009 21:29:57]

#

Ja sekä Zendin että PEARin konventioissa privaatit (toinen näistä + itse suosin tätä myös protected-jäsenille) jäsenet suositellaan aloittamaan alaviivalla.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta