08 Gemeinsames Template
Aufgabenstellung
Erstelle eine Template-Klasse und eine View dazu, und verwende das Template dann für alle Übungen.
Lösungsschritte
Schritt 1
Erstelle eine neue View /app/Views/template.view.php mit einem HTML-Gerüst und Ausgabe der Variable $content:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Meine Seite</title>
<!-- <base ...>: Relative urls start at index.php's directory -->
<base href="<?= dirname($_SERVER['SCRIPT_NAME']); ?>/" />
<link rel="stylesheet" href="public/css/app.css">
</head>
<body>
<?= $content ?>
<script src="public/js/app.js"></script>
</body>
</html>Schritt 2
Erstelle eine neue Klasse View in /core/view.php und lade sie in /core/bootstrap.php. Erstelle darin eine Methode View::render($template, $view), welche folgendes tut:
Content der View rendern und nicht direkt ausgeben, sondern in eine Variablen
$contentzwischenspeichern. Ein Beispiel, wie das geht, findest du z.B. auf https://stackoverflow.com/questions/8510532/using-include-within-ob-start#answer-8510592Die Template-View laden und von ihr den Content innerhalb des Templates ausgeben lassen.
Vor beiden Schritten solltest du testen, ob es die angegebene Datei auch gibt (file_exists());
Schritt 3
Deine bestehenden Aufgaben entsprechend anpassen:
In den bisherigen Views kannst du alles rauslöschen, was nun in
template.view.phpvorhanden ist.Im Controller wird nun nicht mehr die View direkt eingefügt (
require ...), sondern eine neue View erzeugt und die Methoderender()aufgerufen:
Schritt 4
Füge in template.view.php VOR dem Content die Navigation aus Aufgabe 7 ein (horizontal).
Testing
Klicke alle Aufgaben mal durch und schau, ob alles noch richtig funktioniert.
Last updated
Was this helpful?