Problem mit Template

alex130

Erfahrenes Mitglied
Hi
Ich wollte meine Seite auf ein Template aufbauen und habe es mal selbst versucht, doch es funktoniert nicht, es steht immer noch { box1}, { box2 }, usw da.
Hier ist mein Code:
PHP:
<?php

ob_start ();
$template = implode(file ('templates/template.html'));
  
################################## TEMPLATE VARIABLEN ##################################
$title = "Test";  
$box1 = include("templates/templates/box1.php");
$box2 = include("templates/box2.php");
$content = include("templates/content.php");
$footer = "Copyright";


echo str_replace ('{ title }', $title, $template);  
echo str_replace ('{ box1 }', $box1, $template);
echo str_replace ('{ box2 }', $box2, $template);
echo str_replace ('{ content }', $content, $template);
echo str_replace ('{ footer }', $footer, $template);

ob_end_flush ();
?>
 
Hi, Der Fehler liegt wie so oft im Detail ;)
1.) implode(file($filename)) ist unnötig, ein file_get_contents($filename) bringt Dir das Template in die Variable
2.) Tausch doch mal include() gegen file_get_contents($filename) aus - damit hast Du erstmal Dein Template im Speicher der Variable.

LG
Andy
 
Hi
Hab das jetzt gemacht, aber das Layout wird viel öfter angezeigt, nicht nur einmal....
was mach ich falsch?
lg
 
Sorry, habe ich nicht gesehen :D
da ist noch ein Fehler:

Dein str_replace ist arg falsch ;)
Das muss dann SO funktionieren:
Code:
$template = str_replace ('{ title }', $title, $template);   
$template = str_replace ('{ box1 }', $box1, $template); 
$template = str_replace ('{ box2 }', $box2, $template); 
$template = str_replace ('{ content }', $content, $template); 
$template = str_replace ('{ footer }', $footer, $template); 

echo $template;

LG
Andy
 
Ok und ein Problem hab ich noch und zwar wird mein Content Bereich nicht angezeigt, liegt das daran, dass meine content.php so aussieht:
PHP:
<?php

  	switch($_GET['site']) {
	case "test":include("test.php");
	break;
		
	default:include("default.php");
};

?>
?
Doch wie kann ich das ändern?
lg
 
Deine includierten Files sollten in Deiner Konstellation ein "return $inhalt" ausgeben, ansonsten wird das nichts *denke ich zumindest*
 
Wo muss ich das dann hin machen? Kannst du mir das bitte ein bisschen genauer erklren?
hab jetzt im Quellcode nachgeschaut und gesehen, dass der php Code dort steht, dass heißt er wurde nicht ausgeführt.
lg
 
also ich sehe keine fehle rin dem switch...

per include wird eingebunden.... sehe keinen fehler...ist denn in deinen content PHP schon was drin?
 
nachdem Du das PHP-File in der Variable hast, kannst Du zB folgendes machen:
PHP:
$content = eval(file_get_contents("file.php"));
echo $content;

oder Du includierst das PHP-File an der Stelle, wo im HTML-Code etwas erscheinen soll,
musst DANNallerdingsdie Funktionen so schreiben, dass sie etwasmit "echo" zurückgeben,da die Funktion "include() nichts zurückgibt.

Um ein besseres Template-System zu schreiben,bedarf es allerdings einen Umbau Deiner Files:
Du erstellst besser HTML-Code als Templates,und tauscht die Template-variablen mit den Rückgabewerten aus Funktionen aus - das geht besser und einfacher. Als Alternative kann ich Dir auch vorschlagen,Smarty (http://smarty.php.net) zu nutzen,denn dort ist alles fertig und Du kannst es ganz einfach einbinden.

LG
Andy
 
Hi
Kannst du mir bitte ein bsp. für ein besseres Template System geben? Würde es gerne gleich von Anfang an gut aufbauen....
lg
 
Zurück