Jednoduchý web v PHP
I web o pár stránkách je vhodné skládat automatisovaně. Jak na to v PHP?
Pro některé malé weby může být jednodušší a z hlediska výkonu (zátěž serveru + rychlost načítání) výhodnější nepoužívat nějaký rozsáhlý redakční systém. Psát vše v čistém HTML a ručně kopírovat společné části není také nic moc. Nabízí se třetí cesta… skládání stránky v PHP.
Vložení společných částí
Jako nejelegantnější se mi jeví společné části uložit jako funkce do společného souboru, který se na každé stránce připojí a společné funkce se zavolají.
Můžeme vycházet z toho, že výsledný HTML kód každé stránky sestává z:
- společného obsahu před samotným obsahem — typicky
<!doctype html>
,<meta>
značky, hlavička, popřípadě menu, - společného obsahu za samotným obsahem — typicky patička nebo další sloupec
Samotná stránka nejaka-stranka.php
potom bude vypadat nějak takto:
<?php
include "spolecne.php";
hlavicka("Titulek stránky");
?>
<!-- samotný obsah -->
<h1>Nadpis stránky</h1>
<p>Obsah stránky</p>
<!-- konec samotného obsahu -->
<?php
paticka();
?>
Soubor spolecne.php
bude v začátku jen definovat funkce hlavicka
a paticka
.
Hlavička
<?php
function hlavicka($title, $description = "") {
?>
<!doctype html>
<meta charset="utf-8">
<title><?=empty($title) ? "Název webu" : $title . " – Název webu"?></title>
<?php if (!empty($description)) { ?>
<meta name="description" content="<?=$description?>">
<?php } ?>
<rel="stylesheet" type="text/css" href="styl.css">
…
<div class=container>
<div class=menu>
<a href="./">Hlavní strana</a>
<a href="./druha.php">Druhá</a>
<a href="./treti.php">Třetí</a>
</div>
<div class=content>
<?php } ?>
Tato funkce provede následující:
- vypíše
<!doctype>
, <meta>
značku pro kódování,- pokud bude předán titulek, tak nastaví
<title>
na Název stránky – Název webu - pokud se funkci předá popisek, nastaví se
<meta name=description>
, - připojí CSS a vůbec všechen společný obsah (hlavička, navigace, obal z
<div>
u pro samotný obsah.
Některé HTML značky v rámci této funkce zůstanou neuzavřené — uzavře je až funkce paticka
.
Patička
Tato funkce bude o poznání jednodušší. Stačí v ní v podstatě akorát vypsat běžné HTML (uzavření otevřených značek, vypsání patičky, připojení měřicích skriptů).
<?php
function paticka() {
?>
</div>
<p>Web vytvořil XXX
</div>
<?php } ?>
Hezké adresy
Tento postup řešení skládání stránek sám o sobě nabízí relativně rozumnou podobu adres, tj. example.com/adresa-stranky.php
. Nicméně, můžeme adresy ještě trochu vylepšit přepisem v .htaccess
na podobu example.com/adresa-stranky
:
RewriteEngine On
# podstrčení PHP, přepsat pouze na existující skript
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$ $1.php [L]
Přesměrování *.php
adres
Zamezit duplicitě lze:
- přesměrováním v
.htaccess
, - čisticí funkcí v PHP, která se přidá do hlavičky (do funkce
hlavicka
):function presmerovat() { $redir = str_replace(array("index.php", ".php"), "", $_SERVER['REQUEST_URI']); if ($_SERVER['REQUEST_URI'] != $redir) { header("Location: $redir", 301); } }
Menu se zvýrazněním aktuální položky
Ve společném souboru (spolecny.php
) můžeme statické menu oživit, aby se aktuální položka zvýraznila.
Asi nejpohodlnější bude nadefinovat si jednotlivé stránky jako pole:
$menu = array(
"Název stránky" => "url-stranky",
"Název další stránky => "url-dalsi-stranky",
);
A potom jen zajistit výpis.
<?php
function menu($title) {
?>
<div class=menu>
<?php
$menu = array(…);
foreach ($menu as $nazev => $odkaz) { ?>
<a href="./<?=$odkaz?>"<?=($nazev == $title) ? " class='active'" : ""?>><?=$nazev?></a>
<?php } ?>
</div>
<?php } ?>
Tato funkce menu
se zavolá z funkce hlavicka
a předá se zadaný titulek, ten se porovná a v případě schody s některou z položek se přidá CSS třída active
.
Stáhnout
Pro vyzkoušení na svém počítači je třeba mít nainstalován webserver s podporou PHP.
Komentáře