Template Klasse

Danke für die vielen Antworten...
Habe mir aber überlegt das gleich in der index.php mit str_replace() zu machen.
Ist ja im prinzip genauso.

Habe aber trotzdem ein paar Erklärungen hinzugefügt
 
Zuletzt bearbeitet von einem Moderator:
Was mir unklar bleibt, warum preg_replace immer als performance-Fresser dargestellt wird. Konnte das noch nie nachvollziehen.
Hab grad mal spasseshalber einen durchschnittlichen 10KB-Text mit preg_replace, preg_match_all und str_replace durchsuchen und ersetzen lassen. str_replace ist bei 1000 Durchgängen grade mal 3 Hunderstel Sekunden schneller. Also was spricht vom Standpunkt der Perfomance dagegen?
 
10KB-Text mit preg_replace, preg_match_all und str_replace durchsuchen und ersetzen lassen.
Super, ganz clever. Wieso bringt uns dieser Vergleich rein garnichts. Weil du zum Parsen eines Layouts, dass die PHP Layoutspracheeigenschaften verwendet, keine dieser drei Funktionen brauchst. Es wird einer Variable ein Inhalt zugewiesen und der Inhalt dieser Variable im Layout ausgegeben. Das geht deutlich schneller, als im Layout nach einem Wort zu suchen und dieses zu ersetzen. Noch schlimmer wird das ganze, wenn du nach Pseudo Code im Quelltext suchen musst. Steht aber auch alles nochmal in Mairhofer's Beitrag. Nur lesen.
MfG, Andy
 
@maxivB
Also die Kommentare waren jetzt nicht wirklich hilfreich ;) Ich denke aber das Problem mit dem Verständnis des Ablaufes liegt daran, das du manche einfache Dinge sehr kompliziert umsetzt.
Zum Beispiel das erstellen des Arrays $r_strs in exit_block(), wo du, wenn ich das richtig verstehe, nur ein array_uniq() umsetzt über eine FOREACH Schleife. Und das könntest du bereits in der Methode replace_block() erledigen, indem du nicht via array_push() einfach alles reinschiebst.

Ich habe versucht deine Klasse und besonders die exit_block() Methode zu verstehen. Ich habe versucht es nachzuprogrammieren, aber ich kapier es nicht.

Warum kannst du einen Platzhalter mit einem Wert für einen Block mehrfach belegen? In deinem Beispiel belegst du den Platzhalter "hallo" mehrfach mit den Werten von $c.
Dann berechnest du aus den mit replace_block() zugeordneten Ersetzungen irgendwas. Und mit dem irgendwas fängst du dann das ersetzen an und zwar genau "irgendwas/irgendwasanderes" mal.

Wie du merkst ich steig da leider noch nicht hinter.
 
Das kommt immer darauf an, wie gross und umfangreich das zu durchsuchende Template ist und wie viele Subtemplates genutzt werden.
MfG, Andy
 
Ich habe auch ein Problem, und zwar wollte ich mir meine eigene Template-Klasse erstellen, die außer sich selbst und der Instanzierung nichts benötigt. Der bisherige Code lautet folgendermaßen:

PHP:
<?php
	
/**
*
*author: Jim Martens
*Erstellung meiner Template-Klasse
*
*/

//Definition der template-Klasse

class template
{
	//Variablen, die über die ganze Klasse benötigt werden
	var $_tpldata = array('.' => array(0 => array()));
	var $_rootref;
	
	var $root_path;
	var $root = '';
	var $template_path = 'templates/';
	var $files = array();
	var $filename = array();
	var $inherit_root = '';
	var $files_inherit = array();
	var $files_template = array();
	
	function assign_vars($vararray)
	{
		foreach ($vararray as $key => $val)
		{
			$this->_rootref[$key] = $val;
		}

		return true;
	}
	
	function set_filenames($filename_array)
	{
		if (!is_array($filename_array))
		{
			return false;
		}
		foreach ($filename_array as $handle => $filename)
		{
			if (empty($filename))
			{
				trigger_error("template->set_filenames: Empty filename specified for $handle", E_USER_ERROR);
			}
			else
			{
				$this->filename[$handle] = $filename;
				$this->files[$handle] = $this->root . '/' . $filename;
			}
		}
		
		return true;
	}
}

?>

Nun bleibt meine Frage, wie ich es hinbekommen kann, dass ich z.B. in der index.php einfach folgendes schreiben kann:
PHP:
$template->assign_vars(array(
     'TITLE'    =>    'Mein Projekt',
     'CONTENT'  =>  'Es funktioniert.',
));


$template->set_filenames(array(
      'body'    =>    'index.html)
);

Am Anfang wird noch folgendes gemacht:
PHP:
$template = new template();
sodass ich dann in der index.html nur noch folgendes schreiben muss:
PHP:
<html>
	<head>
		<title>{TITLE}</title>
		<link rel="stylesheet" type="text/css" href="../theme/design.css">
	</head>
	<body>
		<table id="main" cellpadding="0" cellspacing="0">
			<tr>
				<td id="content">{CONTENT}</td>
			</tr>
		</table>
	</body>
</html>

und dann, wenn ich im Browser auf die index.php gehe auch die Seite angezeigt bekomme?
 
Hallo.

Ich kann auch nur immer wieder, wie auch bereits vor mir Dennis Wronka, darauf hinweisen, dass der Support von PHP 4 mit dem Release der Version 4.4.9 offiziell eingestellt wurde. Dieser Schritt wurde bereits letztes Jahr angekündigt und sollte mit dem Start der Olympischen Spiele in Bejing zusammenfallen. Diesen Schuss haben leider noch nicht alle gehört, denn es gibt immer noch zu viele Leute die in PHP4 coden und Hoster (siehe 1&1), die das kalte Essen von gestern noch anbieten. Ich kann nur empfehlen, dass schnellst möglich alle ihre alten und noch verwendbaren Klassen oder Scripte auf den Stand von PHP5 bringen (ist auch komfortabler). Ich wuerde dir also empfehlen deine Klasse moeglichst schnell um zu stellen.

MfG, Andy
 
Problem ist, dass ich dann umso weniger wüsste, wie ich das machen sollte. Zudem bin ich ja noch nicht fertig mit der Klasse. Wenn sie fertig ist und funktioniert mache ich mich an das Umstellen an PHP5.
 
Zurück