[PHP] - Variablen als Template-Variablen

Benutzer-621

abgemeldet
20 April 2006
744
64
Hi,
Ich möchte alle im Ablauf vorhandenen Variablen, wie folgt, als Template-Variablen nutzen.

PHP:
$user['userID'] = 20876;
$user['userName'] = 'klamm';
$user['Lieblings']['Sender'] = 'klamm TV';

print('

klammID: {$user[userID]}
Username: {$user[userName]}
Fav-Sender: {$user[Lieblings][Sender]}
IP-Adresse: {$_SERVER[REMOTE_ADDR]}

');
Das Einzige was anders ist, sind eben die Klammern und die weggelassenen Quotes. Habe iwie preg_replace/preg_match_all im Kopf, bin aber noch net drauf gekommen. Schonmal Tankeschön sagen :D :p.
 
Setz es die Ausgabe in Double-Quotes, dann werden die Variablen von PHP automatisch ersetzt.

Greetz

paddya
 
@SAVIOLA:
Warum das Rad neu erfinden (und dann auch noch so komisch... Template heißt ja, dass eben keine echo/printf-Anweisungen im PHP-Code sind). Nimm Smarty, dann siehst das in etwa so aus:

PHP:
require_once("../smarty/libs/Smarty.class.php");
$smarty = new Smarty();

$user['userID'] = 20876;
$user['userName'] = 'klamm';
$user['Lieblings']['Sender'] = 'klamm TV';
$smarty->assign('user', $user);

$smarty->display('foo.tpl');
Im Template greift du so drauf zu:
HTML:
klammID: {$user.userID}
Username: {$user.userName}
Fav-Sender: {$user.Lieblings.Sender}
IP-Adresse: {$smarty.server.REMOTE_ADDR}
 
Template heißt ja, dass eben keine echo/printf-Anweisungen im PHP-Code sind).
Ist der sinn von Templates nicht eigentlich die Trennung von Logik und Design? ;)
Ein echo gehört meiner Meinung nach nämlich nicht zur Logik. Ich nutze deswegen auch kein Templatesystem alá Smarty, sondern hab ne eigene kleine Klasse, an die ich meine Variablen übergebe und später mit einer Funktion nur das Template includiere. In dem Template gebe ich die Variablen dann per echo aus. Das ist für mich immer ncoh ein Templatesystem, auch wenn ich PHP verwende, und keine Klasse ;)
 
@SAVIOLA:
Warum das Rad neu erfinden (und dann auch noch so komisch... Template heißt ja, dass eben keine echo/printf-Anweisungen im PHP-Code sind).

Upps, ja war dummes Bleistift. Es soll natürlich mit file_get_contents geladen werden und mit strtr? ersetzt werden.

Smarty habe ich mir schon angeschaut, find ich auch sehr nützlich, meine aber dass ich es dafür noch nicht BRAUCHE.
 
Ist der sinn von Templates nicht eigentlich die Trennung von Logik und Design? ;)
Ein echo gehört meiner Meinung nach nämlich nicht zur Logik. Ich nutze deswegen auch kein Templatesystem alá Smarty, sondern hab ne eigene kleine Klasse, an die ich meine Variablen übergebe und später mit einer Funktion nur das Template includiere. In dem Template gebe ich die Variablen dann per echo aus. Das ist für mich immer ncoh ein Templatesystem, auch wenn ich PHP verwende, und keine Klasse ;)

Was anderes macht man doch mit smarty auch nicht. Design und Logik werden doch getrennt. Und wie theHacker schon sagte, warum das Rad neu erfinden. Ich find smarty wirklich super.
 
Was anderes macht man doch mit smarty auch nicht. Design und Logik werden doch getrennt. Und wie theHacker schon sagte, warum das Rad neu erfinden. Ich find smarty wirklich super.
Ja schon, aber ich finde, dass Smarty kompletter Overhead ist und unnötig Ressourcen verschwendet. Da nutz ich lieber meine PHP Template Klasse, da muss nicht noch extra was geparset werden ;)
 
Ja schon, aber ich finde, dass Smarty kompletter Overhead ist und unnötig Ressourcen verschwendet. Da nutz ich lieber meine PHP Template Klasse, da muss nicht noch extra was geparset werden ;)

nur der Vorteil ist Smarty kennt jeder ;)
Und gerade wenn Software an Kunden geht finde ich es eine Zumutung, dass jeder Programmierer meint (oder eben viele) ein neues Tpl-System zu schaffen, weil Smarty eben was-weis-ich doof ist. Das bedeutet dann wenn Kunden dann einen neuen Programmierer für die Software suchen, muss sich derjenige wieder ein neues Tpl-System aneignen, und das geht dann soweit, dass man für 70% der Kunden jeweils sich ein neues Tpl-System ansehen darf, oh klasse, danke Flaschenkind ;)

