mmofacts.com

Template System für PHP Website?

gepostet vor 15 Jahre, 7 Monate von TheDarkRose

Ich weiß, ich weiß, es gibt hier einige PHP Hasser, aber mit welchen Template System habt ihr die besten Erfahrungen gemacht um Code und HTML-Templates voneinander zu trennen?

Wobei ich auch am überlegen bin ob ich dem Browser einfach eine xml schicke und diese über XSLT transformieren lasse. Was haltet ihr davon?

so far

patrik

gepostet vor 15 Jahre, 7 Monate von Amun Ra

Ich benutze PHP als Template-Engine:

PHP:




gepostet vor 15 Jahre, 7 Monate von TheDarkRose

Ja das mit den echo Befehlen möcht ich ja eben vermeiden durch solche Template Klassen.

Und ich möcht ja die Seitenvorlage getrennt vom Code schreiben.

gepostet vor 15 Jahre, 7 Monate von Drezil

Original von TheDarkRose

Ja das mit den echo Befehlen möcht ich ja eben vermeiden durch solche Template Klassen.

unterschied zwischen und liegt dann wo genau?

Und ich möcht ja die Seitenvorlage getrennt vom Code schreiben.

dann tu das doch einfach.

Ich nutze http://phpsavant.com/docs/ und bin voll zufrieden damit. Kein unnötiger overhead, keine dämliche extra-syntax.

Weil wieso sollte man eine Template-Engine in eine Template-Engine einbauen?

gepostet vor 15 Jahre, 7 Monate von n26

Als ich noch aktiv PHP genutzt habe ich so verfahren wie Amun Ra, bloss dass ich das ganze so gebaut habe dass es dich vom Handling wie ne spezielle Template Engine war.

Wobei das Kernstück der TemplateEngine nur ca. das gemacht hat:

PHP:

public function fetch()
{		
	extract($this->vars);

	ob_start();
	
	require $this->file;

	$contents = ob_get_contents();

	ob_end_clean();

	return $contents;
}

Das HTML sah so aus wie das von Amun Ra, bloss das ich die Short Tags verwendet habe.

Nur dass ich z.B.: {$foo} anstatt habe ist mir der dafür notwendige Overhead nicht wert gewesen.

Original von TheDarkRose

Wobei ich auch am überlegen bin ob ich dem Browser einfach eine xml schicke und diese über XSLT transformieren lasse. Was haltet ihr davon?

Das habe ich mal eine Zeit lang verfolgt. Fande das an sich auch eine sehr feine Sache. Was mich auch sehr gereizt hatte, war das der Quellcode im Browser (solang man es clientseitig transformieren lässt) richtig fein aussieht. Aber lässt man es clientseitig transformieren machten (vor ca. 2 Jahren war das) nicht alles Browser das selbe (wer hätte das gedacht?) und es war teilweise sogar unmöglich das ganze optimal umzusetzen.

Dann habe ich das ganze serverseitig transformieren lassen was an sich super funktioniert hatte. Besonders da ich durch 3 verschiedene XSLTs 3 verschiedene Ansichten zur Verfügung stellen konnte: Normal, Druckansicht, RSS Feed

Aber um das ganze wirklich als Templateersatz zu nutzen war mir der Aufwand dann zu groß was die nötige Schreibarbeit anbelang.

Wobei die Templateübergabe beim clientseitigen transformieren, soweit ich mich recht erinnere, sogar extremer rotz war. Das transformieren via PHP bot da eine schönere Variante.

Würde ich selber jetzt nochmal vor die Frage gestellt werden was ich für eine Templateengine nutzen sollte, dann würde ich mich ganz klar für eine Eigenentwicklung entscheiden. Denn die Templateengines die ich bisher gesehen habe waren entweder nicht die Richtung wie ich wollte oder hatten viel zu viel, oft überflüssige, Funktionen und wenn ich was hasse sind es überflüßige Funktionen ;)

so long,
n26 

gepostet vor 15 Jahre, 7 Monate von tector

Ich benutze die Zend_View-Komponente des Zend-Frameworks mit PHP, allerdings überlege ich ernsthaft in Zukunft PHPTAL zu verwenden.

gepostet vor 15 Jahre, 7 Monate von Dorgo

hallo,

also ich hab das so gelöst, vielleicht bringts dir was :):

Als erstes die Template Funktionen definieren:

PHP:

//#################### Template Funktionen ####################//
function template_page ($html_datei) {
global $template_page;
$template_page = $html_datei;
}
function template_add ($text, $platzhalter) {
global $template;
$template[$platzhalter] = "";
$template[$platzhalter] .= $text;
}
function template_send (){
global $template;
global $template_page;
$return = file_get_contents($template_page);
foreach($template as $Index => $Ausgabe) {
$return = str_replace("~{$Index}~",$Ausgabe,$return);
}
echo $return;
}

 Ne PHP Datei, wo z.B.: Berechnungen durchgeführt werden gibt am Ende dies aus:

PHP:

			//Anfang -- Datei arbeiten.html einlesen --
template_page('template/arbeiten.html');
template_add($arbeiten_meldung, 'arbeiten_meldung');
template_add($aktions_ausgabe, 'aktions_ausgabe');
template_send();
//Ende -- Datei arbeiten.html wurde eingelesen --

 Und die dazupassende HTML-Datei:

HTML:


Arbeiten
~arbeiten_meldung~
~aktions_ausgabe~

 Hoffe es ist verständlich, falls Fragen einfach melden :). Wenn wer Verbesserungs Ideen hat, sind immer gerne gesehen :).

lg,

Dorgo

Editt:// Wow das "Syntax Hervorheben" wird ja richtig farblich aufbereitet^^, und das HTML führt er aus, lol.

gepostet vor 15 Jahre, 7 Monate von TheUndeadable

$template[$platzhalter] = "";
$template[$platzhalter] .= $text;

??

 $template[$platzhalter] = $text;

!!

gepostet vor 15 Jahre, 7 Monate von knalli

Nagut, du hast angefangen ;)

Genausogut könnte man sich fragen, wieso du mit globalen Variablen hantierst.. und die Zeile "$return = str_replace("~{$Index}~",$Ausgabe,$return);" finde ich nahezu Zeichen für Zeichen abenteuerlich: Englisch/deutsch gemischt, groß/klein gemischt, kein Style (bspw. Leerzeichen).. bin ich jetzt böse, wenn ich das so schreibe? :(

gepostet vor 15 Jahre, 7 Monate von Dorgo

Hallo,

danke für eure Infos :), sollte da echt etwas mehr "style und Ordnung" reinbringen.

Aber die Ziele hat schon was ansicht^^. Werds bei gelegenheit gleich ma überarbeiten.

lg,

gepostet vor 15 Jahre, 7 Monate von marlord

Ich verwende seit Jahren das Template System im PEAR: IT Template.

gepostet vor 15 Jahre, 7 Monate von BlackScorp

ich verwende das hier:

http://pastebin.com/m177f3af7

und verwendung sieht dann so aus:

test.html

{mein_text}

{ein_anderer_text}

index.php

//klasse inlcuden:

$instanz->setFile('test.html');

$instanz->setCharset();

$instanz->setVariables('mein_text','ein_anderer_text');

$instanz->setValues($text_aus_db,'test nur so reingeschrieben');

echo $instanz->parseTemplate($instanz->show()); // parseTempalte nur dazu da, damit umlaute angezeigt werden

MFG

Auf diese Diskussion antworten