V tomto úkolu upravíme strukturu našeho projektu, bude to trochu náročnější, ale později nám to umožní snadno přidávat další stránky a lépe pracovat s daty pro každou stránku.
1. Ve složce s projektem si vytvoř složku sablony a do ní přidej soubor domu.php.
2. Do právě vytvořeného soboru domu.php nakopírujeme kód, který patří k domovské stránce ze souboru index.php, tzn. od části s komentářem (včetně) <!-- Page Header--> až po poslední uzavírací značku </div>
3. Do již existující složky layout přidej soubor layout.php
4. Do tohoto souboru layout.php nakopíruj ze souboru index.php vše od (včetně) <!DOCTYPE html> až po </html>
5. V souboru layout.php nyní musíme upravit cesty k připojovaným souborům. Jelikož všechny soubory, co zde připojujeme, leží také ve složce layout, tak bude stačit všude odmazat /layout takže nám vznikne například require __DIR__ . '/navigation.php';
6. Aby jsem ověřili, že zatím vše funguje a nic není rozbité, tak na zkoušku do souboru layout.php, doprostřed mezí připojování navigation.php a footer.php ještě připojíme soubor sablony/domu.php, jelikož složka sablony leží výše, než se nachází soubor layout.php, tak musíme jít pomocí .. o složku výše. Připojení tedy bude vypadat takto: require __DIR__ . '/../sablony/domu.php';
7. Nyní nám stačí na konec souboru index.php připojit soubor /layout/layout.php a můžeme zkusit stránku načíst v prohlížeči a mělo by vše fungovat jako na začátku.
8. Pokud vše funguje, je to dobrá zpráva, to nejtěžší už máme za sebou. Nyní si do souboru funkce.php nakopíruj následující funkci:
function nactiController(): string
{
$stranka = $_GET['stranka'] ?? 'domu';
if (is_file(__DIR__ . '/controller/' . $stranka . '.php')) {
return __DIR__ . '/controller/' . $stranka . '.php';
} else {
return __DIR__ . '/controller/404.php';
}
}
9. Tato funkce nám slouží k tomu, aby na základě $_GET parametru stranka načetla správný controller. Bude fungovat tak, že pokud není zadaný parametr stránka, tak se automaticky načte domovská stránka, pokud je stránka zadaná a existuje, tak se stránka zobrazí a pokud stránka neexistuje, tak se zobrazí chybová stránka s chybou 404, která udává, že stránka neexistuje. Controller nám bude sloužit k tomu, aby získal data pro aktuální stránku a načet správnou šablonu. Zatím žádný controller nemáme, ale hned v dalším bodu si jeden vytvoříme.
10. Ve složce s projektem vytvoř složku controller a v ní soubor domu.php v tomto souboru zatím vytvoř jen proměnnou $sablona s textovou hodnotou: 'domu'
11. V souboru index.php nyní použijeme funkci nactiController, pro načtení správného controlleru a jeho připojení do stránky. Soubor s controllerem musíme připojit až za připojením souboru funkce.php, ale ještě před připojením souboru layout.php, takže někam mezi můžeme přidat tento kód: require nactiController();
12. Nyní v souboru layout/layout.php upravíme připojování správné šablony. Tzn. tam kde nyní máme: '/../sablony/domu.php' tak pouze část domu nahradíme za proměnnou $sablona, kterou jsme předtím nastavili v controlleru. Výsledek by měl vypadat takto: require __DIR__ . '/../sablony/' . $sablona . '.php';. Nyní by měl web opět správně fungovat, ověř si to přenačtením stránky v prohlížeči.
13. Nyní už nám stačí jen doladit pád detailů. Začneme tím, že si ve složce controller vytvoří soubor, který se bude načítat pro neexistující stránky. Pojemenuj jej 404.php a vlož do něj opět proměnnou $sablona = '404'.
14. Ve složce sablony vytvoř soubor 404.php a vlož do něj následující kód:
<!-- Page Header-->
<header class="masthead" style="background-image: url('assets/img/home-bg.jpg')">
<div class="container position-relative px-4 px-lg-5">
<div class="row gx-4 gx-lg-5 justify-content-center">
<div class="col-md-10 col-lg-8 col-xl-7">
<div class="site-heading">
<h1>404</h1>
<span class="subheading">Stránka nebyla nalezena</span>
</div>
</div>
</div>
</div>
</header>
15. Nyní můžeš zkusit otevřít například http://localhost/projekt/index.php?stranka=test a měla by se ti správně zobrazit chybová stránka.
16. Nakonec už jen upravíme odkazy v souborech v hlavičce. Tzn. v souboru layout/navigation.php upravíme href na řádrku: <a class="navbar-brand" href="index.html"><?php echo preloz('pageName'); ?></a> z: index.html na: ?stranka=domu a v souboru config.php kde máme položky menu, tak zde jejich hodnoty pod klíčem href opravíme z: #domu, #blog a #contact na: ?stranka=domu, ?stranka=blog a ?stranka=kontakt. Stránky pro blog a kontakt sice zatím nemáme, ale brzy si je vytvoříme.
17. To je z tohoto úkolu vše, nazapomeň si zkontrolovat, že tvůj web správně funguje.