Dazu kommt auch noch das Smarty wesentlich flexibler als 99% der selbst entwickelten Tpl-Systeme ist, denn auf einmal muss man was umsetzen was diese selbst entwickelten Tpl-Systeme nicht können, und dann muss man sogar am Tpl-System schrauben, was eine tolle Welt.
 
nur der Vorteil ist Smarty kennt jeder ;)
Und gerade wenn Software an Kunden geht finde ich es eine Zumutung, dass jeder Programmierer meint (oder eben viele) ein neues Tpl-System zu schaffen, weil Smarty eben was-weis-ich doof ist. Das bedeutet dann wenn Kunden dann einen neuen Programmierer für die Software suchen, muss sich derjenige wieder ein neues Tpl-System aneignen, und das geht dann soweit, dass man für 70% der Kunden jeweils sich ein neues Tpl-System ansehen darf, oh klasse, danke Flaschenkind ;)
In dem Punkt hast du wohl Recht. Aber bei mir hat man eine Funktion um die Variable zu übergeben (assign(), wie bei Smarty) und in der Template Datei hat man dann ja seine normalen PHP Funktionen, deswegen nicht wirklich mehr Einarbeitungszeit ;)

Dazu kommt auch noch das Smarty wesentlich flexibler als 99% der selbst entwickelten Tpl-Systeme ist, denn auf einmal muss man was umsetzen was diese selbst entwickelten Tpl-Systeme nicht können, und dann muss man sogar am Tpl-System schrauben, was eine tolle Welt.
Wie gesagt, das basiert bei mir alles auf PHP. Also alle Funktionen die PHP bietet, hat man dann auch in den Templates zur Verfügung. Deswegen sollte damit so gut wie jeder, der PHP kann klarkommen *g* Die Hauptaufgabe eines Templatesystems ist ja die Trennung von Logik und Design, und das schafft man auch mit so einem PHP Gerüst.
 
@ice-breaker:

mal noch ne frage kurz zu smarty...

das hier hab ich mal aus der doku:
Code:
{if $name eq "Fred"}
    Willkommen der Herr.
{elseif $name eq "Wilma"}
    Willkommen die Dame.
{else}
    Willkommen, was auch immer Du sein magst.
{/if}
hier wäre es ja sinnvoller in php alles zu prüfen und dann nur mit nem simplen assign(...) den platzhalter zu füllen. gibts denn ne regel oder so, wo ich entscheiden kann das macht smarty und das macht php? viele dinge gehen ja in beiden system, aber manchmal ertappe ich mich, das ich viel zu viel vom template system machen lasse :)

In dem Punkt hast du wohl Recht. Aber bei mir hat man eine Funktion um die Variable zu übergeben (assign(), wie bei Smarty) und in der Template Datei hat man dann ja seine normalen PHP Funktionen,

ich denke du hast nen template system? was haben da php funktionen verloren?
 
Zuletzt bearbeitet von einem Moderator:
ich denke du hast nen template system? was haben da php funktionen verloren?
Du hast den Sinn eines Templatesystems nicht ganz verstanden.
Man nutzt Templatesysteme um Logik und Design zu trennen und nicht um PHP aus den Template Dateien zu verbannen. Ich mach ja nicht mitten im Code meine Ausgaben, sondern alles am Ende wie es sich gehört.
Und wenn ich in meiner Template Datei die Variablen und Schleifen mit PHP bearbeite, oder ob ich da solche Platzhalter (wie nennt man sowas eigentlich wirklich? :ugly:), wie sie z.B. Smarty verwendet, verwende, ist alles das gleiche. Nur dass diesee Platzhaltern nachträglich noch geparset werden müssen.
 
Man nutzt Templatesysteme um Logik und Design zu trennen und nicht um PHP aus den Template Dateien zu verbannen. Ich mach ja nicht mitten im Code meine Ausgaben, sondern alles am Ende wie es sich gehört.
Und wenn ich in meiner Template Datei die Variablen und Schleifen mit PHP bearbeite, oder ob ich da solche Platzhalter (wie nennt man sowas eigentlich wirklich? :ugly:), wie sie z.B. Smarty verwendet, verwende, ist alles das gleiche. Nur dass diesee Platzhaltern nachträglich noch geparset werden müssen.


Wenn ich deine Antwort so lese frag ich mich, wer hier den Sinn eines Template-Systems nicht verstanden hat. Dann kannst du auch gleich darauf verzichten.
Meine Smarty-Templates besitzen kein einziges Stück PHP-Code. Das is ja auch der Sinn der Sache.
 
