Co najjednoduchsie tvary URL adries pre routovanie

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

Zdravim vas.

Snazim sa prerobit cely system ktory mam postaveny na Nette a preto by som uz rad vycistil aj routovanie a trochu ho sprehladnil.
Chcel by som v nom „cisto“ poriesit preklad statickych rout (napr. /prihlasenie, /kontakt a pod.) a tiez vyriesit dilemu, ako sa dostat k tej spravnej route, ktora bude generovat aj pre clanky, aj pre kategorie clankov, aj pre produkty, kategorie produktov atd. atd. jeden najjednoduchsi tvar, napr.:
/titulok-clanku
/nazov-kategorie-clanku
/nazov-produktu
/nazov-kategorie-produktov

Vsetky tieto aliasy ukladam do samostatnych databazovych tabuliek (clanky, kategorie, produkty, atd.), kde kazdy clanok, kategoria atd. ma vygenerovany jedinecny alias.
No kedze pouzivame Nette a mame presentre, tak potrebujem aby router vedel najst alias z tychto 4–5 tabuliek a podla toho z ktorej tabulky vrati vysledok (napr. z tabulky produktov), aby vedel ze to je ProductPresenter a action showProduct, s aliasom „nazov-produktu“ (pripadne s ID produktu).

Ako toto rozumne vytvorit?

Este k tej prvej teme statickych rout. Teraz mam nieco take:

$router[] = new Route(_('kontakt'), array(
				'lang' => $translator->getDefault(),
				'presenter' => 'Contact',
				'action' => 'default',
			));

			$router[] = new Route(_('prihlasenie'), array(
				'lang' => $translator->getDefault(),
				'presenter' => 'User',
				'action' => 'login',
				'id' => null
			));

			$router[] = new Route(_('registracia'), array(
				'lang' => $translator->getDefault(),
				'presenter' => 'User',
				'action' => 'registration',
				'id' => null
			));

			$router[] = new Route(_('nastavenia-uctu'), array(
				'lang' => $translator->getDefault(),
				'presenter' => 'User',
				'action' => 'profile',
				'id' => null
			));

			$router[] = new Route(_('odhlasenie'), array(
				'lang' => $translator->getDefault(),
				'presenter' => 'User',
				'action' => 'logout',
				'id' => null
			));

Absolutne sa mi to nepaci ze pre kazdu routu vytvaram novy objekt. Nieje to mozne nejak definovat pomocou pola?
Napr.:

array(_('prihlasenie') => array('presenter' => 'User', 'action' => 'login', 'id' => NULL),
	_('profil') => array('presenter' => 'User', 'action' => 'profile', 'id' => NULL),
	atd...)

Editoval tolljump (29. 8. 2014 18:23)

tolljump
Člen | 47
+
+1
-

Ziadny napad?

Skusim to napisat jednoduchsie a opisat len jednu situaciu…
Ako spravit taky router, ktoremu predam ako parameter len <alias>, cize www.adresa.sk/moj-alias a podla databazovej tabulky by som si nasiel zaznam s tymto aliasom, kde by som mal nastaveny presenter, action, id, pripadne dalsie ine parametre. Tieto parametre by som poslal routru a on by ma uz „hodil“ na tu spravnu stranku. Cize nechcem mat „natvrdo“ v routach zadane jednotlive typy adries, ale kombinovat to z databazy.

Tirus91
Člen | 199
+
+1
-

přidávám se k otázce. taktéž by mne to zajímalo

tolljump
Člen | 47
+
0
-

Ja som hladal trochu hlbsie na fore a dosiel som k nazvu: SimpleSeoRouter – vyhladavanie na fore

Ak mate niekto nejake kompletne a funkcne riesenie pre Nette 2.2, ktore bude riesit aj nejaku cache toho vytvarania URL adries (aby mi to nevytvaralo stovky dotazov do databazy), tak nam prosim dajte vediet, alebo aspon „nakopnite“.

Dikyy

mkoubik
Člen | 728
+
+1
-

Zkusil bych něco jako

$router[] = new Route('<slug .+>', array(
	null => Route::FILTER_IN => function($params) {
		// nacist z databaze podle $params['slug'];
		if (nenalezeno) {
			return null;
		}
		unset($params['slug']);
		$params['module'] = '...';
		$params['presenter'] = '...';
		$params['action'] = '...';
		$params['id'] = '...';
		$params['...'] = '...';
		return $params;
	},
	null => Route::FILTER_OUT => function($params) {
		// nacist $slug z db prodle $params['module'], $params['presenter'], $params['action'], ...
		if (nenalezeno) {
			return null;
		}
		unset($params['module'], $params['presenter'], ...);
		$params['slug'] = $slug;
		return $params;
	},
));

Editoval mkoubik (9. 9. 2014 10:57)