Asi to znáte. Hledáte nějaký jednoduchý směrovač (router), se kterým by šlo tvořit seo optimalizované url adresy, ale narážíte jenom na přebobtnalé třídy s minimálně tisíci řádky? Svět se zbytečně překomplikoval. Všichni již dnes používají OOP, takže vývoj kódu trvá neskutečně dlouho (ve srovnání s procedurálním programováním) a nedá se v tom vyznat, protože je zapotřebí mnohonásobně více kódu, než v procedurálních dobách. Je to děsivý paradox.
Programujete-li pro klienty, je zřejmé, že musíte tvořit co nejvíc řádků kódu, aby se navenek zdálo, že k dosažení cíle je nutné odvést miliony hodin práce (já to tak rozhodně nedělám!). Kód píšete přitom tak, aby se v něm nikdo nevyznal a zejména ne nějaký programátor, který by měl ten marast po vás upravovat (pro mě je na prvním místě přehlednost, protože je lepší web postupně přizpůsobovat aktuální situaci, než muset kvůli složitosti dělat vždy úplně nový web). Jenže potřebujete-li tvořit web jen pro sebe a nikdo jiný se nebude nikdy na kód dívat, potom máte-li všech pět pohromadě, půjdete tou nejjednodušší a nejefektivnější cestou – tedy co nejméně řádků, co nejpřehlednější kód, žádný balast.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $path = trim(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH), "/"); if (strpos($path, '/') === 0) { $path = substr($path, strlen('/')); } @list($controller, $action, $params) = explode("/", $path, 3); if (isset($params)) { $parametry = explode("/", $params); } echo "controller: ".$controller; echo '<br />'; echo "akce: ". $action; echo '<br />'; echo "parametry: ". $parametry; |
Musíte mít ještě dobře nastavený .htaccess, tzn. nejlépe takto:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
V praxi však přijdete na to, že situace kdy se pracuje se třemi segmenty je spíše výjimkou. Většinou kvůli SEO je řada stránek pouze s jedním segmentem. Výše uvedený kód by hlásil chybu. Proto přejdeme k úplně maximálnímu zjednodušení jaké vůbec jde a které lze použít i pro stránky reálné, v našem případě s nula až čtyřmi segmenty.
1 2 3 4 5 6 7 8 9 10 11 |
$url = array(); $url = explode("/",($_SERVER["REQUEST_URI"])); for ($x = 4; $x >= count($url); $x--) { array_push($url, 'x'); // doplníme namísto chybějících segmentů nějaký znak, abychom se vyhli situaci, kdy chceme pracovat např. s $url[3], ale ten neexistuje } /* $url[0] ... je vždy prázdná $url[1] ... např. en, sk, produkty, detaily, jednotlivé stránky ... $url[2] $url[3] */ |
Jednodušší a přehlednější už to být nemůže. Navíc máte v podstatě neomezené možnosti jak jednotlivé segmenty $url[0] až $url[x] ošetřit. Vím, nedá se vůbec uvěřit, že by tak jednoduchý kód mohl fungovat. Raději opět sáhnete po nějaké megalomanské routovací třídě s dvěstě metodami a ještě navrch pěkně zahnojené haldou bordelu natahaného Compostérem. Dělá to tak naprostá většina „programátorů“, tak v tom klidně můžete pokračovat. Jen jsem chtěl naznačit, že je možné programovat i jinak, jednodušeji.