Ik ben gisteravond even bezig geweest met het maken van mijn eigen -hele simpele- template engine.
Het ging allemaal goed totdat ik bij de implantatie van blocks kwam.
Ik wil ongeveer et volgende:
voorbeeld template file:
En dan in je php zoiets als:
Het idee is leuk alleen et werkt nog niet..
hier de source van mijn template klasse.
Het betreft uiteraard de parse_sub functie.
Het probleem is dat ie wel het begin van een block kan vinden, maar niet het GOEDE einde.
Ik deed bijv. parse_sub("login"); en dan stopte ie pas bij et einde van logout ..
Ziet iemand de fout in mijn parse_sub functie?
P.S. die echo's (van block found enzo) zijn alleen voor debugging, zodat ik zie waar et mis gaat
Het ging allemaal goed totdat ik bij de implantatie van blocks kwam.
Ik wil ongeveer et volgende:
voorbeeld template file:
code:
1
2
3
4
5
6
7
8
| blablabla dit is gewoon normale data het is vandaag [datum] en nu iets leuks <!-- BEGIN: login --> Je bent ingelogged! <!-- EINDE: login --> <!-- BEGIN: logout --> Je bent uiygelogged! <!-- EINDE: logout --> |
En dan in je php zoiets als:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| <? include("tpl_class.php"); $hoi = new template(); $hoi->read_template("index.tpl"); if ($login == true) $hoi->parse_sub("login"); else $hoi->parse_sub("logout"); $hoi->view_template(); ?> |
Het idee is leuk alleen et werkt nog niet..
hier de source van mijn template klasse.
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
| <? class template { var $tbl; function read_template($file) { $this->tbl = file($file); } function parse_sub($naam) { for ($i = 0; $i < count($this->tbl); $i++) { if(ereg("<!-- BEGIN: $naam -->", $this->tbl[$i])) { echo "<br>block found!<br>"; $k = $i; while(!ereg("<!-- EINDE: $naam -->", $this->tbl[$i]) && $k < count($this->tbl)) { $k++; if (!ereg("<!-- EINDE: $naam -->", $this->tbl[$i])) { $this->output = $this->output . $this->tbl[$k]; echo "<b>".$this->tbl[$k]."</b><br>"; } } echo "Block end found<br>"; } else echo "$i: No block found (".$this->tbl[$i].") - (".strlen($this->tbl[$i]).")<br>"; } } function parse_template($vars, $values) { for ($i = 0; $i < count($vars); $i++) $this->tbl = str_replace($vars[$i], $values[$i], $this->tbl); for ($i = 0; $i < count($this->tbl); $i++) { if (substr($this->tbl[$i], 0, 10) == "<!-- BEGIN") $block = 1; if ($block != 1) $this->output = $this->output . $this->tbl[$i]; if (substr($this->tbl[$i], 0, 10) == "<!-- EINDE") $block = 0; } } function view_template() { echo $this->output; } } ?> |
Het betreft uiteraard de parse_sub functie.
Het probleem is dat ie wel het begin van een block kan vinden, maar niet het GOEDE einde.
Ik deed bijv. parse_sub("login"); en dan stopte ie pas bij et einde van logout ..
Ziet iemand de fout in mijn parse_sub functie?
P.S. die echo's (van block found enzo) zijn alleen voor debugging, zodat ik zie waar et mis gaat
[ Voor 13% gewijzigd door Verwijderd op 09-02-2003 12:43 ]