Dynamické generovanie stránky v PHP
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.
Mohlo by vás také zajímat
-
AI na dosah ruky: Jak je to s AI v osobních zařízeních?
22. ledna 2024 -
Rychlost serveru: Klíč k lepšímu umístění ve vyhledávačích
7. června 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024
Ondra
Kvě 12, 2010 v 15:08Dobrý 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).
Lucas
Led 7, 2011 v 1:19Zdravim, 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“ ?