De Block Functie
Het is ook handig om een block functie te hebben. zo hoef je niet voor elke nieuwe content een bestand te veranderen.
de block functie ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
public function newBlock($blockname, $content) {
$this->blockcontent[$blockname] .= $this->getBlock($blockname); //Block inhoud ophalen
foreach($content as $pattern=>$replacement){
$this->blockcontent[$blockname] = preg_replace("#\{".$pattern."\}#si", $replacement, $this->blockcontent[$blockname]); //Inhoud in block veranden
}
}
?>
public function newBlock($blockname, $content) {
$this->blockcontent[$blockname] .= $this->getBlock($blockname); //Block inhoud ophalen
foreach($content as $pattern=>$replacement){
$this->blockcontent[$blockname] = preg_replace("#\{".$pattern."\}#si", $replacement, $this->blockcontent[$blockname]); //Inhoud in block veranden
}
}
?>
je zeit dat we gebruimaken van de functie getBlock. want, we moeten de inhoud van het bestaan nog ophalen. de functie getBlock ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
public function getBlock($blockname) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
preg_match($regex, $this->tpl, $matches); //Inhoud verkrijgen
return $matches[1]; //Inhoud returnen
}
?>
public function getBlock($blockname) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
preg_match($regex, $this->tpl, $matches); //Inhoud verkrijgen
return $matches[1]; //Inhoud returnen
}
?>
als je dit toe zal voegen werkt het niet. we moeten de blockinhoud nog toevoegen aan de pagina. dit moeten we doen in de functie parse. hier komt nu wat bij:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
foreach($this->blockcontent as $blockname=>$block) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
$this->tpl = preg_replace($regex, $block, $this->tpl); //De inhoud aan de pagina toevoegen.
}
?>
foreach($this->blockcontent as $blockname=>$block) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
$this->tpl = preg_replace($regex, $block, $this->tpl); //De inhoud aan de pagina toevoegen.
}
?>
de hele code ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
class TemplateParser {
var $file = 'start.tpl'; //Het standaard bestand, deze gebruikt hij als er geen bestand wordt opgegeven
var $errors = ''; //Hier komen de errors in
var $getfile = false; //Komt nog...
var $tpl = ''; //Komt nog...
var $blockcontent = array(); //Komt nog...
public function __construct($file = false) {
if($file != "" && $file != false) { //Kijken of $file niet leeg is.
if(!preg_match("#(.+?).tpl#si", $file)) { //Kijken of het bestand de exentie .tpl heeft
$this->errors .= "<b>TemplateParser Error:</b> Het bestand moet de exentie .tpl hebben!<br />";
}
if(!file_exists($file)) { //Kijken of het bestand bestaat
$this->errors .= "<b>TemplateParser Error:</b> het bestand ".$file." bestaat niet!<br />";
}
$this->file = $file;
}
}
public function getfile() {
if(file_exists($this->file)) { //Kijken of bestand bestaat
$this->tpl = file_get_contents($this->file); //Inhoud verkrijgen
$this->getfile = true; //Bestand is opgehaald
}
}
public function getBlock($blockname) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
preg_match($regex, $this->tpl, $matches); //Inhoud verkrijgen
return $matches[1]; //Inhoud returnen
}
public function newBlock($blockname, $content) {
$this->blockcontent[$blockname] .= $this->getBlock($blockname); //Block inhoud ophalen
foreach($content as $pattern=>$replacement){
$this->blockcontent[$blockname] = preg_replace("#\{".$pattern."\}#si", $replacement, $this->blockcontent[$blockname]); //Inhoud in block veranden
}
}
public function set($pattern, $replacement) {
if($this->getfile == false) { //Kijken of het bestand al gelezen is.
$this->getfile(); //Zo niet, bestand inlezen.
}
$this->tpl = preg_replace("#\{".$pattern."\}#si", $replacement, $this->tpl); //{iets} wordt veranderd in iets.
}
public function parse() {
if($this->errors == '') { //Kijken of de errors leeg zijn
if($this->getfile == false) { //Als het bestand nog niet gelezen is, laten lezen.
$this->getfile();
}
foreach($this->blockcontent as $blockname=>$block) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
$this->tpl = preg_replace($regex, $block, $this->tpl); //De inhoud aan de pagina toevoegen.
}
return $this->tpl; //De inhoud returnen
}else{
return $this->errors; //Als er errors zijn, deze returnen.
}
}
}
?>
class TemplateParser {
var $file = 'start.tpl'; //Het standaard bestand, deze gebruikt hij als er geen bestand wordt opgegeven
var $errors = ''; //Hier komen de errors in
var $getfile = false; //Komt nog...
var $tpl = ''; //Komt nog...
var $blockcontent = array(); //Komt nog...
public function __construct($file = false) {
if($file != "" && $file != false) { //Kijken of $file niet leeg is.
if(!preg_match("#(.+?).tpl#si", $file)) { //Kijken of het bestand de exentie .tpl heeft
$this->errors .= "<b>TemplateParser Error:</b> Het bestand moet de exentie .tpl hebben!<br />";
}
if(!file_exists($file)) { //Kijken of het bestand bestaat
$this->errors .= "<b>TemplateParser Error:</b> het bestand ".$file." bestaat niet!<br />";
}
$this->file = $file;
}
}
public function getfile() {
if(file_exists($this->file)) { //Kijken of bestand bestaat
$this->tpl = file_get_contents($this->file); //Inhoud verkrijgen
$this->getfile = true; //Bestand is opgehaald
}
}
public function getBlock($blockname) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
preg_match($regex, $this->tpl, $matches); //Inhoud verkrijgen
return $matches[1]; //Inhoud returnen
}
public function newBlock($blockname, $content) {
$this->blockcontent[$blockname] .= $this->getBlock($blockname); //Block inhoud ophalen
foreach($content as $pattern=>$replacement){
$this->blockcontent[$blockname] = preg_replace("#\{".$pattern."\}#si", $replacement, $this->blockcontent[$blockname]); //Inhoud in block veranden
}
}
public function set($pattern, $replacement) {
if($this->getfile == false) { //Kijken of het bestand al gelezen is.
$this->getfile(); //Zo niet, bestand inlezen.
}
$this->tpl = preg_replace("#\{".$pattern."\}#si", $replacement, $this->tpl); //{iets} wordt veranderd in iets.
}
public function parse() {
if($this->errors == '') { //Kijken of de errors leeg zijn
if($this->getfile == false) { //Als het bestand nog niet gelezen is, laten lezen.
$this->getfile();
}
foreach($this->blockcontent as $blockname=>$block) {
$regex = "#\[start-block ".$blockname."\](.+?)\[end-block ".$blockname."\]#s";
$this->tpl = preg_replace($regex, $block, $this->tpl); //De inhoud aan de pagina toevoegen.
}
return $this->tpl; //De inhoud returnen
}else{
return $this->errors; //Als er errors zijn, deze returnen.
}
}
}
?>
we kunnen het gebruik van de block al gebruiken.
in index.tpl zetten we:
Code (php)
1
2
3
4
5
2
3
4
5
{titel}<br />
{tekst}<br />
[start-block test]
{blockname} {blockid}<br />
[end-block test]
{tekst}<br />
[start-block test]
{blockname} {blockid}<br />
[end-block test]
dan parsen we hem als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
require("naam_van_bestand_waar_de_class_in_staat.php");
$template = new TemplateParser("index.tpl"); //Bestand index.tpl verkrijgen
$template->set("titel", "Titel van de pagina"); //titel veranderen
$template->set("tekst", "Tekst van de pagina"); //tekst veranderen
$template->newBlock("test", array('blockname'=>'Block', 'blockid'=>'1'));
//Zal opleveren: Block 1
$template->newBlock("test", array('blockname'=>'Block', 'blockid'=>'2'));
//Zal oplevereb: Block 2
echo $template->parse();
?>
require("naam_van_bestand_waar_de_class_in_staat.php");
$template = new TemplateParser("index.tpl"); //Bestand index.tpl verkrijgen
$template->set("titel", "Titel van de pagina"); //titel veranderen
$template->set("tekst", "Tekst van de pagina"); //tekst veranderen
$template->newBlock("test", array('blockname'=>'Block', 'blockid'=>'1'));
//Zal opleveren: Block 1
$template->newBlock("test", array('blockname'=>'Block', 'blockid'=>'2'));
//Zal oplevereb: Block 2
echo $template->parse();
?>