IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - PHP: OOP Template System



PHP: OOP Template System

Template Systeme werden benutzt, um Design von Code zu trennen. Dadurch wird ein großes Projekt übersichtlicher und leichter zu bearbeiten. In diesem Artikel wird ein einfaches Template System aufgebaut, dass Platzhalter in einem HTML Dokument durch die in der *.php Datei erzeugten Werte ersetzt.


Autor: ()
Datum: 25-10-2004, 17:00:40
Referenzen: keine
Schwierigkeit: Fortgeschrittene
Ansichten: 22964x
Rating: 7.33 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

Die komplette Template Klasse soll wieder in einer Datei enthalten sein. Unsere Ausgangssituation besteht also aus drei Dateien. Zum Einen die Klasse selbst (template.class.php), dann der PHP Teil der Website (news.php) und das Layout (layout.html). Die Klasse sollte folgende Features besitzen:
    Definierte Datei (layout.html) einlesen
  1. Platzhalter in der Datei durch PHP generierte Werte ersetzen
  2. Layout Datei mit PHP Werten ausgeben<&li>
Template Klasse

Wer noch nichts von OOP in PHP gehört haben sollte, empfele ich den Artikel OOP in PHP zu lesen, um Verständnisproblemen vorzubeugen.

Das Gute an Templates ist, dass es nur eine Ausgabe (echo) am Ende der PHP Datei gibt. Somit kann man im kompletten oberen Teil noch Befehle wie "header", die vor jeder Ausgabe verwendet werden müssen benutzen.
Es folgt die reichlich kommentierte Template Klasse.

Datei template.class.php:

<?php
// Klasse initialisieren
class template {

var
$tmp_file; // Pfad zur Template Datei
var $error; // Fehlermeldung
var $content; // Inhalt des Templates

// Konstruct
function template($file, $error = "Template Datei nicht gefunden!") {

// Variabeln auf Standardwerte setzen
$this->tmp_file = $file;
$this->error = $error;
$this->content = "";

}

// Template Datei öffnen
function readtemplate() {

$file = @fopen($this->tmp_file, "r");

if(!
$file) {

echo
$this->error;

}
else {

// Datei einlesen
while(!feof($file)) {

$temp = fgets($file, 4096);
$this->content .= $temp;

}

}

}

// Platzhalter ersetzen
function replace($title, $value) {

// Alle {TITLE} durch VALUE ersetzen
$this->content = str_replace("{" . $title . "}", $value, $this->content);

}

// Fertige Datei ausgeben
function parse() {

echo
$this->content;

}

}
?>


Datei news.php:

<?php
// Dynamische Variabeln
$autor = "Scorpion";
$date = "24. Oktober 2004";
$headline = "Template Klasse";

// Klasse hinzuladen
include("template.class.php");

// Objekt erzeugen ($error wird bereits im Konstrukt definiert und ist hier nur optional)
$template = new template("layout.html");
// Datei einlesen
$template->readtemplate();
// Platzhalter ersetzen
$template->replace("AUTOR", $autor);
$template->replace("DATE", $date);
$template->replace("HEADLINE", $headline);
// Seite ausgeben
$template->parse();
?>


Datei layout.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>{HEADLINE}</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<h2>{HEADLINE}</h2>vom {DATE}<br>
<br>
<br>
<em>by {AUTOR}</em>
</body>
</html>


Mit dem Aufruf der Datei news.php wird zuerst die Klasse hinzugeladen und danach das neu generierte Layout ausgegeben.

Vorteile von Templates:
  • Trennung von Design und Code
  • leichter zu bearbeiten
  • übersichtlicher
  • Verwendung von Headern jederzeit möglich
  • nur eine Ausgabe in der PHP Datei


reeky
Rookie
Beitrag vom:
22-02-2010, 11:06:37

Scriptergänzung

Hallo Programmierer,

ich hab das script an einer Stelle abgeändert, damit ihr auch Arrays für die ausgabe verwenden könnt.

Und zwar nur die Replacefunktion:

function replace($title, $value)
{
if (is_array($value)) {
$value = implode($value);
}

$this->content = str_replace(\"%\" . $title . \"%\", $value, $this->content);
}


Ich hoffe es hilft vielen!! :D

-----------------------------------------------------


Purzel
Rookie
Beitrag vom:
23-01-2007, 19:26:20

Gefunden!!

lange habe ich nach einer Anleitung gesucht und endlich auch eine vernünftige gefunden.

Danke Scorpion!

Gruß

Purzel

-----------------------------------------------------



Senior Member
Beitrag vom:
24-11-2005, 17:34:09

Also das mit der Ausgabe mehrerer News ist in diesem Template nicht vorgesehen...
Ich weiß zum Beispiel, dass die Template Klasse des phpBB Systems mit Kommentaren innerhalb der HTML Datei arbeitet, um diese dann von der PHP Datei als Anzeichen für eine Wiederholung (While) zu nutzen. So wird dann der innerhalb der Kommentare stehende Teil immer wieder bis zum Ende des Arrays mit neuen Werten bestückt und ausgegeben.

-----------------------------------------------------


VuuRWerK
Junior-Member
Beitrag vom:
23-11-2005, 23:14:05

Datenbank abfrage?

Da ich momentan mit dem gedanken spiele mich dem Templates anzunähern und zu erlernen habe ich mir mal erlaubt diese Version des Template Systems zu nutzen.

Soweit so gut. Jetzt habe ich die dynamischen Variablen mal durch eine DB-Abfrage ersetzt. OK die Abfrage funktioniert, nur besteht nun folgende frage. Wie sag ich am ende der .htm Datei das es nun mehrer News in der DB stehen, denn in die .htm dürfte ja normalerweiße kein php-code?

Ich habe mir mal eine Überlegung gemacht:


$abfrage = mysql_query("SELECT * FROM news ORDER BY ID DESC");
while($result = mysql_fetch_assoc($abfrage))
{

$autor = $result[autor];
$date = $result[date];
$headline = $result[header];

}

da wird logischerweiße nur die 1. news ausgegeben.

Ich vermute einfach mal das dort die while falsch ist bzw. irgentwas noch in der layout.htm gemacht werden muss?

Danke schonmal im Vorraus!

Gut Schuß
VuuRWerK

-----------------------------------------------------
- Seit 06.07.07 20:07 stolzer Pappa meiner Tochter Lena! - braincompiler.de - groowe.org


dreamer
Expert
Beitrag vom:
26-10-2004, 00:05:22

An sich ein interessanter Artikel, jedoch wäre es wünschenswert etwas genauer ein zu gehen auf wie man Templates in der Praxis benutzt.

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04506
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06241
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1140
Comments: 0