PHP-Ausführungsreihenfolge: Header, Hauptseite und Footer
Dieses Entwickler-Tutorial zeigt dir anhand eines Grundlayouts mit bx_Header.html, index.html und bx_Footer.html, wann die einzelnen PHP-Skripte ausgeführt werden. Du erfährst, wie sich der Inhalt von $LayoutHTML Schritt für Schritt erweitert und wo du seitenabhängige oder globale Änderungen vornehmen kannst.
Voraussetzungen und Ziel
Für dieses Entwickler-Tutorial solltest du wissen, wie das bluetronix CMS eine Seite aus ihrem Layout, dem Header, der Hauptseite und dem Footer zusammensetzt. Wir zeigen dir, in welcher Reihenfolge die PHP-Skripte dieser Bereiche ausgeführt werden und welche Teile von $LayoutHTML dabei bereits geladen sind.
Im Beispiel besteht das Grundlayout aus den CMS-Dateien bx_Header.html, index.html und bx_Footer.html. Die Hauptseite index.html steht stellvertretend für die jeweils aufgerufene HTML-Seite.
Grundlayout: Header, Hauptseite und Footer
Das Grundlayout bestimmt, in welcher Reihenfolge die drei Bereiche eingebunden werden. Im gezeigten Beispiel findest du die Layout-Definition in der Tabelle 00_layout.
Der relevante Ausschnitt des Layouts sieht so aus:
__DB_Layout_/bx_Header.html__
<main>
__DB_Layout_Main__
</main>
__DB_Layout_/bx_Footer.html__
Der erste Platzhalter bindet bx_Header.html ein. Innerhalb des main-Elements wird über __DB_Layout_Main__ die aktuell aufgerufene Seite eingebunden, in unserem Beispiel index.html. Anschließend folgt bx_Footer.html.
Obwohl die Layout-Definition alle drei Bereiche enthält, wird der jeweilige HTML-Inhalt für den PHP-Code der einzelnen Bereiche erst nach und nach in $LayoutHTML geladen.
1. PHP-Code des Headers wird zuerst ausgeführt
Öffne im Datei-Manager die Datei bx_Header.html. Über PHP Code kannst du den PHP-Code dieses Bereichs bearbeiten.
Der Header ist der erste geladene Seitenbereich. Während sein PHP-Code ausgeführt wird, enthält $LayoutHTML deshalb nur das HTML aus bx_Header.html.
PHP-Code: bx_Header.html
$LayoutHTML enthält:
bx_Header.html
Du kannst hier beispielsweise Platzhalter des Headers ersetzen oder die Navigation vorbereiten. Auf den eigentlichen HTML-Inhalt von index.html oder bx_Footer.html kannst du an dieser Stelle noch nicht über $LayoutHTML zugreifen.
2. PHP-Code der Hauptseite wird danach ausgeführt
Nach dem Header lädt das CMS die aufgerufene Hauptseite, hier index.html, und führt deren PHP-Code aus. Zu diesem Zeitpunkt enthält $LayoutHTML sowohl den HTML-Code des Headers als auch den HTML-Code der Hauptseite.
PHP-Code: index.html
$LayoutHTML enthält:
bx_Header.html
index.html
Damit kann der PHP-Code der Hauptseite nicht nur eigene Platzhalter ersetzen, sondern auch bereits vorhandene Platzhalter innerhalb des Headers verändern.
Ein Beispiel: Wenn dein Header den Platzhalter __HeaderClass__ enthält, kannst du ihn von der Hauptseite aus ersetzen:
$LayoutHTML = str_replace("__HeaderClass__","active",$LayoutHTML);
So kann eine bestimmte Hauptseite beispielsweise ihren Menüpunkt innerhalb des bereits geladenen Headers als aktiv markieren.
Der Footer wurde zu diesem Zeitpunkt noch nicht geladen. Sein HTML-Inhalt lässt sich daher noch nicht zuverlässig über $LayoutHTML verändern.
3. PHP-Code des Footers wird zuletzt ausgeführt
Als Letztes lädt das CMS bx_Footer.html und führt dessen PHP-Code aus. Jetzt enthält $LayoutHTML die HTML-Inhalte aller drei Bereiche.
PHP-Code: bx_Footer.html
$LayoutHTML enthält:
bx_Header.html
index.html
bx_Footer.html
Der Footer-PHP-Code kann deshalb Platzhalter innerhalb des Headers, der Hauptseite oder des Footers ersetzen, sofern sie zu diesem Zeitpunkt noch vorhanden sind.
Enthält das bereits geladene HTML beispielsweise den Platzhalter __MyTitle__, kannst du ihn dort ersetzen:
$LayoutHTML = str_replace("__MyTitle__","My Custom Title",$LayoutHTML);
Der Footer eignet sich dadurch auch für gemeinsame Anpassungen, die erst nach dem Laden der gesamten Seitenstruktur durchgeführt werden sollen.
Die Ausführungsreihenfolge auf einen Blick
Die entscheidende Regel lautet: PHP kann über $LayoutHTML nur die HTML-Bereiche verändern, die zu diesem Zeitpunkt bereits geladen wurden.
1. bx_Header.html
PHP sieht: Header
↓
2. index.html
PHP sieht: Header + Hauptseite
↓
3. bx_Footer.html
PHP sieht: Header + Hauptseite + Footer
Wenn du beispielsweise einen Header-Platzhalter von einer bestimmten Seite aus steuern möchtest, verwendest du den PHP-Code dieser Hauptseite. Soll ein Platzhalter in allen drei bereits geladenen Bereichen ersetzt werden, bietet sich der zuletzt ausgeführte PHP-Code des Footers an.
Wichtig bei eigenen PHP-Funktionen
Wenn du in den unterschiedlichen Bereichen eigene PHP-Funktionen definierst, achte darauf, dass dieselbe Funktion während eines Seitenaufrufs nicht mehrfach definiert wird. Wähle dafür eindeutige Funktionsnamen oder prüfe vor der Definition, ob die Funktion bereits existiert.
if(!function_exists("MyTemplateFunction")) {
function MyTemplateFunction() {
return true;
}
}
Zusammenfassung
In unserem Grundlayout läuft zuerst der PHP-Code von bx_Header.html, danach der PHP-Code von index.html und zuletzt der PHP-Code von bx_Footer.html. Mit jedem Schritt erweitert sich der HTML-Inhalt, auf den du über $LayoutHTML zugreifen kannst.
Platziere deinen PHP-Code deshalb dort, wo die benötigten HTML-Bereiche bereits geladen sind: im Header für Header-spezifische Anpassungen, in der Hauptseite für eigene Inhalte und den zuvor geladenen Header oder im Footer für Änderungen am bereits zusammengesetzten Layout.
FAQ
was Kunden uns häufig Fragen
In welcher Reihenfolge werden die PHP-Skripte ausgeführt?
Zuerst wird der PHP-Code von bx_Header.html ausgeführt, anschließend der PHP-Code der Hauptseite, beispielsweise index.html, und zuletzt der PHP-Code von bx_Footer.html.
Welche HTML-Bereiche enthält $LayoutHTML während des Header-PHP-Codes?
Während der Ausführung des Header-PHP-Codes enthält $LayoutHTML nur den bereits geladenen HTML-Inhalt von bx_Header.html.
Kann die Hauptseite den HTML-Code des Headers verändern?
Ja. Wenn der PHP-Code der Hauptseite ausgeführt wird, sind Header und Hauptseite bereits in $LayoutHTML enthalten. Damit kannst du beispielsweise einen zuvor im Header angelegten Platzhalter ersetzen.
Warum kann der Header-PHP-Code den Footer noch nicht verändern?
Der Footer wird erst nach der Hauptseite geladen. Sein HTML-Inhalt ist während des Header-PHP-Codes daher noch nicht in $LayoutHTML vorhanden.
Welche Bereiche kann der Footer-PHP-Code verändern?
Zum Zeitpunkt der Footer-Ausführung enthält $LayoutHTML bereits den Header, die Hauptseite und den Footer. Noch vorhandene Platzhalter in diesen Bereichen können dort ersetzt werden.
Wo sehe ich den Aufbau des Grundlayouts?
Die Layout-Definition wird im Beispiel in der Tabelle 00_layout angezeigt. Sie bindet bx_Header.html, die aktuelle Hauptseite und bx_Footer.html ein.
Wo kann ich den PHP-Code von bx_Header.html bearbeiten?
Wähle bx_Header.html im Datei-Manager aus und öffne PHP Code.
Was muss ich bei eigenen PHP-Funktionen in Header und Hauptseite beachten?
Eigene Funktionen dürfen während eines Seitenaufrufs nicht mehrfach mit demselben Namen definiert werden. Verwende eindeutige Namen oder prüfe vor der Definition mit function_exists(), ob die Funktion bereits vorhanden ist.