Pořadí provádění PHP: Hlavička, hlavní stránka a patička
Tento vývojářský tutoriál ti ukáže na základě základní šablony s bx_Header.html, index.html a bx_Footer.html, kdy se jednotlivé PHP skripty vykonají. Zjistíš, jak se obsah $LayoutHTML krok za krokem rozšiřuje a kde můžeš provádět změny závislé na stránkách nebo globální změny.
Předpoklady a cíl
Pro tuto vývojářskou příručku bys měl vědět, jak CMS bluetronix sestavuje stránku z jejího rozvržení, hlavičky, hlavní stránky a patičky. Ukážeme ti, v jakém pořadí se PHP skripty těchto oblastí vykonávají a které části $LayoutHTML byly již načteny.
V tomto příkladu se základní rozvržení skládá z CMS souborů bx_Header.html, index.html a bx_Footer.html. Hlavní stránka index.html představuje aktuálně zavolanou HTML stránku.
Základní rozvržení: Hlavička, hlavní stránka a patička
Základní rozvržení určuje, v jakém pořadí budou tři oblasti zapojeny. V ukázaném příkladu nalezneš definici rozvržení v tabulce 00_layout.
Relevantní úryvek rozvržení vypadá takto:
__DB_Layout_/bx_Header.html__
<main>
__DB_Layout_Main__
</main>
__DB_Layout_/bx_Footer.html__
První zástupný symbol vkládá bx_Header.html. Uvnitř prvku main je přes __DB_Layout_Main__ připojena aktuálně volaná stránka, v našem příkladu index.html. Následuje bx_Footer.html.
Ačkoli definice rozvržení zahrnuje všechny tři oblasti, bude HTML obsah pro PHP kód jednotlivých oblastí načten postupně do $LayoutHTML.
1. PHP kód hlavičky se vykoná jako první
Otevři v Správci souborů soubor bx_Header.html. Skrze PHP Kód můžeš upravit PHP kód této oblasti.
Hlavička je první načítaná oblast stránky. Během vykonávání jejího PHP kódu obsahuje $LayoutHTML proto pouze HTML z bx_Header.html.
PHP-Code: bx_Header.html
$LayoutHTML enthält:
bx_Header.html
Zde můžeš například nahradit zástupné symboly hlavičky nebo připravit navigaci. Přístup k vlastnímu HTML obsahu index.html nebo bx_Footer.html zde ještě není možný pomocí $LayoutHTML.
2. PHP kód hlavní stránky se vykoná poté
Po hlavičce CMS načte zavolanou hlavní stránku, zde index.html, a vykoná její PHP kód. V tuto chvíli $LayoutHTML obsahuje jak HTML kód hlavičky, tak HTML kód hlavní stránky.
PHP-Code: index.html
$LayoutHTML enthält:
bx_Header.html
index.html
Tím pádem může PHP kód hlavní stránky nejen nahradit vlastní zástupné symboly, ale také změnit již existující zástupné symboly v rámci hlavičky.
Příklad: Pokud tvoje hlavička obsahuje zástupný symbol __HeaderClass__, můžeš ho nahradit z hlavní stránky:
$LayoutHTML = str_replace("__HeaderClass__","active",$LayoutHTML);
Tak může určitá hlavní stránka například označit svůj menu položku jako aktivní v již načtené hlavičce.
Patička ještě nebyla načtena. Její HTML obsah proto nelze spolehlivě měnit prostřednictvím $LayoutHTML.
3. PHP kód patičky se vykonává jako poslední
Nakonec CMS načte bx_Footer.html a vykoná jeho PHP kód. Teď $LayoutHTML obsahuje HTML obsahy všech tří oblastí.
PHP-Code: bx_Footer.html
$LayoutHTML enthält:
bx_Header.html
index.html
bx_Footer.html
PHP kód patičky může proto nahradit zástupné symboly v rámci hlavičky, hlavní stránky nebo patičky, pokud jsou v tuto chvíli ještě přítomny.
Pokud již načtené HTML obsahuje například zástupný symbol __MyTitle__, můžeš ho tam nahradit:
$LayoutHTML = str_replace("__MyTitle__","My Custom Title",$LayoutHTML);
Patička se tak také hodí pro společné úpravy, které by se měly provést až po načtení celé struktury stránky.
Pořadí provádění na první pohled
Rozhodující pravidlo zní: PHP může měnit HTML oblasti pomocí $LayoutHTML pouze pro oblasti, které byly v tuto chvíli již načteny.
1. bx_Header.html
PHP sieht: Header
↓
2. index.html
PHP sieht: Header + Hauptseite
↓
3. bx_Footer.html
PHP sieht: Header + Hauptseite + Footer
Pokud chceš například ovládat zástupný symbol hlavičky z určité stránky, použiješ PHP kód této hlavní stránky. Pokud má být zástupný symbol v všech třech již načtených oblastech nahrazen, ideálně použij poslední vykonaný PHP kód patičky.
Důležité pro vlastní PHP funkce
Pokud v různých oblastech definuješ vlastní PHP funkce, dej pozor, aby se stejná funkce během jednoho volání stránky nedefinovala víckrát. Pro tento účel vybírej jedinečné názvy funkcí nebo ověř před definicí, zda funkce již existuje.
if(!function_exists("MyTemplateFunction")) {
function MyTemplateFunction() {
return true;
}
}
Shrnutí
V našem základním rozvržení se nejprve vykonává PHP kód z bx_Header.html, poté PHP kód z index.html a nakonec PHP kód z bx_Footer.html. S každým krokem se rozšiřuje HTML obsah, na který můžeš přistupovat pomocí $LayoutHTML.
Umístěte svůj PHP kód tam, kde jsou již nahrané požadované HTML části: v hlavičce pro úpravy specifické pro hlavičku, na hlavní stránce pro vlastní obsah a dříve nahranou hlavičku nebo v patičce pro úpravy již sestaveného rozvržení.
Často kladené otázky
co se nás zákazníci často ptají
V jakém pořadí se vykonávají PHP skripty?
Nejprve se vykoná PHP kód z bx_Header.html, poté PHP kód hlavní stránky, například index.html, a nakonec PHP kód z bx_Footer.html.
Jaké HTML části obsahuje $LayoutHTML během vykonávání Header-PHP kódu?
Během vykonávání Header-PHP kódu obsahuje $LayoutHTML pouze již nahraný HTML obsah z bx_Header.html.
Může hlavní stránka měnit HTML kód hlavičky?
Ano. Když se vykonává PHP kód hlavní stránky, hlavička a hlavní stránka jsou již obsaženy v $LayoutHTML. Tím můžeš například nahradit umístění, které bylo dříve vytvořeno v hlavičce.
Proč nemůže kód Header-PHP ještě měnit patičku?
Patička se načítá až po hlavní stránce. Její HTML obsah tedy během kódu Header-PHP ještě není v $LayoutHTML přítomen.
Jaké části může měnit kód Footer-PHP?
V době vykonávání Footer obsahuje $LayoutHTML již hlavičku, hlavní stránku a patičku. Dosud existující umístění v těchto částech mohou být tam nahrazena.
Kde vidím strukturu základního rozvržení?
Definice rozvržení se v příkladu zobrazuje v tabulce 00_layout. Zahrnuje bx_Header.html, aktuální hlavní stránku a bx_Footer.html.
Kde mohu upravit PHP kód z bx_Header.html?
Vyber bx_Header.html v Správci souborů a otevři PHP kód.
Na co musím myslet při vlastních PHP funkcích v hlavičce a hlavní stránce?
Vlastní funkce nesmí během jednoho volání stránky být definovány vícekrát se stejným názvem. Používej jedinečné názvy nebo před definicí zkontroluj pomocí function_exists(), zda funkce již existuje.