 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
31.08.2005, 09:51
|
#1
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
[PHP]Template Klasse will nich so
also in anlehnung an den tollen template klassen workshop hab ich mich auch mal an sowas rangewagt, nur leider will das ding nich so wirklich werkeln. hier mal meine code-situation:
klasse
PHP-Code:
<?php
class Template {
public function Template($dir = NULL)
{
$this->setTplDirectory($dir);
}
private $varList = NULL;
public function addVar($name, $value)
{
$this->varList[$name] = $value;
}
public function viewTpl($tpl)
{
if ((!file_exists($this->template_dir ."/". $tpl)) OR
!is_readable($this->template_dir ."/". $tpl))
{
die("Template file unreadable");
}
$readtpl = file_get_contents($this->template_dir ."/". $tpl);
echo $this->parse_tpl($readtpl);
}
public function setTplDirectory($dir = NULL)
{
if (is_null($dir))
{
$this->template_dir = dirname(__FILE__);
}
else {
$this->template_dir = $dir;
}
}
$pattern = '%\{\$(\w+)\}%';
$string = preg_replace_callback($pattern, array(&$this, 'replaceVar'), $string);
private function replaceVar($ref)
{
return $this->varList[$ref[1]];
}
}
?>
und so ruf ich das dingen auf:
PHP-Code:
<?php
require_once("template.class.php");
$template = new Template();
$template->addVar['CONTENTBlock', "hansli"];
$template->readTpl["wcw-template-structure.html"];
?>
und das endet in folgender fehlermeldung:
Code:
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
Warning: Unknown: Failed opening '/var/www/exec/test.php' for inclusion (include_path='.:/usr/share/php') in Unknown on line 0
irgendwer ne idee? liegts am pfad zu den templates??
|
|
|
31.08.2005, 12:23
|
#2
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Ja, eindeutig ein Pfadproblem.
Wo liegt Deine Klasse ? Versuche es mit absoluter Pfadangabe.
|
|
|
31.08.2005, 14:10
|
#3
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
also mittlerweile hab ich die klasse zumindest so hingekriegt, dass alles ohne errors gehandelt wird. ein anfang zumindest
also wenn ich das konzept der workshop klasse richtig verstanden hab (oop is noch ziemliches neuland für mich), kann man ja das template_dir mit dem instanzieren der klasse aufrufen, also so:
PHP-Code:
$template = new Template($dir = "inc_template");
rightige überlegung?
nun ja jedenfalls entsteht mittlerweile ein recht leeres html dokument, was definitiv nicht dem template entspricht. hier mein upgedatetes script:
klasse
PHP-Code:
<?php
class Template {
public function Template($dir = NULL)
{
$this->setTplDirectory($dir);
}
public $varList = NULL;
public function addVar($name, $value)
{
$this->varList[$name] = $value;
}
public function setTplDirectory($dir = NULL)
{
if (is_null($dir))
{
$this->template_dir = dirname(__FILE__);
}
else {
$this->template_dir = $dir;
}
}
public function viewTpl($tpl)
{
if ((!file_exists($this->template_dir ."/". $tpl)))
{
die("File not there");
}
elseif (!is_readable($this->template_dir ."/". $tpl))
{
die("Template file unreadable");
}
$readtpl = file_get_contents($this->template_dir ."/". $tpl);
echo $this->parseFile($readtpl);
}
public function parseFile($readtpl)
{
$pattern = '%\{\$(\w+)\}%';
$string = preg_replace_callback($pattern, array(&$this, 'replaceVar'), $readtpl);
}
private function replaceVar($ref)
{
return $this->varList[$ref[1]];
}
}
?>
und hier der aufruf:
PHP-Code:
<?php
require_once("template.class.php");
$template = new Template();
$template->setTplDirectory($dir = "inc_template");
$template->addVar(CONTENTBlock,"replacement");
$template->viewTpl("wcw-template-structure.html");
?>
|
|
|
01.09.2005, 14:40
|
#4
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
sodele hab wieder ein bischen rumgedoktert und bin zum schluss gekommen, dass nun eigentlich alles i.o sein müsste. der pfad, sowie das zu includierende file werden richtig übernommen, nur das dokument bleibt immer noch leer
nochmal die code-situation
klasse
PHP-Code:
<?php
class Template {
public function __construct($dir = inc_template)
{
$this->setTplDirectory($dir);
}
public $varList = NULL;
public function addVar($name, $value)
{
$this->varList[$name] = $value;
}
public function setTplDirectory($dir = inc_template)
{
if (is_null($dir))
{
$this->template_dir = dirname(__FILE__);
}
else {
$this->template_dir = $dir;
}
}
public function parseFile($readtpl)
{
$pattern = '/\{\$(\w+)\}/';
$readtpl = preg_replace_callback($pattern, array(&$this, 'replaceVar'), $readtpl);
}
private function replaceVar($ref)
{
return $this->varList[$ref[1]];
}
public $tpl = "wcw-template-structure.html";
public function viewTpl($tpl)
{
if ((!file_exists($this->template_dir ."/". $tpl)))
{
die("File not there");
}
elseif (!is_readable($this->template_dir ."/". $tpl))
{
die("Template file unreadable");
}
$readtpl = file_get_contents($this->template_dir ."/". $tpl);
echo $this->parseFile($readtpl);
}
}
?>
aufruf
PHP-Code:
<?php
require_once('template.class.php');
$template = new Template();
$template->addVar("CONTENTBlock","foo");
$template->viewTpl("wcw-template-structure.html");
?>
was mir unklar bleibt, ist die variable $ref in der funktion replaceVar(); was ist mit der, wo wird der ein wert zugeteilt?
|
|
|
02.09.2005, 11:32
|
#5
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
und wieder ein update: hab das ganze soweit zerlegt und getestet, dass ich sagen kann, alles funktioniert eigentlich, der fehler liegt darin, dass lediglich das html grundgerüst des angegebenen templates eingelesen wird. mache ich dies mit include(), bzw. require(); wird alles eingelesen, nur kann ich keine der beiden funktionen verwenden..
irgendjemand eine ahnung, wieso mit "file_get_contents()" nicht alles erwischt wird??
//edit: also, mir ist klar, warum das nicht ausgegeben wird, es wird schlicht gar nirgends angegeben das es ausgegeben werden soll. nur hab ich jetzt das problem wo und wie ich das einbauen soll??
nochmal der code der klasse (ihr könnt euch mehrheitlich auf die funktion "viewParsedTpl()" und "parseTpl();" beschränken)
PHP-Code:
<?php
class Template {
function __construct($dir = NULL)
{
$this->setTplDir($dir);
}
public $varList = NULL;
public function setRplVar($label, $value)
{
$this->VarList[$label] = $value;
}
public function viewParsedTpl($tpl)
{
if ( (!file_exists($this->TplDir . "/" . $tpl)) )
{
die("Template file not found");
}
/* elseif (!is_readable($this->TplDir . "/" . $tpl));
{
die("Template file not readable");
} */
$getTpl = file_get_contents($this->TplDir . "/" . $tpl);
echo $this->parseTpl($getTpl);
}
public function setTplDir($dir = NULL)
{
if (is_null($dir))
{
$this->TplDir = dirname(__FILE__);
}
else {
$this->TplDir = $dir;
}
}
public function parseTpl($getTpl)
{
$reg_exp = '%\{(/w+)\}%';
$replace = preg_replace_callback($reg_exp, array(&$this, 'replaceVar'), $getTpl);
}
private function replaceVar($ref)
{
return $this->varList[$ref[1]];
}
}
?>
Geändert von Daniel N. (02.09.2005 um 14:11 Uhr).
|
|
|
02.09.2005, 14:11
|
#6
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
P.S.: stimmt eigentlich dieses suchmuster um platzhalter im format zu ersetzen?
|
|
|
05.09.2005, 10:56
|
#7
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
soudele... hab das problem jetzt selber gefixt...
PHP-Code:
public function parseTpl($getTpl)
{
foreach ($this->varList as $key => $value)
{
$pattern = "\{(".strtoupper($key).")\}";
$this->getTpl = eregi_replace($pattern, $value, $getTpl);
}
return $this->getTpl;
}
funktioniert einwandfrei 
|
|
|
05.09.2005, 11:36
|
#8
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
hier nochmal die ganze funktion, falls es denn jemanden interessiert.. macht euch einfach drüber her
PHP-Code:
<?php
/* Simple Template-parser class
(C) 2005 Daniel Neuenschwander // september 9.
This is, of course, free software :)
*/
class Template {
function __construct($dir = NULL)
{
// If no value is given, $dir = current directory
$this->setTplDir($dir);
}
public $varList = NULL;
// Function to register placeholders and write them into array
public function setRplVar($label, $content)
{
if($label != preg_match("/[^a-zA-Z]/", $label))
{
die("\$err_id: 2 \"Placeholder does not match requirements. see online documentation\"");
}
$this->varList = array ($label => $content);
}
// Main Function ; Reads in template file and calls the replacement-function
public function viewParsedTpl($tpl)
{
if ( (!file_exists($this->TplDir . "/" . $tpl)) )
{
die("\$err_id: 1 \"Template file not found\"");
}
$getTpl = file_get_contents($this->TplDir . "/" . $tpl);
echo $this->parseTpl($getTpl);
}
// Function to set the template inclusion dir. See in constructor
public function setTplDir($dir = NULL)
{
if (is_null($dir))
{
$this->TplDir = dirname(__FILE__);
}
else {
$this->TplDir = $dir;
}
}
// Function to parse the templates
public function parseTpl($getTpl)
{
foreach ($this->varList as $key => $value)
{
$pattern = "\{(".strtoupper($key).")\}";
$this->getTpl = eregi_replace($pattern, $value, $getTpl);
}
return $this->getTpl;
}
}
?>
Nachtrag: hab noch eine kontrollstruktur eingebaut, damit werden falsche platzhalter abgefangen bevor sie registriert werden und eventuell chaos ausbricht
akzeptiert werden nur strings aus buchstaben.
Geändert von Daniel N. (05.09.2005 um 17:07 Uhr).
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
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.
| | | |