Routování – kategorie, články

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Kakaku
Člen | 27
+
0
-

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
+
0
-

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)