Návod na sestavení stránky se dvěma parametry

Zde je rozepsán způsob, kterak se o zobrazování jednotlivých stránek na tomto webu starají dva parametry v adrese. První parametr určuje první "vrstvu" (hlavní menu), tj. pojednání o CSS, PHP, JavaScriptu a grafice a druhý parametr zajišťuje natažení jejich podstránek (podmenu).

Úplně nejzákladnějším kamenem "výstavby" tohoto typu stránek je soubor index.php. Dá se přirovnat k obvodovému zdivu domu, do kterého pomocí parametru vkládám pokoje (tj. jednotlivé stránky). Hodnota parametru se přenáší viditelně v adrese a pokud je tato hodnota příhodně zvolená, lze z ní odvodit pravděpodobný obsah stránky.

Moje stránky používají str jako první parametr a ten nabývá hodnot uvod, css, php, js, grafika. Protože úvodní soubor je pojmenovaný "uvod.php", tak chci-li ho zobrazit, vložím do odkazu na něj hodnotu uvod u proměnné (parametru) str a současně mohu zvýraznit aktuální položku seznamu tím, že mezi značky <?php a ?> vložím podmínku:

<ul id="menu">
     <li><a href="?str=uvod"<?php if($_GET['str']=="uvod") 
          echo 'class="vybr"';?>>Úvodní stránka</a></li>
            /*nebo při použití pěkných adres:*/
     <li><a href="/uvod/"<?php if($_GET['str']=="uvod") 
          echo 'class="vybr"';?>>Úvodní stránka</a></li>
</ul>
     

Po kliknutí na odkaz napsaný výše uvedeným způsobem se otevře stránka s obsahem souboru uvod.php. A úplně stejným způsobem se natahují do prohlížeče i ostatní stránky. Je libo »zdrojový kód«?


Pozor ovšem na úskalí související, jak jinak, s cestou k souborům! Subdoménu, na níž jsem hodlala používat naznačený zdrojový kód, jsem si nazvala psikusy a celá cesta v adresním řádku má tvar http://www.psikusy.zlatberry.cz. Na localhostu mi stránky spolehlivě běhaly, o to větší překvapení mne čekalo po nakopírování obsahu na FTP. Popravdě, neuvědomila jsem si v té chvíli naprosto zásadní věc, a to, jak jsou rozvrženy adresáře na mém placeném hostingu:
obsah subdomény mám na vlastním počítači uložen ve složce psikusy, kdežto subdoména na Onebitu má tvar www.psikusy. Docela rozdíl, že?

Proto na mém hostingu musí být zapsán adresář takto:

file_exists ("../www.psikusy/{$_GET['str']}.php") == true ? ...

Nu a nesmíme zapomenout uložit do adresáře s obsahem webu také soubor ».htaccess«, protože v případě použití tzv. pěkných adres bychom dostávali neustále chybu 404. Soubor jde snadno vytvořit např. v PSPadu, ve kterém lze v nastavení programu odškrtnout, že nechceme použít BOM znaky, spojené s UTF-8 kódováním. Při ukládání v běžném Poznámkovém bloku se totiž znaky BOM mohou připojit a soubor .htaccess může jen kvůli nim zdánlivě nefungovat (osobní zkušenost).

Zdrojový kód souboru index.php

//aby se nezobrazovalo "Undefined index"
  <?php
    $_GET['str'] = (isset($_GET['str']) ? $_GET['str'] : "uvod");    
  ?>  
<div id="obal">
   <ul id="menu">
     <li><a href="/uvod/"<?php if($_GET['str']=="uvod") 
                           echo 'class="vybr"';?>>Úvodní stránka</a></li>
     <li><a href="/css/"<?php if($_GET['str']=="css") 
                           echo 'class="vybr"';?>>CSS</a></li>>
                           ...
                           ..
   </ul>                

/*nastavení prvního parametru*/    
<php
if (isset($_GET['str']) && preg_match('/^[a-z0-9_-]+$/', $_GET['str']))  {
    include file_exists ("../psikusy/{$_GET['str']}.php") == true ?  
    dirname(__FILE__)."/{$_GET['str']}.php" :
    dirname(__FILE__)."/404.php";
    } else  {
    dirname(__FILE__)."/uvod.php";
    } 

function titulek()  {
    $title = array ("uvod" => "Toto je úvodní stránka psích kusů :-)", 
                    "css" => "Elegantní kousky s kaskádovými styly", 
                    "php" => "PHP skripty nejen na webový formulář",
                    ... atd.
                   );
         if (isset($_GET['str']))  {   /*buď ./ anebo ../psikusy*/
        echo file_exists ("../psikusy/{$_GET['str']}.php") == true ?
            $title[$_GET['str']]  :
            "Omlouvám se, ale soubor nebyl nalezen";
    } else {
        echo "Úvodní stránka";
    } 
  }
  
/*pro $_GET['str'] nevypisovat samostatně echo "<title>";, 
protoze u podstranek zápis else titulek()
zabezpečí zobrazení titulku v případě neexistence titulek2()*/

/*nastaveni druheho parametru*/
if(isset($_GET['vyber']))  { 
    if (file_exists('navody/'.$_GET['vyber'].'.php') 
        && preg_match('/^[a-z0-9_-]+$/', $_GET['vyber']))   {
        include '/navody/'.$_GET['vyber'].'.php';
           }
      else  {
      include dirname(__FILE__)."/404.php";
            }
}    

function titulek2()   {
  $title = array ("stinovani" => "Stínování obrázků",
                  "formular" => "Tvorba webového formuláře",
                  ... atd.
                 );
        if(isset($_GET['vyber']))   {
      echo file_exists("./navody/{$_GET['vyber']}.php") == true ?
      $title[$_GET['vyber']]  :
      "Omlouvám se, ale soubor nebyl nalezen";    
      } else  {
      titulek();    
      }
} 

echo "<title>";
titulek2();
echo "</title>"; 

function paticka()    {
  $patka = array("uvod" => "Úvodní stránka",
                 "css" => "Kaskádové styly",
                 "php" => "Serverové skripty (PHP)",
                 ...atd.
                );
        if(isset($_GET['str']))  {
           echo file_exists("../psikusy/{$_GET['str']}.php") == true ?
           $patka[$_GET['str']] :
           "Prohlížíte si www.psikusy.zlatberry.cz";
           }
       }             
   
echo "<div id='paticka'><-------- ";
paticka(); 
echo "-------->";
echo "</div>";                
?>
  <div class="cistic"></div>            
</div>     

Zdrojový kód souboru .htaccess

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ ?str=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ /?str=$1&vyber=$2 [L,QSA]
Zobrazování stránek pomocí dvou parametrů v adrese
<-------- Serverové skripty (PHP) -------->

Moje stránky s psí tematikou na www.zlatberry.cz

Moje stránky s kutilskou tematikou na www.handy.zlatberry.cz