template sys.

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

template sys.

Beitrag 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
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag 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);
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag 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...
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Wie sieht denn $code nach preg_replace aus?
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag von Ambience »

so:
Das ist die overall_header.tpl geparst durch die template classe assigns['test'])) ? $this->assigns['test'] : ''; ?>
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag 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
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag 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;
    }
  }
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Nimm das mal raus...
$code = "echo \"$code\";";

Olli
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag 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..
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag 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;
    }
  }
Antworten

Zurück zu „Coding & Technik“