Routování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
radvis
Začátečník | 110
+
0
-

Ahoj,

potřeboval bych mít url ve tvaru „http://domena.cz/clany/nazev-clanu“ stím, že název clanu by z databáze vytáhl daný clan (jako kdyby to bylo id).

Díky.

Jan Tvrdík
Nette guru | 2595
+
0
-

Možností je více a v zásadě se liší tím, jak budeš chtít generovat odkaz. Buď ho můžeš generovat jako {plink Clany, $id}, kde $id je číslené ID clanu nebo jako {plink Clany, $nameId}, kde $nameId je např. nazev-clanu.

První varianta

Druhá varianta

$router[] = new Route('clany/<nameId>', array(
       'presenter' => 'Clany',
       'action' => 'default',
));

Editoval Jan Tvrdík (26. 10. 2009 22:33)

radvis
Začátečník | 110
+
0
-

To bych, ale musel u každé routy mít:

Route::addStyle('#newsId');
Route::setStyleProperty('#newsId', Route::FILTER_IN, 'getId');
Route::setStyleProperty('#newsId', Route::FILTER_OUT, 'getPath');

Není jiný způsob? Jestli ano nemáš link na tut? Díky.

Jan Tvrdík
Nette guru | 2595
+
0
-

A v čem je problém? Ty filtry pouze popisují tebou chtěné chování bez nutnosti tvořit si vlastní router.

Dokumentace ke třídě Nette\Application\Route.

radvis
Začátečník | 110
+
0
-

Je tam „napevno“ dané newsId, co když budu potřebovat to samé, ale např s clanama? Musel bych vytvořit další filtry které budou pospány s clanId. Nebo jsem to špatně pochopil?

Jan Tvrdík
Nette guru | 2595
+
0
-

Ano, přesně tak. Protože u clanů budeš chtít jiné cílové chování, takže musíš pro ně definovat další router s jinými filtry.

radvis
Začátečník | 110
+
0
-

Díky. Snad už se mi to podle tutoriálu povede rozchodit;).