php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.04.2006, 19:47  
Neuer Benutzer
 
Registriert seit: 01.04.2006
Beiträge: 2
BlackRazor
Standard Einfache verarbeitung von Templates

Hi leutz,
Ich bin grad dabei Website in php zu coden und will bei der eigentlich
alles selber machen, also auch keinen fertigen templateparser benutzen.
Hatte auch schon ne idee wie ich selber einen mache, hier mal mein
source:
PHP-Code:
//Die Klasse
class tpl{
  var 
$templates = array();
  function 
load($template){
    include(
"./templates/".$template.".php");
    return 
$this->templates[$template];
  }
  function 
parse($template){
    print(
$template);
  }
}
//Das Template
$this->templates["index"] = "...
\$var1 

\$var2
..."
;
//Die aufgerufene Datei
  
$tpl = new tpl;
  
$var1 stripslashes($tpl->load("inhalt"));
  
$var2 "...";
  eval(
"\$tpl->output(\"".$tpl->load("index")."\");"); 
Ist zwar sehr einfach gemacht, aber reicht eigentlich für meine zwecke
und der vorteil gegenüber vielen anderen parsern ist, dass man variablen
sehr einfach durch andere templates ersetzen kann.

Jetzt kommt aber mein problem: Ich brauche auf jeden fall noch if
verzweigungen und schleifen, habe aber irgendwie überhaupt keine idee
wie ich das realisieren soll.
Ich hoffe jemand von euch kann mir nen ansatz oder so geben, damit ich
da endlich mal weiter komme...
Danke für jede hilfe!
mfg, BlackRazor
BlackRazor ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.04.2006, 01:33  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi "BlackRazor".

Wie wäre es denn einfach damit, pro (Sub-)Template ein Template-Objekt zu bauen, diesem die Werte zu übergeben und zum Rendern einfach eine Methode des Root-Template-Objekts aufzurufen, das die Template-Datei dann einbindet.

In der Template-Datei greifst du auf die Wete via $this->var1 zurück. Diese Anfragen fängst du über einen Getter ab (Tempalte::__get()) und, wenn der Wert vom Typ Template ist, lass das Subtemplate seinerseits rendern.

Dabei gibst du die Variablenwerte entweder immer gleich auch (Aufruf also mit <?php $this->foo; ?> anstatt über <?php echo $this->foo; ?>) oder du gibst eben nur die Werte zurück. In dem Fall musst du vor dem Rendern des Sub-Templates natürlich den Output Buffer anschmeißen.

So kannst du dann ein beliebiges PHP-Skript als Template verwenden (also auch mit allen Kontrollstrukturen) und hast trotzdem den Grundstein für eine saubere Trennung zwischen Geschäfts- und Darstellungslogik. Und, du hast sauber gerennte Namensräume, wobei es vielleicht noch sinnig sein kann, eine Regisry oder so zu basteln, n die du Verte legst, die in allen Templates zur Verfügung stehen sollen (vom Benutzernamen über den Seitentitel bis hin zu Komponenten (Subtemplates), die global einsetzbar sein sollen etc.).

Basti
Basti ist offline   Mit Zitat antworten
Alt 02.04.2006, 10:24  
Gast
 
Beiträge: n/a
Standard

So ein schönes Tutorial:
http://forum.developers-guide.net/showthread.php?t=684
  Mit Zitat antworten
Alt 02.04.2006, 21:09  
Neuer Benutzer
 
Registriert seit: 01.04.2006
Beiträge: 2
BlackRazor
Standard

Danke für eure antworten, aber so ganz meiner vorstellung entsprechen
die möglichkeiten doch nicht.
Das mit den verzweigungen hab ich jetzt auch schon gelöst:
PHP-Code:
$this->templates["index"] = "
...
<if($variable==1)>...<else>...</if>
..."

Das formt der parser in folgene form um:
PHP-Code:
$this->templates["index"] = "
...\".((\$if==true) ? (\"...\") : (\"...\")).\"..."

(Hab das die umformung jetzt noch nicht gecodet, aber das ist ja kein
großes problem)
Damit kann man auch php einfügen und es wird gleich ausgegeben.

Jetzt ist nurnoch das problem mit den schleifen, dass ich vor habe ähnlich
zu lösen.
Im template halt sowas wie <loop($einarray)>...</loop>.
Da weiß ich noch nicht genau wie ich es realisieren soll, da es mir auch
lieb wäre wenn auch mehrdimensionale arrays verarbeitet werden
könnten, so wie zB bei vLibTemplate. Bin also weiterhin für jede hilfe
dankbar!!
BlackRazor ist offline   Mit Zitat antworten
Alt 02.04.2006, 21:45  
Gast
 
Beiträge: n/a
Standard

