Home  PHP Projekte  PHP Schulung  Technik der Site  Büchertipps  Fotografie  Airbrush  Kontakt  Stuff 
|
Technik der Site
Meine Homepage basiert auf einer Abwandung des von Johann-Peter Hartmann
in unserer PHP Schulung unter
Extending PHPLib
vorgeschlagene "Page-Modell". IT[X]
und Menu 3 bilden die Basis des eingesetzten
Page-Modells.
Anforderungen
Diese Site stellt recht geringe Ansprüche an das Page-Modell. Gefordert ist eine
automatische Erstellung von Navigationselementen, eine Print-Version, die
Anzeige des letzten Änderungsdatums sowie der Einsatz von Templates,
um Anpassungen des Layouts so einfach wie möglich zu gestalten, obwohl und gerade
weil jede Seite ein einheitliches Layout aufweisen soll. Zur Verfügung
steht ein Apache Webserver mit PHP 4 Unterstützung. Die Entwicklung des Systems
darf nur wenige Stunden in Anspruch nehmen.
Programmplanung
Zur Umsetzung werden die Module IT[X]
und Menu 3 benutzt. Die Module liefern
wichtige Teile des Ganzen. Ein Controller - das Page Objekt - vereint die Ergebnisse
und versteckt die Komplexität der Aufgabe vor dem Anwender. Dieser soll gar
nicht bemerken, daß ein Page-Modell den Seitenaufbau kontrolliert, weshalb das
System automatisch im auto_prepend File gestartet wird.
Puzzlestücke
Alle Seiten der Präsentation haben ein einheitliches Aussehen, das vier Bereiche
aufweist.
- Kopfzeile mit dem Projektnamen und der You-are-here Navigationsleiste
- Fußzeile mit einem Link zur Printversion, dem Änderungsdatum und einem Copyright Vermerk
- Baumnavigation am linken Seitenrand
- Inhaltsspalte deren Headline dem Seitentitel entspricht
Mittels eines HTML Editors wird ein Template - eine Dokumentvorlage - für alle Seiten
erstellt. Alle auf dieser Site verwendeten Template können Sie unter
http://www.redsys.de/templates/ einsehen.
In den vier Contentbereichen
werden Platzhalter plaziert. Die meisten Templatesysteme, wie auch IT[X], verwenden
Platzhalter in der Form "". In geschweifte Klammern eingeschlossen
wird der Name eines Platzhalters eingefügt. Der Platzhalter wird später von Templatesystem
durch den zugewiesenen Inhalt ersetzt.
Die Anwendung von IT[X] ist bei einfachen Templates fast selbsterklärend. Das
Template wird geladen und mittels der Methode setVariable() werden
die Platzhalter in der Vorlage durch Inhalte ersetzt.
| Einfaches IT[X] Beispiel |
Top |
|
<?php // IT Templatesystem einbinden include "IT.php"; // Instanz der Templateklasse erzeugen, Pfad zu den Templates angeben $tpl = new IntegratedTemplate("templates/"); // Dokumentvorlage laden - lädt templates/page.html $tpl->loadTemplateFile("page.html"); // Ersetzungen vornehmen $tpl->setVariable("HEADLINE", "Technik der Site"); $tpl->setVariable("CONTENT", "Beschreibung zur Technik"); $tpl->setVariable("NAVIGATION_URHERE", "Home >> Technik der Site"); $tpl->setVariable("NAVIGATION_TREE", "Home<br />PHP Projekte<br />PHP Schulung..."); // ...
// Seite ausgeben $tpl->show(); ?>
|
Broken Links ade!
Wer jemals große Sites mit mehreren hundert Seiten ausschließlich mit einem
HTML Editor erstellt hat, der weiß welcher Aufwand notwendig ist, um
alle Navigationselemente anzupassen und sicherzustellen, daß kein Link ins Leere führt.
Menu 3 generiert dynamisch
die für jede Seite passenden Navigationselemente in drei Darstellungsformen: Baumnavigation, You-are-here
und eine Zeilendarstellung.
Die Navigationsstruktur wird von einem statischen, mehrdimensionalen Hash beschrieben. Alle
Menüpunkte werden von einem Hash beschrieben. Dieser enthält neben
dem Titel, die URL und optional unter dem Index "sub" Unterpunkte in Form
weiterer, tiefer geschachtelter Menüpunkte. Zu beachten ist, das die ID der Menüpunkte
("unique_id_1", 2, 21) und die URL Angaben eindeutig sein müssen.
| Menu 3 - Hash mit der Struktur eines Menüpunkts |
Top |
|
<?php // Menüeintrag ohne Unterpunkt $menupunkt1 = array( "unique_id_1" => array( "title" => "Beschriftung unique_id_1" , "url" => "url1.php" ) );
// Menüeintrag mit einem Unterpunkt $menupunkt2 = array( 2 => array( "title" => "Beschriftung 2" , "url" => "url2.php" , "sub" => array( 21 => array( "title" => "Unterpunkt 1" , "url" => "url2_unterp1.php" ) ) ) ); ?>
|
Die Anwendung der Menu Klasse ist trivial, weil nach der Instanziierung der Menüklasse nur noch
die Methode get() oder show() aufzurufen ist, um die Navigation auszugeben.
| Menu 3 - Anwendungsbeispiel |
Top |
|
<?php // Menu 3 einbinden include "menu.php";
// $menu = ...
// Menüklasse mit der Struktur initialisieren und Baumdarstellung wählen $m = new menu($menu, "tree"); // Navigationsleiste für diese Seite ($PHP_SELF) erstellen print $m->get(); ?>
|
Eine Ableitung der Menu 3 Klasse wird dazu benutzt, die Funktionen zur Erzeugung von HTML anzupassen,
und die Navigationsstruktur in einer Klassenvariable abzulegen.
Lötkurs
Zwei Module des Page-Modells wurden erstellt und warten darauf von einem Controller zum Leben
erweckt zu werden. Die Aufgabe des Controllers - der Page Klasse - ist es, das Template Objekt
mit Content und den verschiedenen Nagivationselementen aus der Menüklasse zu versorgen und
die Ergebnisse auszugeben. Die hierfür benötigte Funktionalität wird ein einer Klasse gekapselt.
Die Page Klasse entnimmt den Seitencontent aus auf dem Webserver abgelegten PHP Dateien.
Bei den Dateien handelt es sich nicht um PHP Skrite im eigentlichen Sinne, sie enthalten
keinen Programmcode, sondern benutzerdefiniertes Markup. Es soll lediglich sichergestellt werden,
daß vor der Ausgabe der Seite, das per auto_prepend eingebundene Page-Modell die Seite parst
und in ein HTML Dokument wandelt. Der Ablauf ist wie folgt:
- Anfrage an den Webserver
- Start des PHP Interpreters
- Einbindung und Start des Page-Modells über auto_prepend Anweisung
- Outputbuffering starten
- Template- und Menü-Modul laden und starten
- Markup des ausgeführen Skripts auslesen
- Template mit Content und Navigationselementen füllen
- Template ausgeben
- PHP Interpreter mit die() beenden, bevor das Markup im Skript angezeigt wird
Faules Ende
Es bleibt dem Leser überlassen das dargelegte selbst zu einem Ganzen zu verbinden.
Wer ungeduldig ist, wirft einen Blick auf die Skripte, welche diese Site generieren.
Der Source kann eingesehen werden: Programmcodes und Beispielseite.
Fast alle Verzeichnisse auf dem Webserver sind browseable.
Eine kommerzielle Nutzung des Materials ist untersagt. Privatanwender mögen ob der mangenden
Qualität schmunzeln oder den Code als Ausgangsbasis für eigene Versuche verwenden.
< ^ >
|