php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.10.2004, 19:39  
Gast
 
Beiträge: n/a
Standard [Erledigt] Template Parser

Ich bin grade dabei einen Template Parser zu schreiben. Die Templates werden in der MySQL Datenbank gespeichert. Zur benutzung muss man diese vorher in einen Cache auf den Server schreiben (in meinem Fall in den Order ./cache).
Wenn jetzt ein Script ausgeführt wird, gibt man der Parserklasse den Templatenamen, diese öffnet das Template und gibt dieses dann zurück. Allerdings funktioniert das ganze bei mir noch nicht wirklich bis gar nicht

Hier mal die 3 Scripte:
index.php (hier werden die 3 Variablen festgelegt, die nachher im template ersetzt werden sollen):
PHP-Code:
<?
//Klasse einbinden
require_once("./lib/tpl.php");

//Klasse aufrufen
$tpl = &new tpl(intval(0));

//Variablen, die ersetzt werden
$template1 "Template 1";
$wort1 "Wort 1";
$wort2 "Wort 2";

//Template ausgeben
eval("\$tpl->output(\"".$tpl->get("tpl1")."\");");

?>
0.tpl1.php (im Ordner ./cache/), das Template:
PHP-Code:
<html>
<
body>
<
div align="center">[b]Template 1$template1[/b]</div>



Wort 1$wort1

Wort 2
$wort2

</body>
</
html
tpl.php (im Ordner ./lib/), hier sitzt die Klasse zum parsen:
PHP-Code:
<?php
class tpl {

    
/* tplnamen holen */
    
var $tplpack 0;
    var 
$templates = array();

    
/* Constructor */
    
function tpl($tpl 0){
        
$this->tpl $tplpack;
    }

    
/* Template holen */
    
function get($tpl){
        
        if(
file_exists("./cache/".$this->tplpack.".".$tpl.".php")){
            include(
"./cache/".$this->tplpack.".".$tpl.".php");
        }else{
            echo 
"Template &quot;".$tpl."&quot; does not exist!";
        }
        
    }
    
    
/* Template ausgeben */
    
function output($template){
        print(
$template);
    }

}
?>
Ich hab jetzt 2 große Probleme:
Die Funktion output wird noch gar nicht gebraucht! Bis jetzt gibt die Funktion get schon alles aus, dass soll sie aber nicht! Ich will den Inhalt eines Template szum Beispiel auch, für eine Mehrfachausgabe etc., einfach in eine Variable schreiben können!

Das zweite Problem ist, dass die variablen nicht ersetzt werden! Die Variablen werden so ausgegeben, als ob sie leer wären, was sie warscheinlich auch sind, sonst würden sie ja ausgegeben werden

Hier hab ich das mal auf meinem Home Server:
http://andreas.is-a-geek.net/tpl

Wäre nett, wenn ihr mir helfen würdet!
Andy
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.10.2004, 19:51  
Gast
 
Beiträge: n/a
Standard

ich hab das jetzt nur mal so grob überflogen und hab ne lösung für das problem das mit get() schon ausgegeben wird....

http://de.php.net/manual/de/function.ob-start.php

als fortgeschrittener solltest das dann ja hinbekommen....
  Mit Zitat antworten
Alt 06.10.2004, 20:03  
Gast
 
Beiträge: n/a
Standard

Das muss auch einfacher gehen!
Ich hab den Parser sozusagen aus dem Woltlab Burning Board 2 "nachprogrammiert"! Und da benutzen die so eine Funktion nicht:

PHP-Code:
<?php
class tpl {
    
