Dynamické generovanie stránky v PHP

18. ledna 2003

V tomto článku si vytvoríme praktickú pomôcku pre každého programátora. Ide o vygenerovanie stránky na základe premennej predávanej cez URL. Ukážka bude naprogramovaná bez databázi aj s databázou.

Takto vám pre naprogramovanie stránky postačí vlastne jedna stránka, ktorá bude obsahovať všetko okrem „stredu“, teda hlavnej časti stránky. Takže na kompletnú stránku vám postačí vytvoriť jednu hlavnú stránku okrem časti, kde sa bude generovať nejaký dokument. Toto miesto nahradí skript, ktorý už premennú v našom príklade označovanú $page spracuje a vygeneruje našu stránku.

Pokiaľ sa budete potrebovať dostať napríklad na stránku s formulárom pre kontakt, môže odkaz na túto stránku vyzerať: index.php?page=kontakt. V premenných ale nemusíte vypisovať zrovna názvy. To sa oplatí hlavne pri malých stránkach. Pri väčších je niekedy lepšie v premennej prenášať čísla. Teda jedno číslo = jedna stránka. Samotný obsah stránky (stred) bude ukladaný v súboroch s príponou php. Tieto stránky môžeme ešte zabezpečiť proti ich samotnému otvoreniu bez stránky index.php. Tým dosiahnete, že sa nikto nebude pozerať do častí (stredov) stránok. Pomoc je jednoduchá – vytvoríte si na začiatku každého dokumentu, ktorý bude predstavovať stred stránky podmienku – v prípade, že existuje premenná napríklad $kod a nesie hodnotu „5e9c“, tak sa stránka vygeneruje. Túto premennú aj s hodnotou už len jednoducho vložíte ku skriptu na stránke index.php. Takže stred stránky bude vyzerať asi takto:

<?if(IsSet($kod) && $kod == „5e9c“):?>
// samotný stred
<?endif;?>

Teraz si vytvoríme skript, ktorý môžete použiť v prípade, že nemáte prístup k databázam alebo má web tak málo podstránok, že sa do toho neoplatí zaťahovať databázu. Skript potom vyzerá nasledovne:

<?
 $kod = „5e9c“;
 if(IsSet($_GET[‚page‘])):
 switch($page) {
   case „novinky“:
   $url = „news.php“;
   break;
   case „galeria“:
   $url = „gallery.php“;
   break;
   case „kontakt“:
   $url = „contact.php“;
   break;
   default:
   $url = „home.php“;
 }
 else: $url = „home.php“;
 endif;
 require $url;
?>

Skript bez databázi je ale dosť dlhý, hlavne pri väčšom počte podstránok. V takom prípade je dobre využíť verziu s databázou.

Tabulka môže obsahovať množstvo informácií o stránke, napríklad dátum poslednej aktualizácie, title pre dokument, popis stránky, počítadlo zobrazení a iné. My si navrhneme jednoduchšiu tabulku, ktorá bude obsahovať:

  • názov stránky (tiež sa dá použiť ako <title> dokumentu)
  • ID číslo alebo krátky názov – toto označovanie používame v URL
  • cestu k súboru na servery
  • popis stránky

Popis stránky sa hodí v prípadoch, keď máte na servery veľké množstvo podstránok a je problém si zapamätať presný význam niektorých skriptov. Malo by to zprehľadniť prácu s databázou. Návrh celej našej tabulky vyzerá takto:

create table pages(
name varchar(50) not null,
id varchar(20) not null,
url varchar(255) not null,
description varchar(255),
PRIMARY KEY(name,id,url));

Skript s použitím databázi:

<?
 $kod = „5e9c“; // napiseme bezpecnostny kod
 if(IsSet($_GET[‚page‘])): // overime, ci existuje premmenna $page
  MySQL_Connect(„localhost“); // pripojime sa k databazi
  MySQL_Select_DB(„test“); // vyberieme databazu
  $vysledok = MySQL_Query(„SELECT url FROM pages WHERE id = ‚$_GET[page]'“); // napiseme sql prikaz
  if(MySQL_NumRows($vysledok) == 1):
    $url = MySQL_Result($vysledok, 0, „url“); // adresu z databazi zapiseme do premennej $url
  else:
   $url = „chyba.php“; // pokial zaznam nebol najdeny, tak do premennej $url vlozime inu stranku, napr. upozornenie na chybu
  endif;
 else:
  $url = „home.php“; // v pripade, ze neexistuje premenna $page, vlozime do $url hlavnu stranku
 endif; // ukoncime prvu podmienku
 require $url; // vygenerujeme stranku
?>

V prípade, že chcete dynamicky generovať aj <title> dokumentu, tak jednoducho tento skript umiestnite pri začiatku dokumentu a okrem url adresy vyberte z databázi aj názov. Premennú $url potom použite až tam, kde sa bude generovať stránka: <?require $url;?>.

Namiesto funkcie require() môžete použiť aj funkciu include(), ktorá funguje veľmi podobne. Sú tu však drobné rozdiely, ktoré dávajú výhody i nevýhody obidvom funkciám.

Verím, že tento článok vám bude prospešný pri tvorbe stránok v PHP. Rozhodne by mal uľahčiť prácu a urýchliť tvorbu webu.

Pozn. red: Zde popisovaná metoda přináší sofistikovanější poskládání stránky než potenciálně nebezpečné include. Díky ochrannému kódu, zabrání i mnohem bezpečněji prohlížení (spouštění) samostatných includovaných souborů než postup, popisovaný v článku Pavla Růžičky.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

2 komentářů

  1. Ondra

    Kvě 12, 2010 v 15:08

    Dobrý den jsem začátečník a nefunguje mi to. Zkoušel jsem to nez tý databáze, lenevím kam to mám vložit toto :

    Jinak jsem pochopil že ten samotný stred musí bejt v každý stránce (php).

    Odpovědět
  2. Lucas

    Led 7, 2011 v 1:19

    Zdravim, vyuzivam dynamicke menu a rikam si jak je to se SEO ? ..jak je to s indexaci u vyhledavacu…nemuze se stat ze vyhledavac najde prave jen stranku kde nemame nic a jen pouhy text…ze mi to vyhledavac nehodi na index.php s obsahem get ale pouze tu stranku na kterou odkazuji get?=videa/novydil“ ?

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *