Seite 1 von 1

template sys.

Verfasst: 14.11.2006 12:03
von Ambience
Hallo, ich glaube einige wissen das template systeme meine größte leidenschaft sind, und ich versuche gerade mein tpl system auf fordermann zu bekommen.

Code: Alles auswählen

function display($handle)
  {
    if (!isset($this->files[$handle]))
    {
      die('Template->display(): Template was not set');
    }
    else
    {
        //
        // fetch file
        //
        $file = file($this->root . $this->files[$handle]);
        $code = implode('', $file);
        $code_lines = count($file);
        echo $code_lines;
        
        $code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', '\' . ( ( isset($this->assigns[\'\1\']) ) ? $this->assigns[\'\1\'] : \'\' ) . \'', $code);
        $code = "echo \"$code\";";
        
        eval($code);
        return true;
    }
  }
weiß jemand was da nicht stimmt?
Das ist die header.tpl geparst durch die template classe ' . ( ( isset(Array['$1']) ) ? Array['$1'] : '' ) . '
dieses ergebniss bekomme ich... diese preg_replace funktion hab ich vom phpbb geklaut.

Danke

Verfasst: 14.11.2006 12:28
von Olli Oberhausen
Blick zwar nicht ganz durch was du meinst, aber probiers mal damit...

Code: Alles auswählen

 		$code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', '<'.'?php echo isset($this->assigns[\'\1\']) ? $this->assigns[\'\1\'] : \'\'; ?'.'>', $code);

Verfasst: 14.11.2006 12:37
von Ambience
ok aber jetzt parst er noch nicht richtig...

$this->assigns sieht so aus:

Code: Alles auswählen

Array ( [test] => lala )
in der template datei steht {test} aber es wird einfach mit einem leeren wert ersetzt...

Verfasst: 14.11.2006 13:04
von Olli Oberhausen
Wie sieht denn $code nach preg_replace aus?

Verfasst: 14.11.2006 13:52
von Ambience
so:
Das ist die overall_header.tpl geparst durch die template classe assigns['test'])) ? $this->assigns['test'] : ''; ?>

Verfasst: 14.11.2006 14:01
von Olli Oberhausen
Sollte aber so aussehen:

Code: Alles auswählen

Das ist die overall_header.tpl geparst durch die template classe <?php echo isset($this->assigns['test']) ? $this->assigns['test'] : ''; ?>
Hast du den code von mir da nich drin???

Olli

Verfasst: 14.11.2006 14:52
von Ambience
so sieht das ding aus:

Code: Alles auswählen

function display($handle)
  {
    if (!isset($this->files[$handle]))
    {
      die('Template->display(): Template was not set');
    }
    else
    {
        //
        // fetch file
        //
        $file = file($this->root . $this->files[$handle]);
        $code = implode('', $file);
        $code_lines = count($file);       
        $code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', '<'.'?php echo (isset($this->assigns[\'\1\'])) ? $this->assigns[\'\1\'] : \'\'; ?'.'>', $code); 
        print_r($code);
        $code = "echo \"$code\";";
        print_r($this->assigns);
        eval($code);
        return true;
    }
  }

Verfasst: 14.11.2006 15:34
von Olli Oberhausen
Nimm das mal raus...
$code = "echo \"$code\";";

Olli

Verfasst: 14.11.2006 16:13
von Ambience
dann bekomm ich den zur zeit mein beliebtesetn fehler:
Parse error: parse error, unexpected T_STRING in /var/www/virtual/greatbook.de/htdocs/development/GreatBook/includes/template.php(77) : eval()'d code on line 1
code:

Code: Alles auswählen

function display($handle)
  {
    if (!isset($this->files[$handle]))
    {
      die('Template->display(): Template was not set');
    }
    else
    {
        //
        // fetch file
        //
        $file = file($this->root . $this->files[$handle]);
        $code = implode('', $file);
        $code_lines = count($file);       
        $code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', '<'.'?php echo (isset($this->assigns[\'\1\'])) ? $this->assigns[\'\1\'] : \'\'; ?'.'>', $code); 
        eval($code);
        return true;
    }
  }
nochmal danke das du mir hilfst.

edit: den fehler hatte ich schonmal und ich weiß das man da dann noch was zusätzlich escapen muss.. aber nur was? das mit dem escapen war ja das echo in eval, nur jetzt ist es ja weg..

Verfasst: 14.11.2006 16:58
von Ambience
sorry für doppeltpost aber habs jetzt einfach so gelöst:

Code: Alles auswählen

function display($handle)
  {
    if (!isset($this->files[$handle]))
    {
      die('Template->display(): Template was not set');
    }
    else
    {
        //
        // fetch file
        //
        $file = file($this->root . $this->files[$handle]);
        $code = $file;
        $code_lines = count($file);       
        
        for ($i = 0; $i < $code_lines; $i++)
        {
          if (preg_match('#\{([a-z0-9\-_]*?)\}#is', $code[$i], $match))
          {
            $code[$i] = str_replace('{' . $match[1] . '}', $this->assigns[$match[1]], $code[$i]);
          }
        }
        $code = implode('', $code);
                
        eval("echo \"$code\";");
        return true;
    }
  }