Router v PHP (5.díl/2.série)

Před čtením tohoto návodu Vám doporučuji si přečíst i návody předchozí. Předpokládám totiž, že již máte potřebné znalosti, které jste se naučili již dříve.

Už chápeme logiku podmínek, známe i operátory. Dnes si vytvoříme náš vlastní routovací systém.

Routování slouží k rozdělení webových stránek a vytvoření URL adres za pomoci parametrů (které ale následně můžeme skrýt – například pomocí souboru .htaccess). Takže díky routování získáme například tuto url:

www.mujskript.cz/ahoj.php?parametr=obsah

 

Kapitoly:

  • Struktura adresáře
  • A jdeme na věc!
  • Co se stane když?
  • Podmínky a výpis textu
  • Podmínky a zobrazení souboru

 

Napišme si takový malý demonstrační scénář toho, jak to všechno bude vlastně probíhat. To je důležité, abychom vlastně věděli, co budeme psát a taky jak to budeme psát.

Backend (zadní strana skriptu – jak ji vidí programátor):

  • Napíšu nějaký routovací skript – například index.php
  • Do něj dám různé podmínky, pokud URL vypadá takhle, tak udělej tohle, jinak tamto
  • Celé to zautomatizuji
  • Uživatel dostane to, co chce

Frontend (přední strana – tak jak to vidí návštěvník)

  • Kliknu na nějaký odkaz 
  • Po kliknutí dostanu obsah, který jsem chtěl
  • Když stránka neexistuje dostanu Error

Jasně, ten uživatelský frontend jsem trochu přehnal, ale je to tak. Uživatel většinou adresy nezkoumá (pokud je to laik), ale programátorovi to třeba pomůže v orientaci.

 

Struktura adresáře

Doporučuji nazývat adresáře stejně, jako já. Vytvoříme si nějaký hlavní (root) adresář, ve kterém bude náš web s routovacím skriptem. Nazveme ho třeba web. Do něj vložíme jediný soubor a to index.php. Pak si vytvoříme ještě adresáře obsahcasti. Nepovinné adresáře pro obrázky, CSS styly a JavaScripty jsem vynechal. Struktura bude vypadat asi takto:

-- web   
-- index.php   
-- obsah   
-- casti

V adresáři obsah budou jednotlivé stránky (respektive podstránky) webu, jako jsou např. sluzby.php, reference.php, onas.php, kontakt.php. No a v adresáři casti budou pochopitelně různé části webu, které budou na všech stránkách stejné a bude jednodušší je častěji měnit – hlavicka.php, menu.php, sidebar.php a paticka.php. Záleží na Vás, jakou strukturu a pojmenování souborů si zvolíte Vy.

 

A jdeme na věc!

Teď se ale vrátíme zpátky k souboru index.php. V tomto souboru bude vlastně náš routovací (nikoliv routerovací od slova router) systém, který bude všechno řídit:

<html> 
  <head> 
    <meta charset="utf-8"> 
    <title>Název stránky (později se bude dynamicky měnit)</title> 
  </head> 
  <body> 
    <?php include "casti/hlavicka.php"; ?> 
    <?php include "casti/menu.php"; ?> 
    <?php 
      $stranka = $_GET['stranka']; 
      if($stranka== "sluzby"){echo "Jsi na stránce služeb.";}
      elseif($stranka == "cenik"){echo "Jsi na stránce, kde uvidíš ceník.";}
      else{echo "Vyber si nějakou stránku, aby se ti mohl zobrazit text: <a href='?stranka=sluzby'>Služby</a>, nebo <a href='?stranka=cenik'>Ceník</a>.";}   
   ?>

 

Začneme od 7. řádku. Zde includujeme (více o include: Include v PHP – 1.díl) dva soubory – hlavicka.php a menu.php. Oba dva jsou umístěny v adresáři casti. Na 10. řádku jen definujeme obsah proměnné $stranka a to je superglobální proměnná $_GET.

 

Co se stane když?

No a od 11. řádku začíná již samotné routování a vidíme zde první podmínky, podle kterých se bude obslužný skript řídit. Takže:

  • Pokud (if) je obsahem proměnné $stranka text sluzby, tak
    • vypiš uživateli na stránku větu Jsi na stránce služeb.
    • if($stranka== "sluzby"){echo "Jsi na stránce služeb.";}
  • Nebo pokud (elseif) je obsahem proměnné $stranka text cenik, tak
    • vypiš uživateli na stránku větu Jsi na stránce, kde uvidíš ceník.
    • elseif($stranka == "cenik"){echo "Jsi na stránce, kde uvidíš ceník.";}
  • Pokliže se nesplnila ani jedna předchozí podmínka (else), tak
    • vypiš uživateli na stránku větu Vyber si nějakou stránku, aby se ti mohl zobrazit text: Služby, nebo Ceník
    • else{
      echo "Vyber si nějakou stránku, aby se ti mohl zobrazit text:"; 
      echo "<a href='?stranka=sluzby'>Služby</a>, nebo <a href='?stranka=cenik'>Ceník</a>.";
      }

 

Podmínky a výpis textu

Samozřejmě, že by tento podmínkovací (routovací) skript šel zapsat i přehledněji, ale pokud budu mít pod sebou třeba padesát záznamů (padesát různých stránek, tak by to nemuselo být přehledné). Ale můžeme si to ukázat:

<html> 
  <head> 
    <meta charset="utf-8"> 
    <title>Název stránky (později se bude dynamicky měnit)</title> 
  </head> 
  <body> 
    <?php include "casti/hlavicka.php"; ?> 
    <?php include "casti/menu.php"; ?> 
    <?php 
      $stranka = $_GET['stranka']; 
      if($stranka== "sluzby"){
        echo "Jsi na stránce služeb.";
      }elseif($stranka == "cenik"){
        echo "Jsi na stránce, kde uvidíš ceník.";
      }else{
        echo "Vyber si nějakou stránku, aby se ti mohl zobrazit text:"; 
        echo "<a href='?stranka=sluzby'>Služby</a>, nebo <a href='?stranka=cenik'>Ceník</a>.";
      }   
   ?>

Je to prostě opticky delší kód.

Podmínky a zobrazení obsahu

Skript si nyní upravíme tak, aby zobrazoval rovnou při zadání správných parametrů určené stránky (includoval je). Stačí skript jen opravdu trošičku poupravit:

<html> 
  <head> 
    <meta charset="utf-8"> 
    <title>Název stránky (později se bude dynamicky měnit)</title> 
  </head> 
  <body> 
    <?php include "casti/hlavicka.php"; ?> 
    <?php include "casti/menu.php"; ?> 
    <?php 
      $stranka = $_GET['stranka']; 
      if($stranka== "sluzby"){
        include "casti/sluzby.php"; 
      }elseif($stranka == "cenik"){
        include "casti/cenik.php";
      }else{
        echo "Vyber si nějakou stránku, aby se ti mohl zobrazit text:"; 
        echo "<a href='?stranka=sluzby'>Služby</a>, nebo <a href='?stranka=cenik'>Ceník</a>.";
      }   
   ?>

Zarovnávat tento kód už nebudu. Jak zde vidíte, stačilo pouze trošku pozměnit události, co se mají stát při splnění podmínky – tedy místo vypsání nějakého textu (echo) zobrazit nějaký soubor (include).

 

To je pro dnešek vše. Snad se Vám návod na routování v PHP líbil.

Napište komentář!