Číslo v začátku názvu presenteru – nevytvoří se link
- kokoumes
- Člen | 39
Zdravím,
chtěl jsem se zeptat odborníků na nette jak je to s čísly v názvu
presenterů?
Potřebuji udělat adresu „…cz/3-neco/“, ale narazil jsem na problém, že pokud presenter začíná číslem nevygeneruje se mi adresa. Zkoušel jsem to i přes překlad rout a nastal ten samý problém.
Proto jsem se chtěl zeptat jestli už někdo něco takového řešil, nebo jak by se to řešit dalo.
Předem díky za odpověď.
- Martin
- Člen | 171
Není to sice asi úplně to, co jsi chtěl, ale třeba to pomůže:
$router[] = new Route('<id>-[!<presenter>]/[!<action>]', 'Homepage:default');
Myslím, že ale naopak to může být právě to, co potřebuješ, je-li pro Tebe to číslo tak důležité. Dostaneš ho pak jako parametr. Samozřejmě si to pak ale musíš spárovat.
Teď třeba zrovna dělám jednoduché CMS, kde je kompletní strom stránek v databázi, ale některé z nich se editor může rozhodnout nasměrovat k zobrazení konkrétního presenteru a akce místo obsahu z DB (třeba ..tady chci mít chat.. ..a tady vyhledávání..). Takže pak ta stránka v DB, identifikovaná jednoznačným ID, vyjadřuje jen umístění ve stromu (a v menu aplikace). Pro tento případ přidávám na začátku bootstrap.php (používám ale dvojici id+slug, kdyby to bylo id-presenter/action, vypadalo by to malinko jinak):
Model::init(Environment::getConfig()->database);
$URLs = Model::getURLs();//Vrátí jen ty stránky, které místo obsahu zobrazují Presenter[/Akce]
foreach ($URLs as $URL) {
$rtIDSlug = $URL->id.'-'.$URL->slug;
$rtPresenter = $URL->presenter;
$rtAction = $URL->action;
if ($rtAction == '') {
$rtAction = 'default';
}
Debug::barDump(array($rtIDSlug => $rtPresenter.':'.$rtAction));
$router[] = new Route($rtIDSlug, array(
'presenter' => $rtPresenter,
'action' => $rtAction,
'idslug' => $rtIDSlug,
));
//a abych je mohl odkazovat i bez ID, třeba nějaký rychlým odkazem z šablony (ten nemůže vést na Presenter/action, neb jest vše editovatelné za běhu):
$router[] = new Route($URL->slug, array(
'presenter' => $rtPresenter,
'action' => $rtAction,
'idslug' => $rtIDSlug,
));
}
Můžeš to mít podobně, ale to číslo nemusíš tahat z databáze, pokud ho nechceš dynamicky přidělovat, stačí ho mít třeba jako atribut příslušného Presenteru (přístupný přes metodu BasePresenteru) a v routě si přiřadit dvojici ID-Presenter.
Třeba se Ti ale nakonec přecijen ozve někdo, kdo v Nette dělá déle a poradí nějaké jednoduché a správné řešení. To už jsem tady zjistil – snaha pomoci je. Ale žadatelů o pomoc je hodně a mistři Nette mají i jiné věci na práci. Pokud chceš rychlou a kvalitní odpověď od někoho z nich, je lepší mít ve vláknu nejdříve nějakou úplně špatnou radu, která je uhodí do očí – pak se někdo brzy objeví s kvalitní opravou.
Editoval Martin (30. 4. 2011 11:21)