 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
29.05.2008, 16:13
|
#1
|
|
TP-Supporter
Registriert seit: Nov 2005
|
PHP Code aus HTML-Template ausführen?
Tach zusammen,
ich habe ein Script welches ein Template einbindet, anpasst und ausgiebt.
Bsp.:
PHP-Code:
function ausgabe($template)
{
if(file_exists($template))
{
$resource = fopen($template, "r");
$html = fread($resource,filesize($template));
fclose($resource);
$html = str_replace("{var}","dingenskirchen",$html);
return($html);
}
else
{
return(false);
}
}
$template wär dann der Pfad hierzu:
HTML-Code:
<p>Ich denke gerade: {var}</p>
Soweit so gut, klappt alles.
Jetzt möchte ich es dem User ermöglichen in das Template auch PHP-Code einzufügen, also sowas:
HTML-Code:
<p>Du befindest dich auf <?=$_SERVER['SELF']?> und denkst {var}</p>
Die einzige Möglichkeit die mir da einfällt wäre den PHP Code zu extrahieren, eine variable davor zu setzen, also $foo = $_SERVER['SELF'], das ganze in einer neuen datei abzuspeichern und diese dann im script zu includen
Gibts da was eleganteres?
|
|
|
29.05.2008, 18:39
|
#2
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Warum denn nicht im Temp, statt <?=$_SERVER['SELF']?> einfach {SCRIPTNAME} eisetzen und dann in PHP Code
$html = str_replace("{SCRIPTNAME}", $_SERVER['PHP_SELF'], $html);
|
|
|
29.05.2008, 18:46
|
#3
|
|
TP-Supporter
Registriert seit: Nov 2005
|
Weil ich dem User die ganzen PHP-Funktionen anbietenmöchte und nicht nur ausgewählte Sachen. Aber ich überleg grad ... das wäre ziemlicher Unsinn, weil es dann möglich wäre, dass sich das Script welches die Funktion aufruft selbst als Template angiebt. Und dann würde man in ner Rekursion ohne "Re" hängen.
-> Blödsinn ... ich machs, wie du's gesagt hast, danke!
|
|
|
29.05.2008, 18:56
|
#4
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Naja, das muss ja nun nicht passieren ...
Ist es OOP? Dann kannst das ja recht leicht umgehen.
Aber ehrlich?
Ich nutzte diese Art von Templates nicht mehr. machte ich auch, aber irgendwann wird es einfach zuviel mit dem ganzen str_replace().
Ich mache es einfach so:
PHP-Code:
private function display($file) { include(__TEMPLATE_FOLDER__.'pageheader.tpl'); include(__TEMPLATE_FOLDER__.$file); include(__TEMPLATE_FOLDER__.'pagefooter.tpl'); }
Zum Aufruf dann einfach;
PHP-Code:
$this->title = "Seitentitel"; $this->display('page.tpl');
In der tpl Datei dann einfach nur HTML Code und an entsprechenden Stellen dann:
PHP-Code:
<?php echo $this->content['myVar']; ?>
So kann ich recht frei arbeiten, kann auch Schleifen druchlaufe usw.
Größter Vorteil für mich: Ich habe im PHP Code absolut kein HTML Code mehr und muss dann für Designanpassungen nur noch im tpl arbeiten.
Das ich dann im tpl etwas einfachen PHP Code habe ist imho nicht so schlimm, wie die Alternative.
|
|
|
29.05.2008, 19:26
|
#5
|
|
TP-Supporter
Registriert seit: Nov 2005
|
Ja, ist OOP allerdings PHP4 ...
Wieso umgehe ich das damit? wenn $file jetzt auf eine Datei verweist in der steht:
PHP-Code:
<?php
$objekt = new klasse;
$objekt = display($_SERVER['SELF']);
?>
dann ist die Kacke am dampfen, der ruft da ja immer wieder display() auf.
Bzw in deinem Fall wird ja an diesem Punkt nochmal die Klasse included. Is ja auch egal, dann muss es halt heißen:
$file = datei.tpl:
PHP-Code:
<?php
$objekt = new klasse;
$objekt = display(datei.tpl);
?>
Verstehst du was ich meine?
Ja die Vorteile von nem Templatesystem liegen ja wirklich auf der Hand. Weiß auch nicht, warum ich das schon viel früher gemacht hab...
|
|
|
29.05.2008, 21:10
|
#6
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Nun versteh ich was Du meinst ... so hatte ich es nicht verstanden.
Ich meinte mit meinem Code damit auch nicht genau dieses zu umgehen, meinte was ganz anderes, da ich Dich falsch verstanden habe.
Aber Deine Idee hat was, so krumm muss man erstmal denken. 
Da fällt mir gerade aber auch nichts ein, dieses zu umgehen ... mhhh, mal nachdenken.
|
|
|
29.05.2008, 21:21
|
#7
|
|
TP-Supporter
Registriert seit: Nov 2005
|
 Von wegen krumm...
Man müsste den Konstruktor oder irgendeine notwendige Initialisierungfunktion dazu bringen den Dateinamen der Datei zu speichern, die das Objekt erstellt. Dann wär alles in Butter, nur wie? Klar, mit nem Parameter kein Problem, aber wie macht man das idiotensicher?
|
|
|
31.05.2008, 01:07
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
hm - klingt ja wie Hornberger Schiessen ..
warum nicht einfach eval nutzen?
|
|
|
31.05.2008, 10:07
|
#9
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Zitat:
Zitat von steffenk
hm - klingt ja wie Hornberger Schiessen ..
|
Pfff
Aber mir ist bis dato echt noch nicht sinniges eingefallen ... In wie weit eval hier nun helfen soll ist mir auch noch nicht so ganz klar ... erläuter doch mal ein wenig.
|
|
|
31.05.2008, 10:15
|
#10
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
moin,
die Ursprungsfrage war doch, wie man aus einem Template das ersetzt bekommt:
Code:
<p>Du befindest dich auf <?=$_SERVER['SELF']?> und denkst {var}</p>
und genau das macht eval:
PHP-Code:
echo eval("<p>Du befindest dich auf <?=$_SERVER['SELF']?> und denkst {var}</p>");
nichtsdestotrotz schreit eine Nutzung solcher Templates nach smarty
|
|
|
31.05.2008, 10:18
|
#11
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Ach sooooo ... Du setzt vorne an. 
Ich dachte Du bist nun bei dem letzteren Problem, wie man das erzeugen eines Objektes aus dem Template umgehen kann.
Thx, nun habe ich Deinen roten Faden gefunden. 
|
|
|
31.05.2008, 15:55
|
#12
|
|
TP-Supporter
Registriert seit: Nov 2005
|
@steffenk
Jo super, genau den Befehl hab ich gesucht.
Smarty ist auch ein guter Tipp, danke, nur für meine Zwecke vollkommen überdimensioniert.
@Mark
Ich glaube das wird man nicht hinkriegen. Sobald man eine Datei included, ist die Datei ja Bestandteil des eigentlichen Scripts und keine eigenständige Datei mehr. D.h. es geht ja auch der Name der Datei verloren, der nötig wäre für eine Überprüfung.
Geändert von Sand*mann (31.05.2008 um 16:18 Uhr).
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:46 Uhr.
|
 |