Blöcke bei Templatesystem

j cop

Erfahrenes Mitglied
Hallo,

ich arbeite zur zeit an meinem Templatesystem. Alles klappt prima. Das einzige Problem: Ich schaff es nicht auch Blöcke einzubauen.
Mit Block meine ich sowas(in der html-Datei):
Code:
<!--BEGIN block-->
       {block.text}
       {block.platzhalter}
<!--END block-->
Aber zuerst mal das Templatesystem, wie es jetzt ist:
PHP:
<?php
class template
{

    public $template_dir = "";
    public $language_dir = "";
    public $left_delimiter = '{';
    public $right_delimiter = '}';
    protected $template_file = "";
    protected $language_file = "";
    protected $template_name = "";
    protected $template = array();
    public $tplvars = array();

    public function template($tpl_dir = "", $lang_dir = "") 
    {
        // Template Ordner ändern
        if (!empty($tpl_dir)) {
            $this->template_dir = $tpl_dir;
        }

        // Language Ordner ändern
        if (!empty($lang_dir)) {
            $this->language_dir = $lang_dir;
        }
        
        return true;
    }

    
    /**
     * Die Templatedatei öffnen
     *
     * @access    public
     * @param     string $file Dateiname des Templates
     * @return    boolean
     */
    public function load($file,$name)
    {
        // Die Eigenschaften zuweisen
        $this->template_name = $file;
        $this->template_file = $this->template_dir.$file;

        // Wenn ein Dateiname übergeben wurde, versuchen, die Datei zu öffnen
        if(!empty($this->template_file)) {
            if($fp = @fopen($this->template_file, "r")) {
                // Den Inhalt des Templates einlesen
                $this->template[$name] = fread($fp, filesize($this->template_file)); 
                fclose ($fp); 
            }
	    else 
	    {
		return false;
            }
        }        
        return true;
    }
    
    /**
     * Die Standard-Platzhalter ersetzen
     *
     * @access    public
     * @param     string $replace      Name of var which should be replaced
     * @param     string $replacement  Text with which to replace the var
     * @return    boolean
     */
    public function assign($vars)
    {
	reset ($vars);
	while (list($key, $val) = each($vars))
	{
		$this->tplvars[0][$key] = $val;
	}
	foreach($vars as $key => $wert)
	{
        $this->template = str_replace($this->left_delimiter.$key.$this->right_delimiter, $wert, $this->template);
	}
        return  true;
    }

       /**
     * Das fertige Template ausgeben
     *
     * @access    public
     * @return    boolean
     */
    public function out($name)
    {
        echo $this->template[$name];
        return true;
    }
}
?>

Ich will nun im PHP-Code einfach nur das angeben müssen, um den Block zu aktivieren:
PHP:
$tpl->assign_block("Name des Blocks",array(Platzhalter =>zuweisen))

Wenn ich den Block nie mit assign_block aktiviere soll er ganz weggelassen werden(z. B. um Inhalte nur für registierte Benutzer anzuzeigen). Manche Blöcke müssen auch mehrmals verwendet werden(um Inhalte aus der Datenbank anzuzeigen).

Ich glaub, das war es soweit.
Würde mich freuen wenn ihr irgendeine Idee habt :)
Danke!!
 
Naja man sollte noch erwähnen das dieses Template System ein Tutorial ist :)

http://www.inphp.de/forum/showthread.php?t=124

Was Blöcke einbauen geht , naja im Prinzip hab ich das recht gut verstanden soweit , natürlich hab ich mich auch daran versucht das etwas zu erweitern erstmal , aber nur so das ich einfach mal nen link eintrage , klein Anfangen heisst die Devise.

Also in der Form in der Template Datei abgelegt

{url site="..."}

Dann musst dem Scrpt nur sagen suche diesen Ausdruck

$pattern = "/{url site=\"(.*)\"} /";

und ersetze dann mache einen Link draus. Erinnerte mich bisher recht stark an normales ersetzen. Des weiteren findest Du im Tutorial noch weitere Ding wo einer fragte wie man eine Foreach schleife einbindet etc.

Gesammt sah das bei mir so aus dann erstmal :

PHP:
<?php
       function replaceFunctions(){

      /****************************************************
       Section URL ersetzen
            Beispiel : {url seite="www.ffa4dow.de"}
                  oder {url seite="http://www.ffa4dow.de"}
      ****************************************************/

      //Url erkennen http://www.seite.de und dann ersetzen
      $pattern = "/{url seite=\"(http:\/\/){1}(.*)\"}/";
      $this->template = preg_replace($pattern ,"<a href='\\1\\2'>\\2</a>",$this->template);
      
      //Url der Art www.seite.de erkennen und dann ersetzen
      $pattern = "/{url seite=\"(.*)\"}/";
      $this->template = preg_replace($pattern ,
                                     "<a href='http://\\1'>\\1</a>",
                                     $this->template);

      return TRUE;
    }
?>

Selbiges kannst dann auch mit includes machen etc , was ich wohl selber gleich mal austesten werde :)
 
Danke!

Noch was anderes. Wo werden die ganzen Sachen für preg_match erklärt. Also zum Beispiel: preg_match("hallo(.*)",$str). Steht das auch im PHP-Handbuch oder war ich nur zu blöd? Oder wo anders?
 
Steht soweit alles im Handbuch aber es sind halt reguläre Ausdrücke die PEARL kompatibel sind (soweit ich das weiss) und das ist der Feind ;)

preg_replace()
preg_match()
preg_match_all()
preg_split()
...

bei selfphp.de hab ich nix dergleichen dazu gefunden aber im PHP Manual sollte es drinnen stehen wobei man das Manual eigentlich knicken kann wenn man erstmal lernen muss damit umzugehen.Ist halt mehr eine Referenz.

Im Prinzip kann ich Dir dieses Tutorial ans Herz legen für reguläre Ausdrücke:

http://www.regenechsen.de/regex_de/regex_1_de.html

oder bei google nach "regexp" suchen.
 
Zurück