Mailinglisten-Archive |
Hi Sven,
Am Dienstag, 25. Juli 2006 08:52 schrieb Sven Geßner:
> wahrscheinlich gibt es hierfür eine einfache Antwort, aber ich bin
> halt noch Anfänger....
das folgende Problem ist in dem Sinne keine Anfängerfrage. :-) Es ist
eher eine Frage des Anwendungsdesigns. Deswegen gibt es auch eine Menge
unterschiedlicher, teils gegensätzlicher Lösungansätze. Welcher davon
sinnvoll ist, hängt eigentlich dann von den individuellen Umständen ab.
Ohne Deine gesamte Anwendung zu kennen, kann Dir also niemand den
ultimativen Rat geben. :-)
> Problem:
>
> Ich habe eine Seite mit fertigem Desing das soweit statisch ist.
> Nur der Inhalt eines Div-Containers ändert sich und soll dynamisch
> eingelesen, Code ausgeführt in einer Variablen gespreichert werden
> und dann ausgegeben.
>
>
> <?php
> Datei irgendwie einlesen, Code ausführen und in
> Variable $content speichern.
> ?>
>
>
> <html-code>
>
> <?php echo($content); ?> // den Fertigen HTML-CODE ausgeben...
>
> <html-code>
>
>
> Zur Zeit mache ich das mit include(), den ich dann direkt an der
> entsprechenden Stelle ausführe statt "echo($content)".
>
> Ich denke das ist als Lösung aber nicht wirklich sauber.
In der prozeduralen Programmierung einer bestehenden Anwendung würde ich
das nicht als unbedingt unsauber bezeichnen. Es ist wahrscheinlich die
performanteste Lösung. Es kommt also auch immer darauf an, wie Du die
Prioritäten setzt.
> Wie kann ich das nochmachen.. Vielleicht mit "fopen" usw.
> aber wie kann ich dann den Code ausführen??
Die Codeausführung ließe sich mit eval() erreichen.
Die Lösung ist aber isgesamt wenig elegant. Wenn Du schon
Dateisystem-Funktionen verwenden wolltest, dann kämen anstatt fopen()
aus meiner Sicht eher file() oder besser, wenn Du PHP > 4.3 hast,
file_get_contents() in Betracht (+ eval()):
// Datei holen
$sDateiInhalt = file_get_contents('include.inc');
// Inhalt ausführen und ausgeben
eval($sDateiInhalt);
Ein anderer Ansatz wäre, mit der Ausgabe-Kontrolle zu arbeiten:
// Datei einbinden und Inhalt ausführen
ob_start();
include('include.inc');
$sErgebnis = ob_get_contents();
ob_end();
// Ergebnis ausgeben
echo($sErgebnis);
> Oder bin ich auf dem falschen Weg und muss das genau umgekehrt
> machen, das ich die Vorlage in die PHP-datei einlese die ich ausgeben
> will.
Nein, Du bist eigentlich auf dem richtigen Weg. Es gibt folgende Stufen
in der Entwicklung eines Programmierers:
1. Wilde Mischung von PHP und HTML, also Progammcode und Ausgabe in
einer Datei.
2. Trennung von Programmcode und Ausgabe innerhalb der Datei.
Programmcode oben, Ausgabe unten. Bei der Ausgabe werden weitgehend nur
noch Variablen und If-Abfragen oder Schleifen werden eingesetzt. Das
ist so etwa die Stufe, auf die Du jetzt zu steuerst.
3. Trennung von Programm und Ausgabe auch auf Dateiebene, d.h. die
Verwendung von Templates. Eine fertige Lösung hierfür wäre das
Templatesystem Smarty.
Letzteres ist natürlich der optimale Ansatz, den man auch bei neu
aufzubauenden Anwendungen wählen sollte. Bei bestehenden Anwendungen
ist das aber nicht immer so einfach... :-)
> Ich möchte keine fertige Lösung nutzen.
Schade. Eigentlich solltest Du Dir einfach mal Smarty ansehen. Sehr
einfach zu installieren. Sehr einfach zu benutzen, gleichzeitig aber
sehr mächtig, d.h. Du kannst klein anfangen und immer mehr wachsen. :-)
Viele Grüße
Lutz
php::bar PHP Wiki - Listenarchive