 |
03.04.2007, 20:58
| Nach oben
#1 | | Benutzer
Registriert seit: 18.03.2007
Beiträge: 38
| 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
|
| |
03.04.2007, 21:10
| Nach oben
#2 | | Martin Breuer
Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
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 |
| |
03.04.2007, 21:13
| Nach oben
#3 | | Erfahrener Benutzer
Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 306
|
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.
|
| |
03.04.2007, 21:23
| Nach oben
#4 | | Benutzer
Registriert seit: 18.03.2007
Beiträge: 38
|
Klappt alles Danke
|
| |
03.04.2007, 21:24
| Nach oben
#5 | | Erfahrener Benutzer
Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 306
|
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.
|
| |
03.04.2007, 21:41
| Nach oben
#6 | | Benutzer
Registriert seit: 18.03.2007
Beiträge: 38
| Zitat:
Zitat von Bleistift 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($fp, filesize($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
|
| |
04.04.2007, 10:47
| Nach oben
#7 | | Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 597
|
Ich habe eine erweitere PHP4-Version von dieser Klasse.
Falls interesse, kann ich diese gern posten.
|
| |
04.04.2007, 12:23
| Nach oben
#8 | | Oliver O.
Registriert seit: 17.08.2005
Beiträge: 428
|
Ich hätte interesse
|
| |
04.04.2007, 13:56
| Nach oben
#9 | | Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 597
|
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($fp, filesize($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 = 0 ) {
#$this->template = preg_replace( '#^.*<html>#is', '<html>', $this->template );
if ( $out == 0) {
echo $this->template;
return true;
} else {
return $this->template;
}
}
}
?> |
| |
04.04.2007, 14:54
| Nach oben
#10 | | Oliver O.
Registriert seit: 17.08.2005
Beiträge: 428
|
Danke
|
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | Thema durchsuchen | | | |
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. HTML-Code ist aus. | | | |