Template Schleife erstellen

hhunderter

Erfahrenes Mitglied
Hi,

ich bräuchte mal ein Denkanstoß wie wie in meinen einfachen Tamplate-System Schleifen rein kriege.
ich wollte folgendes machen : in meiner Template-Seite zb. ein Dropdown-Menü füllen:
Code:
<select name=''>
{foreach=array}
<option value='{key}'>{var}</option>
{/foreach}
</select>
 
Ein selbst geschriebenes Templates-System? Wenn man sich mal Smarty anschaut könnte es z.B. so aussehen:
Code:
{foreach array=arrayname var=item}
<option value='{var->key}'>{var->title}</option>
{/foreach}
 
Das man es mit Smarty machen könnte ist mir klar nur ich wollte dabei auch etwas Lernen und mit sowas verschachteltest kann ich nix draus Lernen...
Selbt geschreiben ist auch gelogen hab des aus nen Tutorial , im mom sieht des so aus:
PHP:
<?php
class Template
{

    private $templateDir = "";
    private $languageDir = "";
	
	//Platzhalter.
    private $leftDelimiter = '{';
    private $rightDelimiter = '}';

	//Standard-Platzhalter.
    private $leftDelimiterV = '{$';
    private $rightDelimiterV = '}';

    //Der linke Delimter für eine Funktion.
    private $leftDelimiterF = '{';
    private $rightDelimiterF = '}';

    //Der linke Delimter für ein Kommentar.
    private $leftDelimiterC = '\{\*';
    private $rightDelimiterC = '\*\}';

    //Der linke Delimter für eine Sprachvariable
    private $leftDelimiterL = '\{L_';
    private $rightDelimiterL = '\}';

    //Der komplette Pfad der Templatedatei.
    private $templateFile = "";
    private $languageFile = "";

    //Der Dateiname der Templatedatei.
    private $templateName = "";

    //Der Inhalt des Templates.
    private $template = "";


    //Die Pfade festlegen.
    public function __construct($tpl_dir = "", $lang_dir = "") {
        // Template Ordner
        if ( !empty($tpl_dir) ) {
            $this->templateDir = $tpl_dir;
        }

        // Sprachdatei Ordner
        if ( !empty($lang_dir) ) {
            $this->languageDir = $lang_dir;
        }
    }

    //Eine Templatedatei öffnen.
    public function load($file)    {
        // Eigenschaften zuweisen
        $this->templateName = $file;
        $this->templateFile = $this->templateDir.$file;

        // Wenn ein Dateiname übergeben wurde, versuchen, die Datei zu öffnen
        if( !empty($this->templateFile) ) {
            if( file_exists($this->templateFile) ) {
                $this->template = file_get_contents($this->templateFile);
            } else {
                return false;
            }
        } else {
           return false;
        }

        // Funktionen parsen
		if (!empty($this->template))
			$this->parseFunctions();
    }

    //Einen Standard-Platzhalter ersetzen.
    public function assign($replace, $replacement) {
		if (!empty($this->template))
			$this->template = @str_replace( $this->leftDelimiterV.$replace.$this->rightDelimiterV,$replacement, $this->template );
    }

    //Die Sprachdateien öffnen und Sprachvariablem im Template ersetzen.
    public function loadLanguage($files) {
        $this->languageFiles = $files;

        // Versuchen, alle Sprachdateien einzubinden
        for( $i = 0; $i < count( $this->languageFiles ); $i++ ) {
            if ( !file_exists( $this->languageDir .$this->languageFiles[$i] ) ) {
                return false;
            } else {
                 include_once( $this->languageDir .$this->languageFiles[$i] );
                 // Jetzt steht das Array $lang zur Verfügung
            }
        }

        // Die Sprachvariablen mit dem Text ersetzen
		if (!empty($this->template) and isset($lang))
			$this->replaceLangVars($lang);

        // $lang zurückgeben, damit $lang auch im PHP-Code verwendet werden kann
		if (isset($lang))
			return $lang;
    }
	
	    //Die Sprachvariablem im Template ersetzen.
    public function setLanguage($lang) {
        // Die Sprachvariablen mit dem Text ersetzen
		if (!empty($this->template) and isset($lang))
			$this->replaceLangVars($lang);

        // $lang zurückgeben, damit $lang auch im PHP-Code verwendet werden kann
		if (isset($lang))
			return $lang;
    }

    //Sprachvariablen im Template ersetzen.
    private function replaceLangVars($lang) {
		if (!empty($this->template) and isset($lang) and is_array($lang))
			$this->template = @preg_replace("/\{L_(.*)\}/isUe", "\$lang[strtolower('\\1')]", $this->template);
    }

    //Includes parsen und Kommentare aus dem Template entfernen.
    private function parseFunctions() {
		if (!empty($this->template)){
			// Includes ersetzen ( {include file="..."} )
			while( @preg_match( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF ."/isUe", $this->template) ){
				$this->template = @preg_replace( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe","file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2')",$this->template );
			}
			
			// Includes ersetzen ( {include file="..."} )
			//while( @preg_match( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF ."/isUe", $this->template) ){
			//	$this->template = @preg_replace( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe","file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2')",$this->template );
			//}

			// Kommentare löschen
			$this->template = @preg_replace( "/" .$this->leftDelimiterC ."(.*)" .$this->rightDelimiterC ."/isUe","", $this->template );
		}
    }
	
    //Alle Platzhalter ersetzen.
    private function clear() {
		if (!empty($this->template))
			$this->template = @preg_replace( "/" .$this->leftDelimiter ."(.*)" .$this->rightDelimiter ."/isUe","", $this->template );
    }

    //Das "fertige Template" ausgeben.
    public function display($clear=False) {
		if ($clear == True)
			$this->clear();
        echo $this->template;
    }
	
	//Das "fertige Template" ausgeben.
    public function _Return($clear=False) {
		if ($clear == True)
			$this->clear();
        return $this->template;
    }
}
?>

ich habe keine Idee wie ich das Realisieren könnte...
Wie kriege ich jetzt so eine Foreach-Schleife in mein System rein?
 
Zurück