Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Ein eigenes Templatesystem schreiben
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 28.11.2005, 16:20 Nach oben    #1
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 460
Standard [PHP] Ein eigenes Templatesystem schreiben

Ein eigenes Templatesystem schreiben
In diesem Tutorial beschreibe ich Schritt für Schritt den Aufbau eines eigenen Templatesystems. Ich setze vorraus, dass du die Grundlagen von PHP beherrschst, Klassen in PHP sowie die phpDoc-Tags sollten für dich auch nichts Neues sein. Links dazu:
http://www.php.net/manual/en/language.oop.php
http://www.php.net/manual/en/language.oop5.php
http://manual.phpdoc.org/HTMLSmartyC..._tags.pkg.html

1. Wozu ein eigenes Templatesystem schreiben?
Auch wenn es schon fertige Lösungen wie Smarty&Co gibt, lohnt es sich extrem, ein eigenes Templatesystem zuschreiben:
  • Man kann das Templatesystem optimal auf seine Bedürfnisse anpassen, dadurch ist es schneller und flexibler (Anpassungen sind viel einfacher und schneller möglich) als bei Smarty&Co.
  • Das Templatesystem kann gleich in eine bereits vorhandene Fehlerbehandlung integriert werden.
  • Ein (gut durchkommentiertes) eigenes Templatesystem mit allen nötigen Funktionen hat eine Größe von ca. 10-15 KB, Smarty benötigt ca. 300 KB. (Bei kleineren Projekten würde Smarty mehr Speicher als das eigentliche Skript beanspruchen.)
  • Das Schreiben eines eigenen Templatesystems ist in jedem Fall ein gute Übung!

2. Funktionen des Templatesystems
Das fertige Templatesystem wird folgende Funktionen umfassen:
  • Ersetzen von Platzhaltern
  • Funktion um ein Template in ein anderes einzubinden
  • Spezielle Kommentare in Templates, welche nachher im Quellcode der Seite nicht sichtbar sind
  • Sprachdateien: Verwendung von Sprachvariablen im Template und PHP-Code


