Autor Zpráva
noName
Profil *
Zdravím,

na stránkách bych chtěl mít url ve tvaru /novinky a detail novinky /<id>-<name> a pak třeba /produkty a detail produktu /<id>-<product>. Problém nastává v tom, že pokud nedám před ten detail třeba produkt/<id>-<product> tak se mi routa pro novinky a pro produkty bije a neví, kterou má použít. Jakým způsobem se to dá řešit? Díky.
tiso
Profil
Jedna možnosť je upraviť routy aby sa nebili, napríklad /n<id>-<name>, /p<id>-<product>. Rozhodni sa ktorá je pre teba dôležitá zachovať a ktorú zmeníš.
aDAm
Profil
Tak to že se ti routy bijou je snad logické ne? Chceš pro dvě stránky identickou routu. Řešením je že tam budeš mít vlastní pravidlo co prohledá databázi a zjistí zda chceš zobrazit novinku nebo produkt a podle toho nastaví presenter atd.
Jan Tvrdík
Profil
noName:
Celé by to mohlo vypadat třeba takto:
$router[] = new Route('<presenter [a-z]+>', [
    'presenter' => [
        Route::FILTER_TABLE => [
            'produkty' => 'Products',
            'novinky' => 'News',
        ],
        Route::FILTER_STRICT => TRUE,
    ],
    'action' => 'default',
]);

$router[] = new Route('n<id \d+>-<slug>', 'News:show');
$router[] = new Route('p<id \d+>-<slug>', 'Products:show');
tiso
Profil
Jan Tvrdík: ďakujem. Myslel som si že to ide, ale nevedel som ako.
aDAm
Profil
a není už "hezčí" do té url hodit célé "news" a "products"? což bude přímo presenter?
noName
Profil *
Jan Tvrdík:
Díky za odpověď. Teď jsem se k tomu dostal a asi jsem to špatně vysvětlil. Já bych potřeboval mít jen url ve tvaru /<product_name> nebo třeba /<news_name> takže by pak url vlastně vypadaly takto: odkaz.cz/nazev-novinky a u produktu odkaz.cz/produkt-a. Problém je v tom, že router prochází routy postupně jak je tam zapíšu. Takže když budu mít:

... Route('produkty', 'Products:default'); //výpis všech produktů
... Route('novinky', 'News:default'); //výpis všech novinek
... Route('<product_name>', 'Products:detail'); //vypíše detail produktu
... Route('<news_name>', 'News:detail'); //vypíše detail produktu

Takto to však nebude fungovat, protože když dám odkaz.cz/product a odkaz.cz/novinka tak to spadne do routy Route('<product_name>', 'Products:detail');. Nevím však jak to vyřešit aby se poznalo, kterou stránku má zobrazit. Díky.
aDAm
Profil
Což je snad logické ne? Je nějaký podstatný důvod to takto nešikovně řešit?
Jan Tvrdík
Profil
noName:
Viz github.com/JanTvrdik/NetteCustomRouterExample/blob/master/app/router/CustomRouter.php
noName
Profil *
Jan Tvrdík:
Promiň, že píšu tak pozdě, ale dostal jsem se k tomu až teď. Děkuji, je to přesně co jsem potřeboval. Podobně jsem to chtěl udělat, ale měl jsem strach, aby to nebylo moc pomalé. Máš s tím zkušenost při velkém množství dat? Ještě bych potřeboval poradit, jak vyřešit problém s handlery a formulářemi. Když se pokusím použít třeba handler <a n:href="delete!, 'id' => 5">Delete</a> tak mi to vypíše: No route for Front:News:detail(id=5, slug=novinka, do=delete). To samé při odeslání formuláře. Mohl by jsi mi prosím poradit jak to vyřešit? Díky.
Jakubb
Profil *
Ahoj,

řeším stejnou věc. Nevíte někdo, jakým způsobem odesílat formuláře, aby s handlery nebyl problém?

Díky moc,
Jakub
Jan Tvrdík
Profil
noName:
Máš špatně napsaný router, těžko říct, kde je chyba, když jsi sem nedal zdroják.

Jakubb:
To samé, nehledej chybu ve formulářích, ale v routerech.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: