power-box.de
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 31.08.2005, 09:51   #1
TP-Veteran
 
Benutzerbild von Daniel N.
 
Registriert seit: Sep 2002
Ort: Schweiz
Daniel N. ist auf einem guten Weg

[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??
__________________

Passt auf, ich bin überheblich

http://orangetree.ch-gnu.ath.cx
Daniel N. ist offline   Mit Zitat antworten


Alt 31.08.2005, 12:23   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Ja, eindeutig ein Pfadproblem.

Wo liegt Deine Klasse ? Versuche es mit absoluter Pfadangabe.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 31.08.2005, 14:10   #3
TP-Veteran
 
Benutzerbild von Daniel N.
 
Registriert seit: Sep 2002
Ort: Schweiz
Daniel N. ist auf einem guten Weg
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");

?>
__________________

Passt auf, ich bin überheblich

http://orangetree.ch-gnu.ath.cx
Daniel N. ist offline   Mit Zitat antworten
Alt 01.09.2005, 14:40   #4
TP-Veteran
 
Benutzerbild von Daniel N.
 
Registriert seit: Sep 2002
Ort: Schweiz
Daniel N. ist auf einem guten Weg
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?
__________________

Passt auf, ich bin überheblich

http://orangetree.ch-gnu.ath.cx
Daniel N. ist offline   Mit Zitat antworten
Alt 02.09.2005, 11:32   #5
TP-Veteran
 
Benutzerbild von Daniel N.
 
Registriert seit: Sep 2002
Ort: Schweiz
Daniel N. ist auf einem guten Weg
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]];
        }    
            
}

?>
__________________

Passt auf, ich bin überheblich

http://orangetree.ch-gnu.ath.cx

Geändert von Daniel N. (02.09.2005 um 14:11 Uhr).
Daniel N. ist offline   Mit Zitat antworten
Alt 02.09.2005, 14:11   #6
TP-Veteran
 
Benutzerbild von Daniel N.
 
Registriert seit: Sep 2002
Ort: Schweiz
Daniel N. ist auf einem guten Weg
P.S.: stimmt eigentlich dieses suchmuster
Code:
'%\{(/w+)\}%'
um platzhalter im format
Code:
{platzhalter}
zu ersetzen?
__________________

Passt auf, ich bin überheblich

http://orangetree.ch-gnu.ath.cx
Daniel N. ist offline   Mit Zitat antworten
Alt 05.09.2005, 10:56   #7
TP-Veteran
 
Benutzerbild von Daniel N.
 
Registriert seit: Sep 2002
Ort: Schweiz
Daniel N. ist auf einem guten Weg
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
__________________

Passt auf, ich bin überheblich

http://orangetree.ch-gnu.ath.cx
Daniel N. ist offline   Mit Zitat antworten
Alt 05.09.2005, 11:36   #8
TP-Veteran
 
Benutzerbild von Daniel N.
 
Registriert seit: Sep 2002
Ort: Schweiz
Daniel N. ist auf einem guten Weg
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.
__________________

Passt auf, ich bin überheblich

http://orangetree.ch-gnu.ath.cx

Geändert von Daniel N. (05.09.2005 um 17:07 Uhr).
Daniel N. ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
[PHP]Template Klasse will nich so [PHP]Template Klasse will nich so
« Sicherer Login | zeielumbruch »

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

Erweiterte Suche
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an