3. Der Aufbau des Templatesystems
Das ganze Templatesystem wird mittels einer Klasse realisiert. Hier erstmal der Aufbau der Klasse:
PHP-Code:
<?php
class Template
{
       
/**
     * Der Ordner in dem sich die Template-Dateien befinden.
     *
     * @access public
     * @var    string
     */
    
protected $templateDir "templates/";
    
    
/**
     * Der Ordner in dem sich die Sprach-Dateien befinden
     *
     * @access public
     * @var    string
     */
    
protected $languageDir "language/";
    
    
/**
     * Der linke Delimter für einen Standard-Platzhalter
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiter '{$';
    
    
/**
     * Der rechte Delimter für einen Standard-Platzhalter
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiter '}';

    
/**
     * Der linke Delimter für eine Funktion
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiterF '{';
    
    
/**
     * Der rechte Delimter für eine Funktion
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiterF '}';

    
/**
     * Der linke Delimter für ein Kommentar
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiterC '\{\*';
    
    
/**
     * Der rechte Delimter für ein Kommentar
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiterC '\*\}';
    
    
/**
     * Der linke Delimter für eine Sprachvariable
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiterL '\{L_';
    
    
/**
     * Der rechte Delimter für eine Sprachvariable
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiterL '\}';
    

    
/**
     * Der komplette Pfad der Templatedatei.
     *
     * @access protected
     * @var    string
     */
    
protected $templateFile "";
    
    
/**
     * Der komplette Pfad der Sprachdatei.
     *
     * @access protected
     * @var    string
     */
    
protected $languageFile "";
    
    
/**
     * Der Dateiname der Templatedatei
     *
     * @access protected
     * @var    string
     */
    
protected $templateName "";
    
    
/**
     * Der Inhalt des Templates.
     *
     * @access protected
     * @var    string
     */
    
protected $template "";

    
    
/**
     * Ein paar Eigenschaften ihre Werte zuweisen
     *
     * @access    public
     * @return    boolean
     */
    
public function template($tpl_dir ""$lang_dir ""
    {
    }

    
    
/**
     * Die Templatedatei öffnen
     *
     * @access    public
     * @param     string $file Dateiname des Templates
     * @return    boolean
     */
    
public function load($file)
    {
    }


    
/**
     * 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($replace$replacement)
    {
    }

    
    
/**
     * Die Sprachdateien öffnen
     *
     * @access    public
     * @param     array $files  Dateinamen der Sprachdateien
     * @return    boolean
     */
    
public function loadLanguage($files)
    {
    }

    
    
/**
     * Die Sprachvariablen ersetzen
     *
     * @access    protected
     * @param     string $lang
     * @return    boolean
     */
    
protected function replaceLanguage($lang)
    {
    }
    
    
    
/**
     * Die Funktionen ersetzen
     *
     * @access    protected
     * @return    boolean
     */
    
protected function replaceFunctions()
    {
    }
      
       
/**
     * Das fertige Template ausgeben
     *
     * @access    public
     * @return    boolean
     */
    
public function out()
    {
    }
}
?>
Und nun die einzelnen Methoden im Detail...

4. template() - Der Konstruktor
Beim Konstruktor-Aufruf kannst du den Template- und Sprachdateiordner ändern, das ist aber nicht zwingend, wenn du die schon in der Klasse festgelegten Ordner verwenden willst, gibst du einfach keine Parameter an:
PHP-Code:
// Ordner ändern und eine neue Instanz erzeugen:
$tpl = new Template("tpls/""langs/");

// Ordner beim alten belassen und nur eine neue Instanz erzeugen:
$tpl = new Template(); 
Und hier nun die Methode template(
PHP-Code:
    /**
     * Ein paar Eigenschaften ihre Werte zuweisen
     *
     * @access    public
     * @return    boolean
     */
    
public function template($tpl_dir ""$lang_dir ""
    {
        
// Template Ordner ändern
        
if (!empty($tpl_dir)) {
            
$this->templateDir $tpl_dir;
        }

        
// Language Ordner ändern
        
if (!empty($lang_dir)) {
            
$this->languageDir $lang_dir;
        }
        
        return 
true;
    } 
5. load() - Template laden
Die Methode load() versucht das Template (dessen Dateiname übergeben wurde) zu öffnen. Bei einem erfolgreichem Öffnen wird der Templateinhalt in die Eigenschaft template eingelesen:
PHP-Code:
    /**
     * Die Templatedatei öffnen
     *
     * @access    public
     * @param     string $file Dateiname des Templates
     * @return    boolean
     */
    
public function load($file)
    {
        
// Die 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(
$fp = @fopen($this->templateFile"r")) {
                
// Den Inhalt des Templates einlesen
                
$this->template fread($fpfilesize($this->templateFile)); 
                
fclose ($fp); 
            } else {
                return 
false;
            }
        }

        
// Die methode replaceFuntions() aufrufen
        
$this->replaceFunctions();
        
        return 
true;
    } 
Der Aufruf sieht folgendermaßen aus:
PHP-Code:
$tpl->load("templatename.tpl"); 
6. assign() - Platzhalter ersetzen
assign() dient dazu, um normale Platzhalter im Template zu ersetzen. Im PHP-Code muss dann stehen:
PHP-Code:
$tpl->assign("platzhalter""der text..."); 
Und im Template:
Code:
{$platzhalter}
Die Methode:
PHP-Code:
    /**
     * 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($replace$replacement)
    {
        
$this->template str_replace($this->leftDelimiter.$replace.$this->rightDelimiter$replacement$this->template);
        return  
true;
    } 

Geändert von Corvin (09.03.2006 um 20:58 Uhr)
Corvin ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.11.2005, 16:21 Nach oben    #2
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 460
Standard

7. loadLanguage() - Sprachdateien laden
Die Methode loadLanguage() ist ein wenig komplexer:
PHP-Code:
    /**
     * Die Sprachdateien öffnen
     *
     * @access    public
     * @param     array $files  Dateinamen der Sprachdateien
     * @return    boolean
     */
    
public function loadLanguage($files)
    {
        
// Die Dateinamen der Sprachdateien
        
$this->languageFiles $files;
        
        
// Versuchen, alle Sprachdateien einzubinden
        
for ($i=0;$i<count($this->languageFiles);$i++) {
            
// wenn die Datei $this->languageDir.$this->languageFiles[$i] nicht existiert
            
if (!file_exists($this->languageDir.$this->languageFiles[$i])) {
                return 
false;
            }
            
// Einbinden...
            
include($this->languageDir.$this->languageFiles[$i]);
            
// !! jetzt steht das Array $lang zur Verfügung
        
}
        
        
// Die Sprachvariablen mit dem Text ersetzen
        
$this->replaceLanguage($lang);
        
        
// $lang zurückgeben, damit $lang auch im PHP-Code verwendet werden kann
        
return $lang;
    } 
Um eine Sprachdatei zu laden muss im PHP-Code folgendes stehen:
PHP-Code:
$langs[] = "de/datei_name.php";
$lang $tpl->loadLanguage($langs); 
Dem Array $langs können beliebig viele Sprachdateien hinzugefügt werden.

Um im Template nun zum Beispiel auf die Sprachvariable START ($lang['start']) zuzugreifen musst du folgendes schreiben:
Code:
{L_START}
8. replaceLanguage() - Sprachvariablen ersetzen
Um die Sprachvariablen im Template mit dem richtigem Text zu ersetzen, ruft loadLanguage() die Methode replaceLanguage() auf.
PHP-Code:
    /**
     * Die Sprachvariablen ersetzen
     *
     * @access    protected
     * @param     string $lang
     * @return    boolean
     */
    
protected function replaceLanguage($lang)
    {
        
// simple replace width preg_replace
        
$this->template preg_replace("/".$this->leftDelimiterL."(.*)".$this->rightDelimiterL."/isUe""\$lang[strtolower('\\1')]"$this->template);
        return 
true;

    } 
9. replaceFunctions() - Templatefunktionen ersetzen
Die Methode replaceFuntions() dient dazu, die Template-Includes und speziellen Template-Kommentare zu ersetzen.
Ein Template Include sieht wiefolgt aus:
Code:
{include file="othertemplate.tpl"}
Die Methode replaceFunctions() ersetzt dies nun mit dem Inhalt der Datei othertemplate.tpl.

Ein Template-Kommentar sieht so aus:
Code:
{* Hier steht der Kommentar *}
Es können natürlich auch die normalen HTML-Kommentare im Template genutzt werden, doch die speziellen Template-Kommentare haben den Vorteil, dass sie nachher bei der Ausgabe einfach gelöscht werden, somit sind die Kommentare für den Programmierer, nicht aber für den Aufrufer der Seite sichtbar.

Die Methode:
PHP-Code:
    /**
     * Die Funktionen ersetzen
     *
     * @access    protected
     * @return    boolean
     */
    
protected function replaceFunctions()
    {
        
// 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);
        
        return  
true;
    } 
replaceFunctions() wird von load() aufgerufen.

10. out() - Das fertige Template ausgeben
Und als letztes wird die Methode out() aufgerufen, um das fertige Template (in dem alles ersetzt wurde etc.) auszugeben:
PHP-Code:
$tpl->out(); 
Und hier der Code:
PHP-Code:
       /**
     * Das fertige Template ausgeben
     *
     * @access    public
     * @return    boolean
     */
    
public function out()
    {
        echo 
$this->template;
        return 
true;
    } 

Geändert von Corvin (09.03.2006 um 20:58 Uhr)
Corvin ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.11.2005, 16:22 Nach oben    #3
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 460
Standard

11. Die komplette Template-Klasse
Und hier nochmal das komplette Templatesystem:
PHP-Code:
<?php
class Template
{
       
/**
     * Der Ordner in dem sich die Template-Dateien befinden.
     *
     * @access public
     * @var    string
     */
    
protected $templateDir "templates/";
    
    
/**
     * Der Ordner in dem sich die Sprach-Dateien befinden
     *
     * @access public
     * @var    string
     */
    
protected $languageDir "language/";
    
    
/**
     * Der linke Delimter für einen Standard-Platzhalter
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiter '{$';
    
    
/**
     * Der rechte Delimter für einen Standard-Platzhalter
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiter '}';

    
/**
     * Der linke Delimter für eine Funktion
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiterF '{';
    
    
/**
     * Der rechte Delimter für eine Funktion
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiterF '}';

    
/**
     * Der linke Delimter für ein Kommentar
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiterC '\{\*';
    
    
/**
     * Der rechte Delimter für ein Kommentar
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiterC '\*\}';
    
    
/**
     * Der linke Delimter für eine Sprachvariable
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $leftDelimiterL '\{L_';
    
    
/**
     * Der rechte Delimter für eine Sprachvariable
     * Sonderzeichen müssen escaped werden, weil der Delimter in einem RegExp
     * verwendet wird.
     *
     * @access public
     * @var    string
     */
    
protected $rightDelimiterL '\}';
    

    
/**
     * Der komplette Pfad der Templatedatei.
     *
     * @access protected
     * @var    string
     */
    
protected $templateFile "";
    
    
/**
     * Der komplette Pfad der Sprachdatei.
     *
     * @access protected
     * @var    string
     */
    
protected $languageFile "";
    
    
/**
     * Der Dateiname der Templatedatei
     *
     * @access protected
     * @var    string
     */
    
protected $templateName "";
    
    
/**
     * Der Inhalt des Templates.
     *
     * @access protected
     * @var    string
     */
    
protected $template "";

    
    
/**
     * Ein paar Eigenschaften ihre Werte zuweisen
     *
     * @access    public
     * @return    boolean
     */
    
public function template($tpl_dir ""$lang_dir ""
    {
        
// Template Ordner ändern
        
if (!empty($tpl_dir)) {
            
$this->templateDir $tpl_dir;
        }

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

    
    
/**
     * Die Templatedatei öffnen
     *
     * @access    public
     * @param     string $file Dateiname des Templates
     * @return    boolean
     */
    
public function load($file)
    {
        
// Die 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(
$fp = @fopen($this->templateFile"r")) {
                
// Den Inhalt des Templates einlesen
                
$this->template fread($fpfilesize($this->templateFile)); 
                
fclose ($fp); 
            } else {
                return 
false;
            }
        }

        
// Die methode replaceFuntions() aufrufen
        
$this->replaceFunctions();
        
        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($replace$replacement)
    {
        
$this->template str_replace($this->leftDelimiter.$replace.$this->rightDelimiter$replacement$this->template);
        return  
true;
    }

    
    
/**
     * Die Sprachdateien öffnen
     *
     * @access    public
     * @param     array $files  Dateinamen der Sprachdateien
     * @return    boolean
     */
    
public function loadLanguage($files)
    {
        
// Die Dateinamen der Sprachdateien
        
$this->languageFiles $files;
        
        
// Versuchen, alle Sprachdateien einzubinden
        
for ($i=0;$i<count($this->languageFiles);$i++) {
            
// wenn die Datei $this->languageDir.$this->languageFiles[$i] nicht existiert
            
if (!file_exists($this->languageDir.$this->languageFiles[$i])) {
                return 
false;
            }
            
// Einbinden...
            
include($this->languageDir.$this->languageFiles[$i]);
            
// !! jetzt steht das Array $lang zur Verfügung
        
}
        
        
// Die Sprachvariablen mit dem Text ersetzen
        
$this->replaceLanguage($lang);
        
        
// $lang zurückgeben, damit $lang auch im PHP-Code verwendet werden kann
        
return $lang;
    }

    
    
/**
     * Die Sprachvariablen ersetzen
     *
     * @access    protected
     * @param     string $lang
     * @return    boolean
     */
    
protected function replaceLanguage($lang)
    {
        
// simple replace width preg_replace
        
$this->template preg_replace("/".$this->leftDelimiterL."(.*)".$this->rightDelimiterL."/isUe""\$lang[strtolower('\\1')]"$this->template);
        return 
true;

    }
    
    
    
/**
     * Die Funktionen ersetzen
     *
     * @access    protected
     * @return    boolean
     */
    
protected function replaceFunctions()
    {
        
// 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);
        
        return  
true;
    }  
      
       
/**
     * Das fertige Template ausgeben
     *
     * @access    public
     * @return    boolean
     */
    
public function out()
    {
        echo 
$this->template;
        return 
true;
    }
}
?>

13. Beispiel
Und hier noch mal ein Beispiel.
Lege folgende Verzeichnisse an:
templates für die Templates,
language für die Sprachdateien und
language/de für die deutschen Sprachdateien.

In dem Ordner templates legst du nun eine Datei namens index.tpl mit folgendem Inhalt an:
HTML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>{L_START}</h1>
Hallo {$name}. Der Aktuelle Timestamp lautet: {$time}
{* Ein Template einbinden *}
{include file="othertemplate.tpl"}
</body>
</html> 
Und eine Datei namens othertemplate.tpl:
HTML-Code:
<p>Das ist der Inhalt des eingebundenen Templates... </p> 

Im Ordner language/de legst du nun eine Datei namens lang_main.php an. Sieht soll folgenden Inhalt haben:
PHP-Code:
<?php
$lang
['start'] = "Startseite";
?>
Die Template-Klasse speicherst du im Hauptordner unter dem Dateinamen template.class.php.

Und jetzt noch die PHP-Datei:
PHP-Code:
<?php
// Das Templatesystem einbinden
include("template.class.php");

// Eine neue Instanz der Template Klasse erzeugen
$tpl = new Template();

// Das Template laden
$tpl->load("index.tpl");

// Die Sprachdatei laden
$langs[] = "de/lang_main.php";
$lang $tpl->loadLanguage($langs);

// Dem Platzhalter $titel den Text "Willkommen" zuweisen
$tpl->assign("title""Willkommen");

// Dem Platzhalter $name den Text "Benutzer" zuweisen
$tpl->assign("name""Benutzer");

// Dem Platzhalter $time den aktuellen Timestamp zuweisen
$tpl->assign("time"time());

// Und das fertige Template ausgeben
$tpl->out();
?>
Die Beispieldateien stehen auch als Dateianhang zur Verfügung.

12. Abschließende Überlegungen
Das hier "zusammengebaute" Templatesystem ist schon sehr komfortabel und umfasst einige hilfreiche Funktionen. Doch trotzdem sind für einige Zwecke weitere Funktionen nötig, zum Beispiel das Ausgeben von Arrays (welches Daten aus einer Datenbank enthalten könnte) oder das Cachen von bestimmten Seiten.
Ich bin hier bewusst nicht weiter auf solche speziellen Funktionalitäten eingegangen, weil dies nicht Sinn eines Tutorials ist. Der Lerneffekt ist viel größer, wenn du dich nun ransetzt und versuchst, selbst einige Funktionen zu implementieren. Wenn du mal an einer Stelle nicht weiter kommst, sind wir dir hier im Forum gerne behilflich.

Und noch kurz eine Anmerkung: Ich hoffe der Vergleich am Anfang mit Smarty ist nicht falsch rübergekommen, Smarty ist ein super Templatesystem, das will ich nicht bestreiten, doch meistens hat der Einsatz von Smarty einfach zu viel Overhead.

So... das wars erstmal, jetzt wünsche ich dir viel Spaß beim Arbeiten mit dem (hoffentlich von dir weiterentwickelten) Templatesystem.


MfG Corvin Gröning
Angehängte Dateien
Dateityp: rar tplbsp.rar (2,7 KB, 211x aufgerufen)

Geändert von Corvin (09.03.2006 um 20:58 Uhr)
Corvin ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.01.2006, 18:49 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 25.12.2005
Beiträge: 0
Standard

Hm, mein Browser gibt folgenden Fehler aus:

Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /.../Template/template.class.php on line 10
kâmui ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.01.2006, 18:52 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard

Die von Corvin verwendete Klasse nutzt PHP 5-spezifische Modifier.
Lies dazu mal das hier:
http://de2.php.net/manual/en/languag...visibility.php

Du müsstest eigentlich nur bei den Membervariablen das "protected" gegen ein "var" tauschen und bei den Methoden die Modifier entfernen.
Also anstatt "public function .." einfach nur "function .."

Grüße Ben.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.01.2006, 19:06 Nach oben    #6
Neuer Benutzer
 
Registriert seit: 25.12.2005
Beiträge: 0
Standard

THX, jetzt funktioniert alles
kâmui ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.01.2006, 18:37 Nach oben    #