PHP/Tutorials/Templates/Datenausgabe
- 30min
- einfach
- Grundkenntnisse in
● HTML
● PHP
Auf der vorherigen Seite wurden wiederkehrende HTML-Strukturen in Templates ausgelagert, die aber immer wieder PHP-Variablen enthalten.
Optimal wäre ein reines HTML-Template, das mit CSS im Browser direkt getestet werden kann, ohne dass man dazu PHP und sein Befüllen mit Inhalt benötigt. Und wenn PHP dann anhand des URI die passenden Inhalte ins Dokument wirft, dann hat man seine separation of concerns.
Mehrsprachige Webseite
Ein gutes Beispiel für einen Einsatz von variablen Textinhalten bietet eine mehrsprachige Webseite. Ob die Internationalisierung durch die Abfrage der eingestellten Sprache des Browsers (Sprachauswahl mittels Accept Language) oder durch ein Menü erfolgt, ist hier zweitrangig.
{
"all-rights-reserved": {
"de": "Alle Rechte vorbehalten.",
"en": "All rights reserved."
},
"sub-pages": {
"de": "Unterseiten",
"en": "sub-pages"
},
"welcome-heading": {
"de": "Willkommen!",
"en": "Welcome!"
},
"welcome-message": {
"de": "Herzlich willkommen auf unserer Seite!",
"en": "Welcome on our website!"
}
}
Alle Textinhalte wie Begrüßungen und Warnhinweise sind in einer JSON-Datei gespeichert.
<!DOCTYPE html>
<html lang="{$lang}">
<head>
<meta charset="utf-8">
<title>{$title} - Firmenname</title>
<link rel="stylesheet" href="screen.css" media="screen">
<link rel="stylesheet" href="print.css" media="print">
</head>
<body>
<nav>
<h2>{#sub-pages}</h2>
</nav>
<header>
<h1>{#welcome-heading}</h1>
<p>{#welcome-message}</p>
</header>
<main>
...
</main>
<footer>{#all-rights-reserved}</footer>
</body>
</html>
Die Templates erhalten nun Platzhalter, die aber kein PHP darstellen. Mit PHP kann man nun nach dem Muster {#irgendwas}
und {$irgendwas}
suchen, um {#irgendwas}
mit den passenden Textbausteinen zu befüllen und
{$irgendwas}
mit den passenden Inhalten.
Die PHP DOMDocument-Klassensammlung für das Document Object Model (DOM) stellt einen vollständigen Parser für HTML- und XML-Elemente zur Verfügung.
Information: Masterminds
Zusätzlich gibt es aber mit Masterminds einen HTML5-Parser (PHP-Klasse???), der eine Erweiterung von PHPs DOM-Klasse darstellt und HTML5-konformen Code liest und schreibt:
https://github.com/Masterminds/html5-php
Das bedeutet, dass Sie Objekte dieser Klasse wie native PHP-DOM-Objekte benutzen können, da sie prinzipiell das sind. Nur wenn ich HTML-Code einlese, parst mir diese Klasse eben echtes HTML5 (PHP-DOM arbeitet mit libxml2, welches das nicht in allen Fällen korrekt versteht) und serialisiert mir beim Schreiben wieder echtes HTML5 (z. B. mit leeren "disabled"-Attributen anstelle von disabled="disabled").ToDo (weitere ToDos)
Kapitel muss erstellt werden
Jetzt käme der eher aufwändige Part: Die PHP-Funktionalitäten, die steuern, wie man HTML zu einem DOM-Objekt einliest (mit dem HTML5-Parser, oder lieber noch nicht?), die Textbausteine einsetzt und die Inhalte einpflegt. Das kommt dann aber schon fast einem Framework gleich. Das dauert länger und würde auch diesen Artikel sprengen.