Routování – kategorie, články
- Kakaku
- Člen | 27
Zdravím,
potřebuju pomoci s routováním. Někde na fóru jsem viděl podobné
řešení tak měsíc zpět, ale nemohu to nikde najít :(
Jde mi o to, že potřebuji mít následující routy:
domena.cz → hlavní stránka (bez problému)
domena.cz/kategorie → odkáže na konkrétní kategorii (napadá mě, že po
vstoupení na stránku se zavolá funkce která zkoukne v databázi seznam
kategorií a pokud vyhovuje, přesměruje na danou kategorii. Pokud ne,
přesměruje na hl. stránku. Ale jak toto realizovat?
domena.cz/kategorie/clanek-s-obsahem → Odkáže na konkrétní článek, zde
opět nevím jak realizovat tak, aby zároveň nešla jen tak libovolně změnit
kategorie (př. domena.cz/auta/bmw-recenze-x5 ALE
domena.cz/zvirata/bmw-recenze-x5 aby NEŠLO.)
Děkuji za jakékoli nakopnutí :)
- GEpic
- Člen | 566
Mrkni na můj router z jednoho projektu, třeba tě to napadne:
public static function createRouter()
{
$router = new RouteList;
$router[] = new Route('nabidka-domu', 'House:default');
$router[] = new Route('dum/<id>', "House:render");
$router[] = new Route('aktuality', 'Article:default');
$router[] = new Route('admin/<action>', 'Admin:default');
$router[] = new Route('<slug>', 'Page:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
Když zadám domena.cz/nabidka-domu … automaticky House:default
Když zadám domena.cz/dum/aneta … automaticky House:render s ID = aneta
(ano, tady je to ID matoucí)
Když zadám domena.cz/tak-to-je-mazec dostanu parametr $slug
v Page:default
PS:
Byl to projekt na míru, proto není router abstraktní
Takže u tebe tuším:
$router[] = new Route('<cat>', 'Category:default');
$router[] = new Route('<cat>/<art>', 'Article:default');
# v article presenteru:
public function renderDefault($cat, $art)
{
/** @var ActiveRow $art */
$art = $this->database->table('articles')->get($art);
if ($art && $art->category == $cat) {
# Its okey
} else {
# Redirect jinam, protože buďto neexistuje článek, nebo nesedí kategorie
}
}
Editoval GEpic (5. 7. 2016 19:04)