    var 
$templates   = array();
    var 
$templatepackid 0;
    var 
$path ".";
    
    
/* constuctor */
    
function tpl($templatepackid 0$path ".") {
        
$this->templatepackid $templatepackid;
        
$this->path $path;
    }
    
    
/* get template */
    
function get($templatename$isacp 0) {
        
// board template
        
if ($isacp == 0) {
            if (!isset(
$this->templates[$templatename])) {
                
                
// get templatepackid
                
if ($this->templatepackid != 0) {
                    global 
$wbbuserdata;
                    if (!
is_array($wbbuserdata['templatestructure'])) {
                        
$wbbuserdata['templatestructure'] = unserialize($wbbuserdata['templatestructure']);
                    }
                    
$templatepackid $wbbuserdata['templatestructure'][$templatename];
                }
                else 
$templatepackid 0;
                
                
// include template
                
if (file_exists($this->path."/cache/templates/".$templatepackid."_".$templatename.".php")) {
                    include(
$this->path."/cache/templates/".$templatepackid."_".$templatename.".php");
                }
                else 
$this->templates[$templatename] = "template &quot;".$templatename."&quot; doesnt exist";
            }
            
            return 
$this->templates[$templatename];
        }
        
        
// acp template
        
else {
            if (!isset(
$this->templates['acp_'.$templatename])) {
                if (
file_exists($this->path."/cache/templates/acp/".$templatename.".php")) {
                    include(
$this->path."/cache/templates/acp/".$templatename.".php");
                }
                else 
$this->templates['acp_'.$templatename] = "template &quot;".$templatename."&quot; doesnt exist";
            }
            
            return 
$this->templates['acp_'.$templatename];
        }
    }
    
    
/* print template */
    
function output($template$isacp 0) {
        
headers::send($isacp);
        print(
$template);
    }
}
?>
Nur raff ich teilweise Sachen nicht, wie das hier in der get Funkion:
return $this->templates[$templatename];
Was hat das für einen Sinn, wenn anschließend die output Funktion aufgerufen wird? Denn included wird die Datei ja schon in der get Funktion, aber wie schaffen die das, dass der Kram nich ausgegeben wird?
Und warum werden da die Variablen in den Templates ersetzt und bei meiner nachprogrammierung nicht?
  Mit Zitat antworten
Alt 06.10.2004, 20:28  
Gast
 
Beiträge: n/a
Standard

joa ich hatte mir das auch schonmal angeguckt und bin zu dem schluss gekommen, das es kacke ist.

Benutze Smarty oder sowas ähnliches...

und ob_xxx zu benutzen ist ja nicht wirklich schwer...erzeugst halt nen buffer...ist es oft praktisch die funktion
  Mit Zitat antworten
Alt 06.10.2004, 20:58  
Gast
 
Beiträge: n/a
Standard

Naja Smarty is extrem mächtig, dass stimmt schon, aber ich möcht doch gern mal mein eigenes System coden! *g*

Evtl. bau ich das ganze nochmal neu mit ganz normalen Funktionen, anstatt mit Klassen, da kann ich noch besser mit umgehen! Allerdings ist das ganze dann ja auch nich so flexibel...
  Mit Zitat antworten
Alt 06.10.2004, 21:39  
Gast
 
Beiträge: n/a
Standard

also ne klasse ist auf jeden fall vorteilhaft, nur würd ich evtl nen anderes konzept nehmen....

PHP-Code:
<?
class Template {
     var 
$_file;
    var 
$_out;

    function 
Template($fn) {
  
        
$this->_file "templates/".$fn;

        
$filename $this->_file;
        
        
$fd = @fopen ($filename"r") or die("<pre>\"".$filename."\" cannot be found...");
          
$tmpl fread ($fdfilesize ($filename));
         
fclose ($fd);
        
        
$this->_out $tmpl;
        
        return 
true;
    }

    function 
Insert($cap,$wert) {
        
$this->_out str_replace($cap$wert$this->_out);
        return 
true;
    }

    function 
POut() {
        
$this->_aaprepare();
        
//$page = stripslashes($this->_out);
        
$page $this->_out;
        echo 
$page;
        return 
true;
    }

    function 
VOut() {
        
$this->_aaprepare();
        
//$page = stripslashes($this->_out);
        
$page $this->_out;
        return 
$page;
    }
    
}

?>
nur ne anregung...man muss ja nicht immer MySQL benutzen...
  Mit Zitat antworten
Alt 06.10.2004, 21:39  
Erfahrener Benutzer
 
Registriert seit: 02.08.2004
Beiträge: 209
PHP-Kenntnisse:
Fortgeschritten
Chance
Chance eine Nachricht über ICQ schicken
Standard

Hier mal meine Template Funktion meines CMS:
-Das Array mit den zu parsenden Werten wird direkt übergeben
-Übergebenes Array als $Parse vorhanden
-Übergebenes Array kann aufgesplittet werden
-Modul und Systemtemplates auswählbar.
-Hält Dateien mit der Endung "_bit" ungeparst im Speicher