Wenn ich deine Antwort so lese frag ich mich, wer hier den Sinn eines Template-Systems nicht verstanden hat. Dann kannst du auch gleich darauf verzichten.
Meine Smarty-Templates besitzen kein einziges Stück PHP-Code. Das is ja auch der Sinn der Sache.
Wo ist der Unterschied, ob ich <?php echo $var; ?> schreibe oder {$var}? Außer dass es evt. länger ist. Dadurch spart man sich aber das ganze unnötige parsen.
 
und in der Template Datei hat man dann ja seine normalen PHP Funktionen, deswegen nicht wirklich mehr Einarbeitungszeit ;)
nur aufpassen, dass nicht in der PHP-Datei dann man auf einmal Ahnung von den Datenstrukturen haben muss die Übergeben werden (also nochmal Objekte verschachteln usw).
Also was ich festgestellt habe, das wenn man wirklich volles PHP in der Template Datei zur Verfügung hat, dass oftmal noch Logik in den View überschwappt, so nachdem Motto ach das eine Array-Element da kann ich ja auch im View raustrennen.


Wie gesagt, das basiert bei mir alles auf PHP. Also alle Funktionen die PHP bietet, hat man dann auch in den Templates zur Verfügung. Deswegen sollte damit so gut wie jeder, der PHP kann klarkommen *g* Die Hauptaufgabe eines Templatesystems ist ja die Trennung von Logik und Design, und das schafft man auch mit so einem PHP Gerüst.
Und mit Leuten die kein PHP können?
Du nimmst damit Designern oder Personen, die nur leicht HTML können die Möglichkeit Templates anzupassen, denn nen Smarty Template ist für jemanden ohne Ahnung viel leichter anpassbar (möglicherweise auch nur Copy&Paste) als ne PHP-Datei, denn in Smarty muss er nur nachschlagen, für PHP-Templates muss man Basis-Wissen von PHP erwerben.


gibts denn ne regel oder so, wo ich entscheiden kann das macht smarty und das macht php? viele dinge gehen ja in beiden system, aber manchmal ertappe ich mich, das ich viel zu viel vom template system machen lasse :)
neija das ist nun keine gängige Sache. Du musst immer überlegen ist es Logik oder ist es einfach nur Ausgaben zu formatieren. Und ich würde sagen es ist ganz klar Logik, wenn ich Namen in Geschlechter umsetze, und gehört damit nicht in Smarty. Allerdings kann man diese Sache auch aus nem anderen Blickwinkel betrachten. Also ich finde es ganz klar Logik.


Nur dass diesee Platzhaltern nachträglich noch geparset werden müssen.
Smarty ist eine kompilierende Template-Engine, sprich diese Platzhalter werden einmal in PHP-Code überfordert und werden danach nur noch bei Veränderung des Templates neu erzeugt. Also jedesmal neu parsen ist da nicht.
Und das Smarty zuviel Resourcen verschlingt, ja und nein ;)
Eigentlich ist es wenig was es braucht, aber anhand von TemplateLite (Kasten links) sieht man auch, dass man den Speicherverbrauch auch noch optimieren kann.
 
Wo ist der Unterschied, ob ich <?php echo $var; ?> schreibe oder {$var}? Außer dass es evt. länger ist. Dadurch spart man sich aber das ganze unnötige parsen.

das eine ist smarty und das andere ist einfach nur php mit html vermischt. da kann ich mir es auch gleich sparen und direkt inline-php schreiben. für mich ist das was du machst 100%ig kein Templatesystem.

Gib nem Designer mal dein Template... was will der mit php? gar nix...
 
nur aufpassen, dass nicht in der PHP-Datei dann man auf einmal Ahnung von den Datenstrukturen haben muss die Übergeben werden (also nochmal Objekte verschachteln usw).
Also was ich festgestellt habe, das wenn man wirklich volles PHP in der Template Datei zur Verfügung hat, dass oftmal noch Logik in den View überschwappt, so nachdem Motto ach das eine Array-Element da kann ich ja auch im View raustrennen.
Ich verwende diese Art von Templates seit afaik einem Jahr, und habe sowas nie gemacht. Wenn man das nicht strikt durchzieht, sollte man doch lieber zu Smarty greifen, zum "Selbstschutz" *g*

