Pattern von (if, elseif und if) im Template (tpl)

EuroCent

Klappstuhl 2.0
Kann mir einer erklären wie Ich es hinbekomme das aus meinem Template:
HTML:
{if="name==Hans"}
<p>Hallo Hans!</p>
{elseif="name==Hase"}
<p>Hallo Hase!</p>
{else}
<p>Hallo Du Da!</p>
{/if}

oder mit:
HTML:
{if isLogin == true}
<p>Hallo Hans!</p>
{elseif isLogin != true}
<p>Hallo Hase!</p>
{elseif isLogin != true || isLogin == Null || isLogin == ''}
<p>Hallo Hase!</p>
{else}
<p>Hallo Du Da!</p>
{/if}

Mit preg_match(); hab Ich mich schon versucht es heraus zu Filtern aber irgendwie bekomme Ich gar kein Ergebnis! :(

Mein Probier-Code:
PHP:
   //IF ELSEIF ELSE ENDIF
   private $canIfL = '{if=';
   private $canIfR = '}';
   private $canEndIf = '{/if}';
  private function ifparseFunction() {
     // Prüfe nur auf IF
    if(preg_match("/".$this->canIfL."\"(.*)\"".$this->canIfR."(.*)".$this->canEndIf."/isUe", $this->tpl)) {
      echo "Function success!";
     }
   }

Hoffe man kann mir bei dem Problem helfen :)

Wäre auch sehr nett wenn man mir preg_replace(); erklären könnte, da Ich es irgendwie auch nicht so ganz verstehe :/

Test mit {LIF(Text)}

Mein Code:
PHP:
    $this->tpl = preg_replace("/".$this->linksHalt."\(.*)".$this->rechtsHalt."/isUe", "Guten Tag!", $this->tpl);
 
Ich lass das HTML durch einen Template Parser damit er mit die stellen die in {} klammern stehen quasi übersetzt.
Mit {include file="file.tpl"} funktioniert es auch :)

Der satz oben sollte enden "Kann mir einer erklären wie Ich es hinbekomme das aus meinem Template {if""}{elseif""}{else} und {if} es so hinbekomme das er mir das in PHP parst und es dann richtig in HTMl wieder aus gibt?"

Da war Ich wohl dann etwas zu Eifrig :)

Ich schildere Dir gerne nochmals folgendes:
Ich möchte das mein Parser die anweisungen in diesem Template die {if""}{elseif""}{else} und {if} so um parst dass dann daraus if {} elseif {} else { } wird die überprüfung die dazwischen stehen im HTML-Dokument ausgibt.

Jenachdem welche Bedingung erfüllt.

Hoffe man versteht mich nun besser.

Hier das Template.php
PHP:
<?php
class TPLClass {
   
   // Index-Pfad zu den Templates
   private $tplDir = "templates/tpl/";
   // Index-Pfad zu den Sprachdateien
   private $langDir = "templates/language/";
   
   // Platzhalter
   private $leftDelimeter = '{$';
   private $rightDelimeter = '}';
   
   // Functionen
   private $leftDelimeterF = '{';
   private $rightDelimeterF = '}';
   
   // Kommentar
   private $leftDelimeterC = '\{\*';
   private $rightDelimeterC = '\*\}';
   
   // Sprachvariablen
   private $leftDelimeterL = '\{L_';
   private $rightDelimeterL = '\}';
   
   // Kompletter-Pfad der Template-Datei
   private $tplFile = "";
   
   // Kompletter-Pfad der Language-Datei
   private $langFile = "";
   
   // Name des Templates
   private $tplName = "";
   
   /**
    * Template Inhalt (ungeparst)
    */
   private $tpl = "";
   
   // Konstruktor der Pfade etc... anlegt
   public function __construct($tplDir = "", $langDir = "") {
     // Template Ordner
     if(!empty($tplDir)) $this->tplDir = $tplDir;
     
     // Sprachdateien Ordner
     if(!empty($langDir)) $this->langDir = $langDir;
   }
   
   // Öffnet die Template-Datei
   public function load($tplFile) {
     // Zuweisen von Eigenschaften
     $this->tplName = $tplFile;
     $this->tplFile = $this->tplDir.$tplFile;
     
     // Überprüfen und öffnen der Template-Datei
     if(!empty($this->tplFile)) {
       if(file_exists($this->tplFile) === false) {
         $this->tpl = '';
         $this->tpl .= file_get_contents($this->tplDir.'header.tpl');
         $this->tpl .= "\n<div class=\"container\">
         <h1>Template-Error</h1>
         <p>{L_TPL_ERROR}</p>
         </div>\n";
         
         $this->tpl .= file_get_contents($this->tplDir.'footer.tpl');
       } else {
          $this->tpl = file_get_contents($this->tplFile);
       }
     } else {
       return false;
     }
     
     // Weiter zum Parsen der Functionen etc...
     $this->parseFunctions();
   }
   
   // Setzen der Parameter aus der Template-Datei
   public function params($inVar, $showVar) {
     $this->tpl = str_replace($this->leftDelimeter.$inVar.$this->rightDelimeter, $showVar, $this->tpl);
   }
   
   // Language-Datei wird geladen
   public function loadLang($langFile) {
     $this->langFile = $langFile;
     
     // Alle Sprachdateien einbinden
     for ($i=0; $i < count($this->langFile); $i++) {
       if(file_exists($this->langFile[$i])) include_once($this->langFile[$i]);
       else return false;
     }
     
     // Sprachvariablen ersetzen
     $this->replaceLangVars($lang);
     
     return $lang;
   }
   
   // Setzen der Parameter aus der language-Datei
   private function replaceLangVars($lang) {
       $replace = preg_replace("/\{L_(.*)\}/isUe", "\$lang[strtolower('\\1')]", $this->tpl);
       if($replace === false) return false;
       else {
         $this->tpl = $replace;
         return true;
       }
   }
   
   // Includes und/Oder Kommentare aus dem Template Entfernen
   private function parseFunctions() {     
     //Includes ({include file="..."}       
     while(preg_match("/".$this->leftDelimeterF."include file=\"(.*)\.(.*)\"".$this->rightDelimeterF."/isUe", $this->tpl)) {
       $this->tpl = preg_replace("/".$this->leftDelimeterF."include file=\"(.*)\.(.*)\"".$this->rightDelimeterF."/isUe", "file_get_contents(\$this->tplDir.'\\1'.'.'.'\\2')", $this->tpl);
     }
         
     // Kommentare löschen
     $this->tpl = preg_replace("/".$this->leftDelimeterC."(.*)".$this->rightDelimeterC."/is", "", $this->tpl);
   }
   
   // Gibt das Template geparst zurück
   public function output() {
     echo $this->tpl;
   }
}
?>
 
Zurück