Zitat:
Bin also weiterhin für jede hilfe dankbar!!
Vielleicht bringt dich das auf eine Idee:
http://forum.developers-guide.net/sh...3554#post23554
  Mit Zitat antworten
Alt 02.04.2006, 23:43  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Das ist beides ziemlich krass!

@"BlackRazor":

Wozu schreibst du PHP-Code - dazu noch mit tausenden Backslashes, da er ja innerhalb einer Variablenzuweisen steht (was man übrigends einfach nausnehmen könnte, wenn man den diesen Part erst im eva()-Parameter dazuschreibt! - was übrigends in die Klasse gehört und nicht in den Client-Code!) - der aber anstatt der PHP-Kontrollstrukturen jetzt irgendwelche Tags verwendet, die du aufwändig umschreiben musst, nur um den PHP-Code dann auszuführen? Das ergibt doch keinen Sinn, oder? Was war denn die Motivation vor die "Template-Sprache" PHP noch eine weitere Template-Sprache davor zu setzen? Doch vor allem, um a) die Schreibweise zu erleichtern und um b) quasi eine Sandbox aufzusetzen. Erseres Ziel scheins du nicht zu verfolgen, sonst würdest du doch niemandem zumuten, in seinem Template sämtliche double quotes escapen zu müssen (bzw. wäre das der erste Punkt den du angehen würdest). Und das zweite verfehlst du mit eval() sowieso. Also wozu das alles?

Versteh mich nicht falsch. Ich hab nichts gegen unterschiedlichste Ansätze und auch nichts dagegen, Standardlösungen nachzubauen bzw. selbst nach eigenen Lösungen zu suchen, aber dazu sollte doch zunächstmal das Problem, das es zu lösen gilt auch definiert werden. Die erste Motivation ist ja wohl die Trennung der beiden Schichten. Aber die lässt sich am schnellsten mit reinem PHP erreichen. Dann kommt eben vielleicht der Wunsch nach einer vereinfachten Syntax eingeschränkten Zugriffsmöglichkeiten dazu (was noch?) und da muss dann schon ein Gewinn bei raus kommen, wenn man dafür den Performance-Verlust in Kauf nimmt.

Nenn doch mal deine Motivation. Nicht "alles selber schreiben", sondern warum überhaupt eine Template Engine.

@"CIX88":
Das mach mal mit verschachtelten Loops, Bedingungen etc. Außerdem musst du so das Template bei jedem Aufruf parsen (mit PHP). Klingt für mich auch nicht sehr vorteilhaft gegenüber PHP oder einfachen Übersetzern Template-Sprache -> PHP.


Basti
Basti ist offline   Mit Zitat antworten
Alt 02.04.2006, 23:46  
Gast
 
Beiträge: n/a
Standard

Zitat:
Das mach mal mit verschachtelten Loops, Bedingungen etc.
Hab ich schon
  Mit Zitat antworten
Alt 03.04.2006, 00:11  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Oh sh**!
Basti ist offline   Mit Zitat antworten
Alt 03.04.2006, 08:06  
Gast
 
Beiträge: n/a
Standard

Nö nix sh...

Schade ist das falsche Thread um weiter darüber zu diskutieren ...
  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
templates und Co Elta PHP Tipps 2008 6 14.07.2008 15:13
if abfragen in Templates rob1011 PHP Tipps 2006 13 03.08.2006 15:55
Vererbung bei Templates Pain-maker PHP-Fortgeschrittene 9 28.03.2006 10:05
Templates - Variablen $tpl['dies']['und']['das'] Alpha Centauri PHP Tipps 2006 12 08.03.2006 14:39
E-Mail Templates Mano PHP Tipps 2005-2 4 09.10.2005 14:52
Templates - DB oder File? PHP Tipps 2005-2 11 23.07.2005 05:30
Templates per ACP PHP Tipps 2005-2 0 26.06.2005 20:00
[Erledigt] Templates PHP Tipps 2005 4 06.04.2005 16:24
Templates GrU3nL!nG PHP Tipps 2005 6 26.03.2005 14:47
Mit Templates Navigation erstellen? (welches Templatesyste?) zwelch PHP Tipps 2004-2 5 18.11.2004 15:14
[Erledigt] Wieder mal Templates! PHP-Fortgeschrittene 1 10.09.2004 11:42
Problem bei HP basierend auf Templates PHP Tipps 2004 3 17.07.2004 12:37
Templates PHP Tipps 2004 5 29.06.2004 16:30
Problem mit Templates suter PHP Tipps 2004 3 23.06.2004 14:40
Wie benutze ich Templates? PHP Tipps 2004 5 11.06.2004 13:23

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
einfache templates, einfaches template.php, php templates verarbeiten

Alle Zeitangaben in WEZ +2. Es ist jetzt 21: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.