Background: Rendering
Language Alert: Unfortunately this page is still in german, please help by translating it.
Nachfolgend eine Beschreibung der einzelnen Schritte, die beim Aufruf einer Seite vollzogen werden:
Schritt 1: Cache- und Versionsprüfung
Zunächst wird geprüft, ob die anzuzeigende Seite noch aktuell im Cache vorliegt. Falls ja, wird bei Schritt 10f ortgefahren.
Evtl. anstehende automatische Versionswechsel werden bei dieser Prüfung ebenfalls berücksichtigt. (Die Cachezeit einer Seite kann niemals über den Startpunkt eines Versionswechsels hinausgehen.)
Schritt 2: Layoutprüfung
I.d.R. ist einer Phenotypeseite ein Layout zugeordnet, falls nicht geht es weiter bei Schritt 5.
Schritt 3: Rendern der Bausteine
Die einzelne Bausteine der pflegbaren Bereiche des Layouts werden nun nacheinander gerendert. Der (HTML-)Output wird in die entsprechenden Platzhalter ($pt_block1,
$pt_block2 …) des Smartytemplates übertragen. Zusätzlich wird der (HTML-)Output dem PhenotypePage-Objekt zugewiesen, damit in den Includes und/oder Seitenskripten darauf zugegriffen werden kann. Der Zugriff erfolgt über $myPage→blockHTML[1], $myPage→blockHTML[2] usw..
Schritt 4: Ausführen der Layout-Includes
Die einzelnen Includes des Layout werde nacheinander ausgeführt. Der (HTML-)Output wird in die entsprechenden Platzhalter ($pt_include1, $pt_include2 …) des Smartytemplates übertragen. Zusätzlich wird der (HTML-)Output dem PhenotypePage-Objekt zugewiesen, damit in späteren Includes und/oder Seitenskripten daraufzugegriffen werden kann. Der Zugriff erfolgt über $myPage→includeHTML[1], $myPage→includeHTML[2] usw..
Schritt 5: PreInclude
Jeder Seite kann ein PreInclude und eine PostInclude (Schritt 8) zugeordnet werden. Das PreInclude ist vor allem dazu gedacht Seitenskripte, die mehr als einmal benutzt werden sollen, in ein Include auszulagern. Über die Seitenvariablen können diese Includes dann leicht konfiguriert werden.
Achtung!
$mySmarty ist innerhalb eines Inludes immer die Instanz für den Zugriff auf die eingebetteten Templates des Includes. Die Smartyinstanz der Seite befindet sich hinter $myPage->mySmarty. Beispiel:
$myPage->mySmarty->assign("pt_block1","Ersetze Block 1");
Schritt 6: Seitenskript ausführen
Mit jeder Seite kann zusätzlich zum Layout ein beliebiges PHP-Skript ausgeführt werden. Dies ist z.B. sinnvoll für Zugriffskontrollen, Redirects oder Sonderseiten, die z.B. XML ausgeben sollen. Vor allem dient es aber dazu, typische Insellösungen unter Nutzung des Multicache und der Statistikfunktionen in das CMS zu integrieren.
Es stehen $myPage, $myDB, $myApp und $mySmarty zur Verfügung.
Tipp
Im Gegensatz zu Schritt 5 steht $mySmarty hier für die Smartyinstanz der Seite. Dies ist eine beliebte Fehlerquelle, falls man in Seitenskripten auf die Smartyinstanz zugreift und die Skripte später in ein Include überführt!
Schritt 7: HTML-Output erzeugen
Im siebten Schritt wird das Smartytemplate der Seite in der Screen- oder Druckansicht gerendert.
Schritt 8: PostInclude
Das Postinclude ist dafür gedacht, komplett fertige Seiten nachträglich zu ändern, z.B. um Linkmanipulationen durchzuführen. Der HTML-Code der Seite steht dem PostInclude in der Variable $this→html zur Verfügung. Wenn ein PostInclude keine Layoutänderungen durchführen soll, muss der Inhalt wieder ausgegeben werden, da ein Postinclude die nomale Ausgabe unterbricht und ansonsten eine leere Seite ausgegeben werden würde.
Schritt 9: Filecache
Im neunten Schritt wird der bisherige Output als Datei ins Filesystem geschrieben. Wurden im Layout oder in den Bausteinen Fragmente aus dem Seitencache genommen, wird der PHP-Code zum Aufruf dieser Includes mit in die Datei geschrieben, so dass diese erst bei der tatsächlichen Anzeige ausgeführt werden.
Achtung!
Includes, die aus dem Filecache gelöst werden, können nicht mehr auf das Layout der Seite zugreifen. Die notwendige Smartyinstanz steht nicht mehr zur Verfügung, alle Layoutoperationen wurden bereits durchgeführt und der Output im Filecache abgespeichert.
Schritt 10: Datei aus Filecache anzeigen und ausführen
Im 10. Schritt wird (endlich …) die Seite angezeigt, in dem sie als PHP-Datei ausgeführt wird. Dadurch, dass die Datei als PHP ausgeführt wird, kann auch das PHP-Sessionmanagement genutzt werden, personalisierte Anwendungen sind trotz Cache möglich.
Tipp für die Entwicklung von sicheren Anwendungen
Dass der Phenotypecache aus PHP-Dateien besteht, bietet viele Möglichkeiten, die mit einem statischen Cache nicht gegeben sind. Es eröffnet aber auch Möglichkeiten zum Mißbrauch, wenn Benutzereingaben ungeprüft wieder ausgegeben werden, denn wenn diese PHP-Code enthalten, würde dieser bei unkodierter Ausgabe ausgeführt. Daher sollten immer die richtigen Getter-Methoden der Systemobjekte genutzt werden, insbesondere bei $myRequest und $myCO.
Schritt 11: Statistik Im letzten Schritt wird der Seitenaufruf, egal ob mit oder ohne Cache, in der Datenbank festgehalten. Dabei wird auch die Buildzeit protokolliert, um Performanceengpässe frühzeitig erkennen zu helfen.
You think Phenotype Wiki/Documentation could be better?
We too. Please contribute: Edit this page
Recent Blog Posts
- Finally Multibyte - Phenotype 3.0
- Phenotype 2.9 explained
- Integration of PHPIDS (PHP-Intrusion Detection System)
- New Release: Phenotype 2.8 Ready for Download
- Restart: New Phenotype Website Live
- Phenotype worth: 2 Million $
- New Feature: Automatic Image Version Creation
- Additional smartURL variable: smartPATH