Zitat:
|
macht eine kombination aus "div" und "include" sinn?
|
Ja macht es am bestem immer alles Zentrall von einer datei ausgehen aufbauen. Normal von der index.php aus weg.
Fehler die oft Anfangs gemacht werden sind alles in jede Datei zu schreiben also immer und immer wieder die Ganze Html seite in eine Datei zu schreiben ist das was man auf keinen fall machen sollte erschwährt nacher ungemeihn die Arbeit.
@Sebastian
Der Beispiel code hat überhaupt nix mit einer Template zu tun bis auf das du den namen Template dafür verwendest.
@marius
Ich kann dir auch nur raten gleich Template zu verwenden die Code trennung zwischen php und Html erleichtert einen die Fehler suche.
Für den Anfang wenn du möchtest stell ich dir Meine Template klasse zu verfügung.
PHP-Code:
<?php
/**
* Template Klasse
* @version 2.4
* @author Splasch
* Verschachtelte Templates files
* Schleifen Loop Funktion startet gleich
* Loop array prüfung
* Fehler in Loop behoben
**/
class Template
{
protected $template; /* Template Inhalt */
protected $templateDir; // Der Ordner in dem sich die Template-Dateien befinden.
protected $loop; # Array Schleifen füll Werte
public $liste; #Lade Reihenfolge der Template Datein
/**
* Klassen aufruf - Lade Template file von $path
* @param Str $path
*/
public function __construct($path = '')
{
if (file_exists($path) == false)
{
throw new Exception ('Template File nicht gefunden path: `' . $path . '`');
}
if ($tpl = file_get_contents($path))
{
$this->templateDir=dirname($path).DIRECTORY_SEPARATOR; #Kombilität zu Linux"\\"
$this->replace($tpl);
}
}
/**
* replace() - Ersetzt platzhalter für includierte Files und Kommentaren
* @param Str $str enthält der Template
* @return String
*/
protected function replace($str)
{// Includes ersetzen ( {include="..."} )
$liste=null;
while(preg_match_all("/".'{'."include=\"(.*)\"".'}'."/isUe", $str,$file,PREG_PATTERN_ORDER))
{
foreach ($file[1] as $datei)
{
try
{
$file=$this->templateDir.$datei.".tpl";
$liste.=$file.", ";
$this->liste=$liste; # Für fehler suche Ausgabehilfe
if(file_exists($file) == false)
{
throw new Exception();
}
}
catch(Exception $e)
{
die("Template File nicht gefunden path:<b>\"".$file."\"</b><br>"
.$e->getFile().$e->getLine().$e->getTraceAsString()
."<br><b>Ladereihenfolge der Templatefiles: </b>".$liste);
}
} // ende foreach
$str = preg_replace("/".'{'."include=\"(.*)\"".'}'."/isUe", "file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2'.'tpl')", $str);
} // ende while
$this->template=$str;
}
/**
* con - Inhalt Umlaute Sonderzeichen Html Konform umwandeln
* @param Str $in
*/
public function con($in)
{
$suche=array("ä","Ä","ö","Ö","ü","Ü","ß","€");
$ersatz=array("ä","Ä","ö","Ö","¨","&Uml;","ß","&euro");
$in=str_replace ($suche,$ersatz, $in);
return $in;
}
/**
* setLoop - Inhalt Platzhalter für Schleifen
* @param Str $name
* @param Array $inhalt
*/
public function setLoop($name,$inhalt)
{
$this->loop[$name]=$inhalt;
preg_match("/{loop=(.*)}(.*){loop=\\1 end}/Usie", $this->template, $str);
if (!empty($str[1])) // Wenn Schleife dann Teile tauschen
{
#Prüfen ob $inhalt ein array ist
if(is_array($inhalt))
{
$this->replace_loop($str[1],$str[2]); #loop Name und Loop Inhalt übergeben
}
else
{
$this->template = preg_replace("/{loop={$name}}.*{loop=$name end}/Uis", "", $this->template);
}
} #ende empty
}
/**
* replace_loop - Loop Schleifen ausführen und Inhalt Ersetzen
* @param Str $name - Name der Schleife die Ersetzt wird
* @param Str $in - Inhalt der Html Elemente Innerhalb der Schleife
*/
protected function replace_loop($name,$in)
{ #Umlaute Html komform ersetzen
$in=$this->con($in);
if (isset($this->loop[$name]) && is_array($this->loop[$name]))
{ $neu=""; $str=0;$i=0;$last="";
foreach ($this->loop[$name] as $key=>$inhalt)
{ $str++;
foreach($inhalt as $replace)
{ #Hinweis keine umlaute oder Euro zeichen sonst kommt null raus fehler
#var_dump($neu);
if ($str==1){$neu[]= preg_replace("/{.$key}/us", $replace, $in);}# Anzahl der Wiederholungen zusammen bauen
else
{$i++; #echo $replace.":".$key.":".$i;
$neu[$i-1]= preg_replace("/{.$key}/Usi", $replace, $neu[$i-1]);#Nur mehr die Werte aus dem String ersetzen
}
}#end replace
if ($last!=$str){$i=0;}
$last=$str;
}
$neu=implode("", $neu);
$this->template = preg_replace("/{loop={$name}}.*{loop=$name end}/Uis", "$neu", $this->template);
} #ende if isset
}
/**
* __set() - Ersetze den Platzhalter mit dem Inhalt der Variable $replacement
* @param Str $placeholder
* @param Str $replacement
*/
public function __set($placeholder, $replacement)
{
preg_match("/{loop=(.*)}(.*){loop=\\1 end}/Usie", $this->template, $str);
if (!empty($str[1])) // Wenn Schleife dann Teile tauschen
{
$this->replace_loop($str[1],$str[2]); #loop Name und Loop Inhalt übergeben
} #ende empty
$this->template = str_replace('{$'.$placeholder.'}', $replacement, $this->template);
# Wenn Include im Template ist neu Parsen
if (preg_match("/".'{'."include=\"(.*)\"".'}'."/isUe", $this->template))
{
$this->replace($this->template);
} //ende preg_match
} //ende Set
/**
* getTpl() - Gibt den Template Inhalt zurück
* @return String
*/
public function getTpl()
{
// Kommentare löschen
$this->template = preg_replace("/".'\{\*'."(.*)".'\*\}'."/isUe", "", $this->template);
return $this->template;
}
} // Klasse ende
?>
Erklärung und Verwendung der Template klasse siehe Anhang
Hier noch ein parr Beispiele wie man die Template klasse verwendet
index.php datei
PHP-Code:
<?php
// Das Templatesystem einbinden
include("template.php");
$basisTpl="templates"; #Basis Template Verzeichniss vorgeben
// Eine neue Instanz der Template Klasse erzeugen
$tpl = new Template($basisTpl.'\index.tpl');
// Das Template laden
// Die Sprachdatei laden
$langs[] = "de/lang_main.php";
//$lang = $tpl->loadLanguage($langs);
//Schleifen Test
$test['link'][]= 'wert1';
$test['link'][] = 'wert2';
$test['link'][] = 'wert3';
$test['linkname'][]="Ausgabe1";
$test['linkname'][]="Ausgabe2";
$test['linkname'][]="Ausgabe3";
$test['lk'][]= 'bau1';
$test['lk'][] = 'bau2';
$test['lk'][] = 'bau3';
$tpl->setLoop("hallo",$test);
//Schleifen Test
$tet['nix'][]= 'one';
$tet['nix'][] = 'two';
$tet['nix'][] = 'five';
$tet['ni'][]= ' 1';
$tet['ni'][] = ' 2';
$tet['ni'][] = ' 5';
$tpl->setLoop("mux",$tet);
unset ($tet);
$tet['long'][]= 'Einfach';
$tet['long'][] = 'Zweifach';
$tet['long'][] = 'Dreifach';
$tpl->setLoop("einfach",$tet);
//Einfacher Schleifen test
// Dem Platzhalter $titel den Text "Willkommen" zuweisen
$tpl->title="Willkommen";
// Dem Platzhalter $name den Text "Benutzer" zuweisen
$tpl->name='{include="othertemplate"}';
// Dem Platzhalter $time den aktuellen Timestamp zuweisen
$tpl->time=time();
//var_dump($tpl);
// Und das fertige Template ausgeben
echo $tpl->getTpl();
?>
Dazu noch die Template datei selbst
index.tpl
PHP-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>Mein Templatesystem:: {$title}</title>
<meta http-equiv="Content-Type" content="text/xhtml; charset=ISO-8859-1" />
</head>
<body>
<h1>Template Test</h1>
Hallo {$name}. Der Aktuelle Timestamp lautet: {$time}
{* Ein Template einbinden *}
{loop=hallo}
<a href="{$link}">{$linkname}</a>
<b>gjgh{$lk}</b><br>
{loop=mux}
<i>{$nix} {$ni}</i><br>
{loop=mux end}
{loop=hallo end}
{loop=einfach}
<h4>{$long}</h4>
{loop=einfach end}
{include="othertemplate"}
{include="nocheine"}
{include="othertemplate"}
</body>
</html>
Mfg Splasch