Autor Zpráva
igid26
Profil
Zdravím, všetkých,
snažím sa postaviť jednoduchý RS. Chcem zobraziť jednotlivé príspevky podľa kategórií. Čo sa mi aj podarilo. Problém však nastáva v štruktúre URL, pretože nie SEO friendly.

Url pre vyhľadávanie príspevkov podľa kategórií:
.../blog/?kategoria=navody

a ja by som potreboval niečo ako:
.../blog/navody/

Nejaké tipy ako to spraviť? Vopred ďakujem za pomoc.
Mlocik97
Profil
a čo je vlastne problém? Neviem jak to máte napísaný, nevidíme kód, takže ťažko poradiť, ale ak je to rozumne, nestačí jednoducho zmeniť len ten path?
RastyAmateur
Profil
igid26:
Do .htaccess budeš muset přidat nějaký RewriteRule. Co já jsem si většinou dělal bylo, že jsem si všechno podstrčil na index, kde jsem si tu adresu rozdělil přes lomítka a pak to nějakým stylem namapoval na scripty, které jsem potřeboval (finální aplikace je na tobě).

Na co si dej pozor, protože si pamatuji jak jsem s tím já bojoval, je flag QSA (tedy myslím, že je to on). Ten ti zachová GET parametry...

# .htaccess
RewriteEngine on
RewriteRule ^(.*)$ index.php?url=$1 [QSA] # QSA - Query string append

Nyní se ti /blog/navody/jesteneco/?foo=bar&ff=bb převede na index.php?url=/blog/navody/jesteneco/&foo=bar&ff=bb

V PHP si pak jednoduše rozsekáš tu proměnnou $_GET["url"] a máš to

<?php
$url = explode("/", $_GET["url"] ?? "");

// Do whatever you want
if ($url[1] === "blog" && $url[2] === "navody") { echo "Návody :)"; }

// It is great to see what actually you got there
var_dump($_GET);
var_dump($url);

Naprasil jsem to tu narychlo, neručím za kvalitu. Ale máš se alespoň od čeho odrazit :)
Případně si můžeš do .htaccess napsat jen něco malého na to, aby to řešilo pouze konkrétně to, o čem tu píšeš
# .htaccess
RewriteEngine on
RewriteRule ^/blog/(\w+)/$ /blog/?kategoria=$1
Mlocik97
Profil
RastyAmateur:
To je čo za retardované řešení URL nacpať do parametru, a potom späť. To je ako keby si chcel ísť z Pardubíc do Prahy vlakom, a tak si objednal taxík do Brna, z kade ide vlak cez Pardubice Do Prahy.
On sa chce zbaviť parametru a prepísať hodnotu do pathu, a ty mu radíš ešte celú URL nacpať do parametru? WOW

Inak nepresedlal si z Javy na PHP prednedávnom? Lebo mám taký pocit.
RastyAmateur
Profil
Mlocik97:
Nikde jsem nepsal, že je to ideální řešení. Rozhodně jsem nabídl alespoň nějakou konstrukci, narozdíl od tvého komentáře, který mu asi moc nepomůže... A rozhodně mi i takovéhle hloupé a začátečnické řešení přijde lepší, nežli kvůli každému novému objektu přepisovat htaccess nebo vytvářet extra soubory a stromovou strukturu
Ikki
Profil
RastyAmateur:
Co to je za blbost? "Kvůli každému novému objektu přepisovat .htaccess".. Stačí do něj vložit proměnou a můžeš těch objektů mít díky jednomu řádku i 250 tisíc. To co si napsal je naprostá blbost až je to hloupé.

Využij tohle v .htaccess (případně si to uprav dle potřeby) a máš postaráno.
RewriteRule ^blog/([0-9]+)$ blog?kategoria=$1 [L,QSA]
RastyAmateur
Profil
Ikki:
Dobře, časem přidá podkategorie. Bude muset jít a přidat pravidlo do htaccess, protože bude chtít, aby mu fungovalo obojí. Pak zjistí, že tam chce přidat ještě řazení, musí do htaccess. Pak zjistí, že vlastně potřebuje detail článku. Pak vlastně chce i jen jednu konkrétní část článku, třeba jen části s komentáři. A pak už má totálně libovej blog a chce mít ke každému článku vlastní API rozhraní. Jajks. Asi bych volil nějaký jednořádkový htaccess a pak jednuduchý PHP soubor, kde si to bude hezky mapovat. No a nakonec zjistí, že chce na svých stránkách krom blogu ještě prodávat nějaké produkty, o kterých píše.

Ono ve výsledku jakmile bude chtít udělat cokoliv mimo blog/kategorie/, je v háji...

Ještě detail, kategorii chce s názvy, ne s čísly. Takže jsi vlastně přepsal můj dodatek s tím, že jsi mi tam opravil chybu (ta lomítka tam asi být nemají...)
Ikki
Profil
Pokud má takovou vizi, měl by se ní řídit, ale dle jeho otázky je naprosto zcestné 95% tebou vyjmenovaných "upgradů". Co by, kdyby. Nicméně v takovém případě už by musel opravdu využít PHP, nicméně takovou otázku by si měl položit dřív než se do toho pustí, protože to bude znamenat velký zásah do stávajícího kódu.

Název jsem přejel, ale pokud ta má na názvy, tak určitě A-Z, stačí pozměnit hodnotu.
Keeehi
Profil
Mlocik97, Ikki:
Pánové, osobně si myslím, že řešení od RastyAmateur je lepší. Tedy ne že byste si to nemohli napsat tak jak chcete - několik pravidel pro přesměrovávání na různé soubory nebo jeden ale s různými speciálními parametry. Ono to fungovat bude ale je to takové nečisté řešení. O routování adres se nestará webová aplikace sama, ale nějaká třetí strana - webserver. Když webový server jen pošle každý požadavek na index.php a php aplikace si sama rozhodne, jak ho zpracuje, to mi přijde jako mnohem čistší řešení. Také je to řešení, které používají snad všechny php frameworky (nepovedlo se mi najít protipříklad). Laravel, Zend, Symfony, Nette.
Ikki
Profil
Osobně to využívám v MVC architektuře, Laravelu i Nette, logicky. Nicméně si myslím, že bohatě stačí jeden záznam v .htaccess. - začátečníkovi - by to mělo stačit a pokud se jedná čistě o dotaz který napsal, tak nevidím důvod psát komplexní řešení v kódu, kterému nemusí rozumět.
mckay
Profil
Rád bych ještě asi na závěr přivedl do pozornosti jedno z pravidel, co tu roky zpět bylo nastaveno. Dokud se tu pohybovali aktivnější moderátoři, bylo i dodržováno, ale poslední 4 roky, to strašně upadá. Mně osobně to často odrazuje odpovídat, dokonce to byl na dost dlouhou dobu důvod, proč jsem si od diskuse dal pauzu. Nebudu na nikoho přímo ukazovat prsty, ale prosím jednejte s ostatními slušně.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0