Websiteentwicklung: PHP: Praktische Einführung: Templating
Warum Templating?
[Bearbeiten]In den Anfängen war PHP zwar bereits sehr mächtig, aber noch lange keine komplexe Programmiersprache. Mit der Zeit wurden die Befehle und die Syntax komplexer, die Programmteile länger und die mit PHP gefüllten HTML-Tags schwerer zu verstehen. Ohne die Bedeutung der Befehle zu kennen, wirst du auf einen Blick sehen, dass
<html>
<?php mysql_connect('localhost', 'Foo', 'geheim'); ?>
<head>
<?php mysql_select_db('website'); ?>
<title><?php $result = mysql_query('SELECT title FROM pages WHERE page_id = ' . (int)$_GET['page_id']);
$row = mysql_fetch_row($result);
echo $row[0];
?></title>
</head>
<body>
<ul>
<?php $result = mysql_query('SELECT username FROM users');
while ($row = mysql_fetch_row($result)) {
echo '<li>';
echo htmlspecialchars($row[0]);
echo '</li>';
}
?>
</ul>
</body>
</html>
um einiges unübersichtlicher ist als
<html>
<head>
<title><?php echo $page['title']; ?></title>
</head>
<body>
<ul>
<?php foreach($usernames as $username): ?>
<li><?php echo htmlspecialchars($username); ?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
Das letzte Codebeispiel zeigt ein Template.
Templates (engl. für "Vorlagen") sind keine Eigenheit von PHP, sondern ein Programmiergrundsatz. Sie finden nicht nur, aber besonders in der Webprogrammierung Anwendung. Mit Hilfe von Templates kannst du Geschäftslogik von Darstellungslogik trennen.
Beispiele für Geschäftslogik:
- Verbindung zu einer Datenbank und Abruf von Daten
- Speichern von Dateien
- Berechnungen
- Verarbeitung von Formularen
Beispiele für Darstellungslogik:
- Tabellenzeilen abwechselnd farbig gestalten
- Formular anzeigen
- Variablen ausgeben
Der Befehl "include"
[Bearbeiten]Um in PHP anderen PHP-Code einzubinden, kannst du den include-Befehl verwenden:
<?php
include('my_important_functions.php');
?>
Obwohl es bei einem include egal ist, welche Endung die Datei hat (sie wird immer interpretiert), solltest du sie mit der Endung ".php" abspeichern. Ansonsten könnte jeder, bei sonst fehlender Absicherung, den Quelltext deiner eingebundenen Dateien lesen.
Sobald PHP eine include-Anweisung ausführt, sucht er nach dieser Datei, führt den darin enthaltenen Code aus und kehrt dann wieder in das Ursprungsscript zurück. Du kannst einen relativen oder einen absoluten Pfad angeben. Bei einem relativen Pfad sucht PHP zunächst relativ zum Skript, das die Include-Anweisung enthält, aufruft, anschließend relativ zum äußeren Skript usw., zum Schluss im include_path, der in der php.ini festgelegt werden kann.
Es gibt noch drei weitere Anweisungen zum Einbinden von Dateien. Diese findest du im Referenzkapitel Quellcode wiederverwenden.
Anwendung
[Bearbeiten]Um das Beispiel für Templating vorzubereiten, werden folgende Dateien benötigt:
- eine "index.php", in der sich die Geschäftslogik befindet
- die beiden Templates "header.tpl.php" und "footer.tpl.php", die wir der Übersichtlichkeit halber in einen Unterordner "templates" packen
- ein drittes Template "day.tpl.php", ebenfalls im Ordner "templates"
Die Endung auf "tpl.php" ist willkürlich gewählt. Genauso gut können die Dateien auch auf "template" oder "birne" enden.
In der index.php befindet sich folgender Code:
<?php
$title = 'Wochentage';
setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
$day_today = strftime('%A');
$day_in_1_year = strftime('%A', strtotime('+1 year'));
include('templates/header.tpl.php');
include('templates/day.tpl.php');
include('templates/footer.tpl.php');
?>
In der header.tpl.php:
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
In der footer.tpl.php:
</body>
</html>
Und schließlich in der day.tpl.php:
<p>Heute ist <?php echo $day_today; ?>.</p>
<p>In einem Jahr ist <?php echo $day_in_1_year; ?>.</p>