Tvorba přístupných dynamických odkazů

2. ledna 2003

Určitě často při tvorbě webových aplikací používáte odkazy s mnoha doplňujícími parametry. V tomto článku si ukážeme, jak si tvorbu takových odkazů zjednodušit. Také si ukážeme způsob, jak obejít nepříjemné chování některých vyhledávačů, které obvykle ignorují část URL za otazníkem, čímž vaše stránky znevýhodňují.

Jak na odkazy?

Pro tento účel použijeme jednoduchou třídu tUrl (ke stažení v archivu), která bude mít tyto základní funkce:

  • Vytvoří QUERY_STRING z parametrů zadaných v asociativním poli.
  • Do QUERY_STRING přidá „globální proměnné“ (může to být například identifikátor session SID).
  • Pokud hodnoty parametrů obsahují nebezpečné znaky, které nemohou být obsaženy v url, převede je na escape sekvence.

Nejprve jednoduchá ukázka:

<?php
# vloží soubor s třídou
include ‚url.class.php‘;
# vytvoří instanci třídy
$url = new tUrl;
# nastaví jméno skriptu
$url->script_name = ‚index.php‘;
# nastaví globální proměnné
$url->globals[‚uzivatel‘] = ‚franta‘;
#samotná tvorba odkazů
$href = $url->create(
  array(
    ‚akce‘ => ‚ukaž ceník‘,
    ‚kategorie‘ => 1
  )
);
# promenna $href obsahuje řetězec
# index.php?uzivatel=franta&amp;akce=uka%9E+cen%EDk&amp;kategorie=1
?>
<a href=“<?php echo $href;?>“>Odkaz</a>  

Třída tUrl bude mít jednu metodu a několik proměnných.

Metody

create(array promenne, [string skript])
Vytvoří url tím, že spoji cestu ke skriptu, název skriptu a parametry s globálními parametry. První parametr je asociativní pole. Index pole určuje jméno proměnné a jeho hodnota hodnotu proměnné:

$url = new tUrl;
$param = array(
  ‚a‘ => 123,
  ‚text‘ => ‚Hello :)‘);
echo $url->create($param);

Výstup bude vypadat přibližně takto: ?a=123&amp;amp;text=Hello+%3A%29.

Proměnné

globals[]
Globální parametry, které se přidávají ke každé url. Můžete zde zadat například uživatelské id, skin webu nebo, pokud jej používáte, session identifikátor SID.
argument_separator
Definuje oddělovač parametrů url, standardně je nastaven na &amp;.
argument_associate
Definuje řetezec, který v url odděluje název proměnné a její hodnotu, standardně je nastaven na =.
question
Definuje řetezec, který v url odděluje název skriptu a jeho parametry, standardně je nastaven na ?.
script_name
Obsahuje jméno výchozího skriptu.
script_path
Obsahuje cestu ke skriptu/skriptům. Toto je potřeba hlavně v případě, kdy používáte pro přenos proměnných způsob http://www.server.cz/skript.php/promenna/hodnota/promenna2 ...

Jak na vyhledávače?

Některé fulltextové vyhledávače ignorují v url část za otazníkem. Pokud tedy máte celý web ovládaný jedním skriptem, při troše štěstí zaindexují pouze vstupní stránku index.php, ale už se nazaindexuje index.php?ukaz=clanek&id=123, protože ten bude vyhledávač považovat za index.php. Jedním ze způsobů, jak toto obejít, je oddělení parametrů skriptu lomítkem /, takže odkaz bude vypadat takto: index.php/ukaz/clanek/id/123. Toto by už měl zaindexovat každý vyhledávač.

Jak vytvořit takový odkaz?

Pokud použijete pro tvorbu odkazů třídu tUrl, stačí přidat několik řádků kódu:

$url = new tUrl;
# nahradí „&amp;“ znakem „/“  
$url->argument_separator=’/‘
# nahradí „=“ znakem „/“  
$url->argument_associate=’/‘
# nahradí „?“ znakem „/“  
$url->question=’/‘
# nastaví název skriptu
$url->script_name=’index.php‘
$param = array(
  ‚a‘ => 123,
  ‚text‘ => ‚Hello :)‘);
echo $url->create($param);

Výstup bude vypadat takto: index.php/a/123/text/Hello+%3A%29.

Dekódování proměnných

Pokud zavoláte skript tímto odkazem, nebudou předány proměnné klasickým způsobem, ale budou předány vcelku, v proměnné $_SERVER['PATH_INFO']. Abyste mohli proměnné normálně používat, stačí zavolat funkci importPathInfoVars(), která je ve stejném souboru jako třída tUrl. Po zavolání funkce převede PATH_INFO do pole $_REQUEST tak, jako by se parametry předávaly normálním způsobem.

Související články

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ší

Napsat komentář

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