Portal > Foren > PHP > PHP-Programmierung > Templatesystem von Corvin in PHP4?
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 03.04.2007, 20:58 Nach oben    #1
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard Templatesystem von Corvin in PHP4?

Huhu,
ich wollte das Templatesystem von Corvin unter PHP4 benutzen, aber ich weiß nicht was ich dort jetzt genau ändern muss Kann mir bitte jemand helfen
bl-25 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 03.04.2007, 21:10 Nach oben    #2
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Der Vollständigkeithalber: [PHP] Ein eigenes Templatesystem schreiben

Wichtige Schritte zum Vorgehen:
1. Alle Identifier wie public/private/protected durch var ersetzen.
2. error_reporting(E_ALL) in die allererste Zeile des Scripts einfügen bzw sicherstellen, dass es vorhanden ist
3. Skript testen und schauen, ob Funktionen verwendet wurden, die es erst in PHP5 gibt.

Wenn du das getan hast, sollte es vielleicht schon gehen.
Versuchs mal
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith 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 03.04.2007, 21:13 Nach oben    #3
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Du musst vor jeder Variable, die in einer Klasse definiert wird, die Deklaration (public, protected etc.) durch "var" ersetzen. Des Weiteren musst du bei den Funktionen die Deklaration entfernen, die vor "function ...()" steht. Dann sollte es funktionieren. Wobei ich es mir nicht genau angesehen habe

//EDIT: War einer schneller :-P
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift 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 03.04.2007, 21:23 Nach oben    #4
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Klappt alles Danke
bl-25 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 03.04.2007, 21:24 Nach oben    #5
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Vielleicht könntest du die fertige Klasse dann hier posten. Evt. braucht eine andere Person das auch mal
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift 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 03.04.2007, 21:41 Nach oben    #6
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Zitat:
Zitat von Bleistift Beitrag anzeigen
Vielleicht könntest du die fertige Klasse dann hier posten. Evt. braucht eine andere Person das auch mal
Ja klar mach ich Hatte noch kleine Veränderungen drin die ich eben rausmachen musste bevor ichs hier reingestellt habe

template.class.php
PHP-Code:
   <?php 
class Template 

       
/** 
     * Der Ordner in dem sich die Template-Dateien befinden. 
     * 
     * @access public 
     * @var    string 
     */ 
    
var $templateDir "templates/"
     
    
/** 
     * Der Ordner in dem sich die Sprach-Dateien befinden 
     * 
     * @access public 
     * @var    string 
     */ 
    
var $languageDir "language/"
     
    
/** 
     * Der linke Delimter für einen Standard-Platzhalter 
     * 
     * @access public 
     * @var    string 
     */ 
    
var $leftDelimiter '{$'
     
    
/** 
     * Der rechte Delimter für einen Standard-Platzhalter 
     * 
     * @access public 
     * @var    string 
     */ 
    
var $rightDelimiter '}'
 
    
/** 
     * Der linke Delimter für eine Funktion 
     * 
     * @access public 
     * @var    string 
     */ 
    
var $leftDelimiterF '{'
     
    
/** 
     * Der rechte Delimter für eine Funktion 
     * 
     * @access public 
     * @var    string 
     */ 
    
var $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 
     */ 
    
var $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 
     */ 
    
var $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 
     */ 
    
var $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 
     */ 
    
var $rightDelimiterL '\}'
     
 
    
/** 
     * Der komplette Pfad der Templatedatei. 
     * 
     * @access protected 
     * @var    string 
     */ 
    
var $templateFile ""
     
    
/** 
     * Der komplette Pfad der Sprachdatei. 
     * 
     * @access protected 
     * @var    string 
     */ 
    
var $languageFile ""
     
    
/** 
     * Der Dateiname der Templatedatei 
     * 
     * @access protected 
     * @var    string 
     */ 
    
var $templateName ""
     
    
/** 
     * Der Inhalt des Templates. 
     * 
     * @access protected 
     * @var    string 
     */ 
    
var $template ""
 
     
    
/** 
     * Ein paar Eigenschaften ihre Werte zuweisen 
     * 
     * @access    public 
     * @return    boolean 
     */ 
    
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 
     */ 
    
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 
     */ 
    
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 
     */ 
    
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 
     */ 
    
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 
     */ 
    
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 
     */ 
    
function out() 
    { 
        echo 
$this->template
        return 
true
    } 

?>
Müsste so klappen habs aber so nicht ausprobiert da ich bei mir noch Veränderungen hatte
bl-25 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 04.04.2007, 10:47 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 597
Standard

