[php] probleempje in eigen template engine ..

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
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:
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 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
*kick* niemand die verstand heeft op dit gebied? :(

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Niet zo snel schoppen ajb. Uit de FAQ:
:?Ik krijg niet snel antwoord dus mag ik schoppen?

Wacht minstens 24 uur voor je je topic omhoog schopt. Doe dit dan ook alleen met een zinnige opmerking en dus niet met "Waarom antwoord er nou niemand" nadat je 5 minuten geen antwoord hebt gehad. Sommigen van ons hebben een leven :+

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Waarom haal je de blokken niet op met zoiets als
PHP:
1
preg_match('/<!-- BEGIN: (.*?) -->(.*?)<!-- EINDE: (\1) -->/si',$string,$matches)

?

Klaar voor een nieuwe uitdaging.