PHP-Code:
function template ($Template='',$Parse=0,$ModulLoad='./portal_style/templates/',$DoExtract=0) {
  global 
$Status,$StatusToday,$User,$Page,$Menue;
  if (
$Session['id']) global $UserStatus,$UserProfil;
    
  if (
$GLOBALS['Site']) global $Site;
  if (
$GLOBALS['Modul']) global $Modul;
  
  if (
$ModulLoad == './portal_style/templates/' or empty($ModulLoad)) $ModulLoad='./portal_style/templates/'.$User['style_templates'];
  elseif (
$ModulLoad != '_var'$ModulLoad='./module/'.$ModulLoad.'/templates';
  if (
$ModulLoad != '_var') {
    if (!
$GLOBALS['Core']['TemplateCache'][$ModulLoad][$Template]) $Status['TemplateCounter']++;
      if (
substr($Template,-4) == '_bit') {
        if (!
$Core['TemplateCache'][$ModulLoad][$Template]) { 
 
$GLOBALS['Core']['TemplateCache'][$ModulLoad][$Template]=implode('',file($ModulLoad.'/'.$Template.'.htm'));
          
$Template=$GLOBALS['Core']['TemplateCache'][$ModulLoad][$Template];
        } else 
$Template=$GLOBALS['Core']['TemplateCache'][$ModulLoad][$Template];
      } else 
$Template=$Template=implode('',file($ModulLoad.'/'.$Template.'.htm'));
   }
  if (
is_array($Parse) and $DoExtract==1extract ($Parse);
  
$Status['TemplateParse']++;
  eval (
"\$Template = \"".addslashes($Template)."\";");
  return 
$Template;
}; 
Sehe übrigens selbst gerade einige Verbesserungen, die ich machen könnte ^^.
Chance ist offline   Mit Zitat antworten
Alt 06.10.2004, 21:51  
Gast
 
Beiträge: n/a
Standard

Hey cool! Thx!
Mit so vielen Lösungen hab ich jetzt nich gerechnet +g*
Gleich mal anschauen. Grad hab ich noch en tut gefunden:
http://www.softgames.de/developia/vi....php?cid=12493
  Mit Zitat antworten
Alt 06.10.2004, 21:53  
Gast
 
Beiträge: n/a
Standard

joa das tut schaut nicht schlecht aus...

Und das was ich dir gegeben habe war meine erste Template Klasse

die funktioniert auch super, hat aber keine sachen wie array, schleifen und sowas drinne....und man kann immer nur ein Template pro Instanz amchen...
  Mit Zitat antworten
Alt 06.10.2004, 23:04  
Gast
 
Beiträge: n/a
Standard

Ja...

Ich hab deine Klasse jetzt auch mal ein bischen nach meinen bedürfnissen angepasst
Mit Templatepack-ID usw.
Evtl. bau ich morgen noch if abfragen für die Templates ein usw.! Das ganze würde dann so aussehen:
<if($bla==$bla)><then>lalalala</then><else>lululu</else></if>

Eigentlich nur ein str_replace'n
  Mit Zitat antworten
Antwort


Themen-Optionen
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
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eckige Klammern in Template nutshell PHP Tipps 2006 9 05.06.2006 19:12
Template und Parser... was ist mit Abfrageresultat > 1?? reimondo PHP Tipps 2006 5 05.04.2006 00:16
Smarty: Variable als Template ausgeben duderino PHP Tipps 2006 11 08.01.2006 18:43
BBCode Parser Mutatos PHP Tipps 2006 1 05.01.2006 12:19
template in template einfuegen tonne PHP Tipps 2005-2 8 10.11.2005 22:24
Wordpress Template HTML, Usability und Barrierefreiheit 8 22.08.2005 11:21
Template verständniss problem; referenz PHP Tipps 2005 17 19.05.2005 06:06
Template: Verschachteln von foreach PHP Tipps 2005 2 12.05.2005 15:37
[Erledigt] Text_Wiki transform in Smarty Template PHP Tipps 2005 0 09.05.2005 14:59
Php Code als Variable definieren und in Template darstellen PHP Tipps 2004-2 4 31.12.2004 16:22
suche ein bestimmtes template system PHP Tipps 2004-2 2 07.11.2004 19:49
Template Parser PHP Tipps 2004 10 23.07.2004 15:35
Template Parser Script Suckd PHP-Fortgeschrittene 2 11.07.2004 17:20
Suche Template Parser - Muss PHP Datein includen können Schaelle PHP Tipps 2004 0 01.07.2004 20:48
[Erledigt] Template Scripting PHP-Fortgeschrittene 2 04.06.2004 18:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
template klasse if parsen, php template parser, template parser, php template parsen, template parser php, templateparser, template parsen, php parse tpl, ordner parser auf dem server, smarty 3 php classe paser php templates, wbb template html parsen, php $parse, template paser php, template klasse php cache, php tpl->parse, php template ausgeben, php oop template parser, php template parsing, parse include tpl, template parser mysql

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.