Und mit Leuten die kein PHP können?
Du nimmst damit Designern oder Personen, die nur leicht HTML können die Möglichkeit Templates anzupassen, denn nen Smarty Template ist für jemanden ohne Ahnung viel leichter anpassbar (möglicherweise auch nur Copy&Paste) als ne PHP-Datei, denn in Smarty muss er nur nachschlagen, für PHP-Templates muss man Basis-Wissen von PHP erwerben.
Naja, ne foreach Schleife in Smarty kann man sich genausogut zusammenkopieren wie in PHP, oder mit einer Variable. Ich sehe da kein großes Hinderniss, höchstens ein ganz kleines, was mit ein bisschen denken schnell überwunden ist ;) Und wenn jemand da Grundsätzlich was ändern möchte, dann muss in der Regel auch was im PHP Code geändert werden. Denn was willst du da hinzufügen, dass nicht durch die Logik an Smarty geliefert wird?

gibts denn ne regel oder so, wo ich entscheiden kann das macht smarty und das macht php? viele dinge gehen ja in beiden system, aber manchmal ertappe ich mich, das ich viel zu viel vom template system machen lasse :)
neija das ist nun keine gängige Sache. Du musst immer überlegen ist es Logik oder ist es einfach nur Ausgaben zu formatieren. Und ich würde sagen es ist ganz klar Logik, wenn ich Namen in Geschlechter umsetze, und gehört damit nicht in Smarty. Allerdings kann man diese Sache auch aus nem anderen Blickwinkel betrachten. Also ich finde es ganz klar Logik.
Ist Ansichtssache finde ich. Ich würde das z.B. nicht als Logik nehmen, da ich meinen Text lieber komplett in den Templates habe, da man dann auf einen Blick sieht, wo es angepasst werden muss, und man nicht erst noch in die PHP Datei gucken muss.

Smarty ist eine kompilierende Template-Engine, sprich diese Platzhalter werden einmal in PHP-Code überfordert und werden danach nur noch bei Veränderung des Templates neu erzeugt. Also jedesmal neu parsen ist da nicht.
Und das Smarty zuviel Resourcen verschlingt, ja und nein ;)
Eigentlich ist es wenig was es braucht, aber anhand von TemplateLite (Kasten links) sieht man auch, dass man den Speicherverbrauch auch noch optimieren kann.
Stimmt, habe lange nichts mehr mit Smarty gemacht und deswegen nicht mehr an das Cachen gedacht. Aber trotzdem ist das für mich noch keni Argument zu wechseln :mrgreen:

Was ich an meinem System auch deutlich besser finde, ist dass es von meinem Editor direkt mit Syntaxhighlighting hervorgehoben wird, wenn da PHP Code zwischen den HTML Sachen steht. Das ist mir für Smarty-Tags noch nicht über den Weg gelaufen (seis ein Addon, muss ja nicht native in der IDE/dem Editor sein)
 
Naja, ne foreach Schleife in Smarty kann man sich genausogut zusammenkopieren wie in PHP, oder mit einer Variable. Ich sehe da kein großes Hinderniss, höchstens ein ganz kleines, was mit ein bisschen denken schnell überwunden ist ;)
Och dann kommen Single-Qutoes, und alles andere was ich schon gesehen habe, was Designern da Probleme gemacht hat, und Smarty können eben viele schon, weil es überall eingesetzt wird.


Und wenn jemand da Grundsätzlich was ändern möchte, dann muss in der Regel auch was im PHP Code geändert werden. Denn was willst du da hinzufügen, dass nicht durch die Logik an Smarty geliefert wird?
Wieso grundsätzliches ändern? Kann ja sein, dass eine Seite komplett anders formatiert werden soll und die Daten ganz anders ausgegeben werden sollen, dann können die assignten Daten immernoch reichen, aber es muss eben anders behandelt werden.


Ist Ansichtssache finde ich. Ich würde das z.B. nicht als Logik nehmen, da ich meinen Text lieber komplett in den Templates habe, da man dann auf einen Blick sieht, wo es angepasst werden muss, und man nicht erst noch in die PHP Datei gucken muss.
jup, das stimmt auch, ist eben doof, weil das Beispiel net gerade supi war, sowas wird man eben net finden, in der Regel wird das ja durch Datenbanken kommen und daher nen ganz anderen Aufbau haben und damit eine andere Vorgehensweise.


Was ich an meinem System auch deutlich besser finde, ist dass es von meinem Editor direkt mit Syntaxhighlighting hervorgehoben wird, wenn da PHP Code zwischen den HTML Sachen steht. Das ist mir für Smarty-Tags noch nicht über den Weg gelaufen (seis ein Addon, muss ja nicht native in der IDE/dem Editor sein)
SmartyPDT :biggrin:


!= Templatessystem
doch es ist definitv auch eines, derjenige der Templatesystem nicht verstanden hat bist du. Denn Templates muss nicht bedeuten das HTML vom PHP zu trennen, sondern Logik (Datenbankabfragen und alles drumherum) von der Ausgabe (Views) zu trennen