Ich habe eine erweitere PHP4-Version von dieser Klasse.
Falls interesse, kann ich diese gern posten.
CIX88 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 04.04.2007, 12:23 Nach oben    #8
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 428
Standard

Ich hätte interesse
Xean 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 04.04.2007, 13:56 Nach oben    #9
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 597
Standard

Naja:

PHP-Code:
<?php
class Template {
    
    function 
Template($tpl_dir ""$lang_dir "",$inhalt "") {

    
# Der Ordner in dem sich die Template-Dateien befinden.
    
$this->templateDir $tpl_dir;
    
# Der Ordner in dem sich die Sprach-Dateien befinden
    
$this->languageDir $lang_dir;
    
# Der linke Delimter für einen Standard-Platzhalter
    
$this->leftDelimiter '{';
    
# Der rechte Delimter für einen Standard-Platzhalter
    
$this->rightDelimiter '}';
    
# Der linke Delimter für eine Funktion
    
$this->leftDelimiterF '{';
    
# Der rechte Delimter für eine Funktion
    
$this->rightDelimiterF '}';
    
$this->leftDelimiterC '\{\*';
    
$this->rightDelimiterC '\*\}';
    
# Der linke Delimter für eine Sprachvariable
    
$this->leftDelimiterL '\{L_';
    
$this->rightDelimiterL '\}';
    
# Der komplette Pfad der Templatedatei.
    
$this->templateFile "";
    
# Der komplette Pfad der Sprachdatei.
    
$this->languageFile "";
    
# Der Dateiname der Templatedatei
    
$this->templateName "";
    
# Der Inhalt des Templates.
    
$this->template $inhalt;    
    
        
// 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
     */
    
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;

        } else {

        
$this->template 'Templatefile wurde noch nicht erstellt!';

    }
    }


    
/**
     * Die Standard-Platzhalter ersetzen
     */
    
function sr($replace$replacement) {
        
$this->template str_replace($this->leftDelimiter.$replace.$this->rightDelimiter$replacement$this->template);
        return  
true;
    }


    function 
GetLang$key ) {
        
$file $this->languageDir.$this->languageFiles[0];
        @include( 
$file );
        return 
$lang$key ];
    }


    
/**
     * Die Sprachdateien öffnen
     */
    
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
    */    
    
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
     */
    
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);

    
// Bild-Pfad richtig setzen
    
$pattern '#(src|background)=(\")(images)#i';
    
$ersatz '$1=$2'.$this->languageDir.'$3';
    
$this->template preg_replace($pattern$ersatz$this->template );

    
// CSS aus TPL nehmen
    /*
    $pattern = '#(<link.*?\.css.*?>)#is';
    $ersatz = '<link rel="stylesheet" href="/'.$this->languageDir.'layout.css" type="text/css">';
    $this->template = preg_replace($pattern, $ersatz, $this->template );
    */

        
return  true;
    }  
      
       
/**
     * Teile des Templates ausgeben
     */
    
function getSubpart($name) {
        
$pos1 strpos($this->template"<!--###".$name." begin###-->");
        
$pos2 strpos($this->template"<!--###".$name." end###-->");

        return 
substr($this->template,$pos1+strlen("<!--###".$name." begin###-->"),$pos2-$pos1-strlen("<!--###".$name." begin###-->"));

    }
       
       
       
/**
     * Teile des Templates austauschen
     */
    
function replaceSubpart($name,$replacestr) {

    
$this->template preg_replace('~<!--###'.$name.' begin###-->.*?<!--###'.$name.' end###-->~s'$replacestr$this->template);

    
#$pos1 = strpos($this->template, "<!--###".$name." begin###-->");
    #$pos2 = strpos($this->template, "<!--###".$name." end###-->");
    #$this->template=substr_replace($this->template,$replacestr,$pos1,$pos2-$pos1+strlen("<!--###".$name." end###-->"));
    
}       
       
       
       
       
       
       
       
/**
     * Das fertige Template ausgeben
     */
    
function out$out ) {
        
#$this->template = preg_replace( '#^.*<html>#is', '<html>', $this->template );
        
if ( $out == 0) {
          echo 
$this->template;
          return 
true;
          } else {
          return 
$this->template;
            }
    }
}
?>
CIX88 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 04.04.2007, 14:54 Nach oben    #10
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 428
Standard

Danke
Xean 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
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] Ein eigenes Templatesystem schreiben Corvin Tutorials 42 19.03.2008 17:58
support für PHP4 endet zum Jahresende Jann Hendrik Nachrichten 0 14.07.2007 15:28
XML Parser mit PHP4 Eyüp PHP-Programmierung 4 24.06.2007 16:20
Templatesystem erweitern Berti PHP-Programmierung 8