O webu
Složení jednoduchého webu 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:

  1. společného obsahu před samotným obsahem — typicky <!doctype html>, <meta> značky, hlavička, popřípadě menu,
  2. 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í:

  1. vypíše <!doctype>,
  2. <meta> značku pro kódování,
  3. pokud bude předán titulek, tak nastaví <title> na Název stránky – Název webu
  4. pokud se funkci předá popisek, nastaví se <meta name=description>,
  5. 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:

  1. přesměrováním v .htaccess,
  2. č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);
    	 }
    }

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

Hotová ukázka ke stažení Demo

Pro vyzkoušení na svém počítači je třeba mít nainstalován webserver s podporou PHP.