Template-Engine-Problem

andulus

Erfahrenes Mitglied
Hallo Community!
Ich habe hier einen Template-Parser der Zuerst das Template lädt und nochdazu eine zweite Datei wo der zu ersetzende Inhalt gespeichert ist der {TEXT} ersetzen soll.
Das funktioniert auch einwandfrei. Nur wenn ich ich statt dem {TEXT} keine Dateieinladen (wo nur reiner HTML-CODE) drinnen steht hab ich ein Problem weil mein Script mir dann den Code nur als Text ausgibt! Wie kann ich das anstellen, dass ich auch ein PHP-Script einladen kann und dieses dann an der Stelle {TEXT} platzieren kann?
Hier ist mein Script. Schonmal danke im Vorraus!
Der Klasse Parser:
PHP:
class parser 
{
	var $template;
	var $temp_content;
	var $file;
	var $var;
	
	function parser($template, $var_array, $file, $var) {
		$this->var = $var;
		$this->template = $template;
		$this->temp_content = file($this->template);
		$this->file = file($file);
		$this->set_file($this->file, $this->var);
		$parsed = $this->rplc($var_array);
		echo implode("", $this->temp_content);
		}
	
	function rplc($var_array) {
		foreach($var_array as $key => $value)
		{
			$regex['var_name'] = "{".strtoupper($key)."}";
			$this->temp_content = preg_replace($regex['var_name'], $value, $this->temp_content);
			$this->temp_content = str_replace("{", "", $this->temp_content);
			$this->temp_content = str_replace("}", "", $this->temp_content);
		}
	}
	
	function set_file($file, $var) {
		$this->temp_content = str_replace($this->var, implode($this->file), $this->temp_content);
		echo $this->temp_content;
	}
}
Das Script dass der Klasse später alles weitere mitteilt (das Ausgabescript):
PHP:
<?
session_start();
include('php/functions.php');

$template = 'tpl/tpl_3.tpl';
$title = "Naruto4all";
$var_array = array("TITLE" => $title);
$set_file = "tpl/news_edit.tpl";
$file_replace = "TEXT";
		   
$tpl = new parser($template, $var_array, $set_file, $file_replace);
?>
lg Andulus
 
Probier mal Folgendes:
PHP:
class simpleTemplateEngine
{

	var $_plainTemplate;
	var $_parsedTemplate;
	var $_is_parsed;
	var $_variables;
	var $_placeholderTags;



	function simpleTemplateEngine()
	{
		$this->_plaintTemplate = '';
		$this->_parsedTemplate = '';
		$this->_is_parsed = false;
		$this->_variables = array();
		$this->_placeholderTags = array('{', '}');
	}


	function setTemplate( $template )
	{
		if( is_string($template) ) {
			return false;
		}
		$this->_plaintTemplate = $template;
		$this->_is_parsed = false;
	}


	function setTemplateFile( $file )
	{
		$this->setTemplate = file_get_contents($file);
	}


	function assignVar( $name, $value )
	{
		if( !is_string($name) || !is_int($name) || !is_string($value) || !is_int($value) ) {
			return false;
		}
		$this->_variables[$name] = $value;
		$this->_is_parsed = false;
		return true;
	}


	function assignVarss( $data )
	{
		if( !is_array($data) ) {
			return false;
		}
		foreach( $data as $key => $value ) {
			$this->assignVar($key, $value);
		}
		return true;
	}


	function getParsedTempalte()
	{
		if( $this->_is_parsed !== true ) {
			$this->_parse();
		}
		return $this->_parsedTemplate;
	}


	function _parse()
	{
		$pattern = '/' . preg_quote($this->_placeholderTags[0]) . '(' . implode('|', array_map('preg_quote', $this->_variables)) . ')' . preg_quote($this->_placeholderTags[1]) . '/e';
		$this->_parsedTemplate = preg_replace($pattern, '_rplc("\1")', $this->_plaintTemplate);
		$this->_is_parsed = true;
	}


	function _rplc( $name )
	{
		if( isset($this->_variables[$name]) ) {
			return $this->_variables[$name];
		} else {
			return $this->_placeholderTags[0] . $name . $this->_placeholderTags[1];
		}
	}


}
PHP:
<?php

	session_start();
	include 'php/functions.php';

	$tpl = new simpleTemplate();
	$tpl->setTemplateFile('tpl/tpl_3.tpl');
	$tpl->assignVar('TITLE', 'Naruto4all');

	echo $tpl->getParsedTemplate();

?>
 
@Gumbo!
Danke, ich werde das gleich morgen ausprobieren, wenn ich wieder an meinem Hauptrechner sitze ;)
lg Andulus
 
So, hab das jetzt mal den Code genauer durchgelesen...
Nun hätte ich eine Frage: Welche Funktion ist für das parsen des PHP-Codes zuständig? :confused:
Danke im vorraus, Andulus!
 
Die _parse()-Funktion selbstverständlich. Nur dass sie nicht direkt aufgerufen werden muss, da dies von der getParsedTemplate()-Funktion übernommen wird.

Übrigens hatte mein Vorschlag noch einen minimalen Fehler, den ich aber bereits korrigiert habe.
 
Wirklich einwandfrei? Gut, denn ich hatte mir die Klasse spontan aus dem Ärmel geschüttelt und sie bisher noch nicht getestet.
 
Naja, einwandrei nicht aber der quelltext hat mir sehr weitergeholfen! :p
lg andulus

#### EDIT #####
Zumindest hat mir die Funktion die das Template geparst hat sehr weitergeholfen, weil ich jetzt weiß
wie man das PHP-Script parst usw. Großes "DANKE" nochmals an dich ;)
Den Rest schaff ich sowieso alleine *lool*
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück