dedlfix: Einträge mit PHP Factory Pattern

Beitrag lesen

Tach!

<table>
  <tbody>
    <tr><td>Hallo <?php echo $name ?>!</td></tr>
  </tbody>
</table>
  • ich habe ihn mit file_get_contents() geladen. Klappt gut da wo ich ihn haben will nur der Parameter $name will die Funktion nicht um wandeln. Wahrscheinlich weils eben n kompletter geladener string ist inklusive PHP.

file_get_contents() liefert Inhalt, ohne ihn zu interpretieren. Deshalb landet sogar das ganze Konstrukt <?php echo $name ?>in der Ausgabe.

  • ich hab ihn mit include() probiert. klappt super nur eben an einer falschen stelle.

Ja, das interpretiert Code, aber an Ort und Stelle des Aufrufs. Output Buffering wäre eine Möglichkeit, den erzeugten Text aufzufangen. Aber lies lieber weiter.

Ich möchte daten aus einem Array in html tabelle einbetten. Ich kann die ganze html tabelle runtime in php erzeugen und escapen. Ich will aber html und php so gut es geht trinnen.

Es ist nicht besonders sinnvoll, ohne ausreichende Begründung (spezielles Tooling zum Beispiel) HTML und PHP strikt getrennt zu halten. Man benötigt auch beim Erzeugen der Ausgabe eine Form von Logik (Schleifen, Bedingungen, Maskierungen). Wenn du PHP und HTML nicht mischen möchtest, musst du einen Ersatz für PHP nehmen und dann hast du Ersatz und HTML gemischt. Das führt nur vom Regen in die Traufe. Für dieses Problem gibt es keine Lösung, bei der alle Teile 100% voneinander getrennt und nicht "verunreinigt" werden. Ein erwägbares Argument kann aber sein, dass es sich mit $ersatz einfacher arbeiten lässt als mit PHP. Nun, wenn du das für den Fall so entscheidest, dann sei es so.

<?php
echo "<table>
  <tbody>
    <tr><td>Hallo $name !</td></tr>
  </tbody>
</table>";
?>

wie machen das die ganz großen seiten? Wie macht ihr das?

Man kann ja nur irgendein Template-System nehmen, sei es ein selbstgestricktes oder ein vorhandenes externes oder PHP selbst. So wie dein erster Ansatz ist es nicht verkehrt. Nur an der richtigen Stelle muss es passieren. Du kennst doch das MVC-Pattern. Ob du ein solches Framework einsetzt oder nicht, ist egal, aber das Prinzip kannst du ja in ähnlicher Weise verwenden. Alternativ geht auch das ganz simple EAV-Prinzip (Eingabe - Verarbeitung - Ausgabe). Der Controller (oder V-Teil) sammelt alle Daten ein und übergibt sie am Ende der View (oder dem A-Teil). Dort werden sie dann mit den statischen Teilen zusammengefügt. Dabei darf PHP gern helfen. Ob die View nun das Template als String bekommt oder den Namen der Template-Datei und es sich selbst lädt, ist dabei Gemschmackssache.

Damit hast du eine ordentliche Trennung - nach Zuständigkeiten, nicht nach dem Werkzeug.

dedlfix.