Prosím o pomoc s řešením.
Už jsem přišel na to, jak vytvořit jednoduchou pěknou url. Mám mám např. www.neco.cz/index.php?akce=page$&select=galerie a přes .htaccess to převedu na www.neco.cz/galerie (page je stránka s sql na DB).
Chtěl bych však vytvořit více stupňů.
odkazy by mohly vypadat např. takto
www.neco.cz/galerie (výcházím z www.neco.cz/index.php?akce=page$&select=galerie)
www.neco.cz/galerie/novinky
www.neco.cz/galerie/vystavy/leden
www.neco.cz/sluzby/sluzba1/detail
Nemohu však přijít na to, jak by měl takto více stupňový link vypadat (jde vycházet z tohoto ?? www.neco.cz/index.php?akce=page$&select=galerie) nebo úplně jinak
a potom, jak výsledně udělat zjednodušené odkazy
Ještě příklad, jak mám dělanou DB stránek
id,pod_id,nazev,text .....
1,0,galerie, ....
2,0,o-nas, ...
3,2,blizsi-informace, ...
druhé číslo určuje kategorii z prvního sloupce. např. 0.
Při pátrání na internetu jsem se dočetl, že by to šlo řešit rourováním, ale nevím jak. Nenašel jsem žádný jednoduchý příklad, vždy jen, jak se to řeší v nějakých aplikacích
Fórum › PHP
Pěkná vícestupňová URL
routovani funguje tak, ze si vse, co je za lomitkem v adrese predas jako promennou do index.php, ve kterem ji pak zpracujes pomoci cehokoli. Po zadani adresy www.neco.cz/galerie/vystavy/leden se ti do index.php dostane pod $page cely ten retezec, takze galerie/vystavy/leden. O tenhle retezec se pak stara nejaka funkce, ktere si rika router. Muzes si to napr rozdelit pomoci explode podle lomitka a pak zpracovavat casti, jak potrebujes.
tak tak, vsetko co je priecinok posun na spracovanie napr. root/index.php (pomocou htaccess)
v nom pomocou explode rozsekaj $_SERVER['REQUEST_URI'] na pole... a mozes tych "stupnov" mat aj milionpatsto...
jestli to chápu dobře, tak ať mám jakýkoliv stupeň, tak volám podobný link, který se předtím rozloží?
příklad:
www.neco.cz/galerie
www.neco.cz/galerie/zima
www.neco.cz/galerie/zima/novinky
www.neco.cz/galerie/zima/novinky/detail_1
tak se to nějak přes router rozloží a volá to link:
www.neco.cz/index.php?akce=page$&select=galerie
www.neco.cz/index.php?akce=page$&select=zima
www.neco.cz/index.php?akce=page$&select=novinky
www.neco.cz/index.php?akce=page$&select=detail_1
nebo je to jinak?
prosím případně o nějakou ukázku, jak je to správně.
je to jinak..
kdyz se to udela takto: server/index.php/param1/param2/param3 tak dostanes ve scriptu dalsi serverovou promennou tusim neco jako $_SERVER['PATH_INFO'] kde je '/param2/param2/param3'
samozrejme se to da pomoci mod rewrite predelat tak, aby se nemuselo davat index.php
jurasek07 napsal:
jestli to chápu dobře, tak ať mám jakýkoliv stupeň, tak volám podobný link, který se předtím rozloží?
příklad:
www.neco.cz/galerie
www.neco.cz/galerie/zima
www.neco.cz/galerie/zima/novinky
www.neco.cz/galerie/zima/novinky/detail_1
tak se to nějak přes router rozloží a volá to link:
www.neco.cz/index.php?akce=page$&select=galerie
www.neco.cz/index.php?akce=page$&select=zima
www.neco.cz/index.php?akce=page$&select=novinky
www.neco.cz/index.php?akce=page$&select=detail_1
nebo je to jinak?
prosím případně o nějakou ukázku, jak je to správně.
ne tak uplne, kazda z tech adres se ti prelozi na index.php, kde se pomoci serverove promenne $_SERVER['REQUEST_URI'] dostanes k cele te adrese - /galerie/zima/novinky/detail_1
s tim si pak muzes vyhrat, jak potrebujes
prosím případně o nějakou ukázku, jak je to správně.
.htaccess (ten regulerny vyraz mozes mat iny, ak si ho zvladnes napisat, ja pouzivam v adresach vzdy len znaky a-z 0-9 a bodku _ -. a zaroven to vzdy musi byt adresar, cize musi koncit lomkou)
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^([\_a-zA-Z0-9\-\/\.]*)/$
RewriteRule ^([\_a-zA-Z0-9\-\/\.]*)/$ index.php
a samotny router na zaciatku suboru index.php
$router=explode('/',$_SERVER['REQUEST_URI']);
// prvy prvok je vzdy prazdny
unset($router[0]);
// v mojom pripade musi byt na konci adresy lomka, cize posledny prvok pola bude tiez prazdny (resp. bude obsahovat GET premenne)
if (($posledny_prvok=count($router))>=1) { unset($router[$posledny_prvok]); }
print_r($router);
// prvy prvok je vzdy prazdny
unset($router[0]);
// v mojom pripade musi byt na konci adresy lomka, cize posledny prvok pola bude tiez prazdny (resp. bude obsahovat GET premenne)
if (($posledny_prvok=count($router))>=1) { unset($router[$posledny_prvok]); }
tohle by se dalo zkratit pomoci
$router=trim($_SERVER['REQUEST_URI'],'/');
coz odstrani lomitka na zacatku a na konci
To insider : zabudol si na pripadne GET premenne!... ja to vsak riesim reg. vyrazom ktory skontroluje dodatocne validnost adresy + odstrani lomky avsetko nepotrebne... uvedeny priklad som pisal z hlavy ako ukazku...
mozes si pozret cely zdrojak na http://codefreax.org/projects/view/cubework/tab/resources#pMenu a routovanie je v subore Router.php
ako uz predo mnou hovorili, da sa to spravit tak ze .htaccess (mod_rewrite) smeruje vsetky poziadavnky na index.php. Potom riadenie prevezme Lib_Router ktory vybere argumenty z url atd atd
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
čtení url/braní dat z url — založil tribalcz
Pekna baba — založil chlapec881
Mybrute, pěkná online hra. — založil pawlik
Pěkná blbovina [Prográmek k otestování] — založil plasmo
Moderátoři diskuze