Einzelnen Beitrag anzeigen
Alt 05.04.2009, 17:45   #19 (permalink)
splasch
Neuer Benutzer
 

Standard

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("&auml;","&Auml;","&ouml;","&Ouml;","&uml;","&Uml;","&szlig;","&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
Angehängte Dateien
Dateityp: zip template.zip (6,1 KB, 0x aufgerufen)

Geändert von splasch (05.04.2009 um 17:55 Uhr).
splasch ist offline   Mit Zitat antworten An Facebook senden