Ako na dynamicke url a routovanie
- mrako
- Člen | 3
Zdravim,
som zaciatocnik (uplny) s Nette a nerozumiem ako spravit aby som si napriklad ak mam URL:
example.com/item-I/
example.com/item-II/
example.com/item-III/
nechcelo vytvarat vzdy novy presenter a novy template, ale aby to priamo bralo s BasePresenteru, pretoze item-I, je vlastne premenna, podla ktorej vyberam z DB, vlastne taka kategoria.
teraz ma v bootstrap.php route z niektoreho prikladu:
<?php
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
?>
Pokial si dam example.com/item-I , tak mi to krici:
Cannot load presenter ‚Item-I‘, class ‚Item-IPresenter‘. Pokial vytvorim
novy presenter v zlozke Presenters a novy Template v zlozke v Templates, tak
to funguje, najcita kod odtial. Ale ono to tak nema fungovat, nemozem vytvarat
stale nove a nove, ked sa mi tie Item-? budu vytvarat dynamicky a z DB. Asi mi
nieco uslo a nepochopil som ako na to.
Inak cim viac tutorialov a navodov, tym lepsie…
diky za pomoc…
- Mesiah
- Člen | 240
Musíš je vytvářet, protože máš tak napsané routovací pravidlo.
'<presenter>/<action>/<id> je tzv. maska, která říká: to
co příjde v url, rozsekej a postupně aplikuj: presenter pak action a pak
id.
Pokud to chceš tahat z db, tak na foru se to řešilo třebas tady:
https://forum.nette.org/…pe-routovani?…
https://forum.nette.org/…ovnove-routy?…
snad jsem ti pomohl…
- Panda
- Člen | 569
Začni něčím jednodušším, ona routa, která bude matchovat jen na základě existence záznamu v databázi, není zas tak triviální.
Přidej si před onu proměnnou nějaký prefix, například
clanek/
– pak zajistíš, že se na daný presenter přesměruje
jen požadavek, který začíná na řetězec clanek/
. Pokud by tam
nebyl, tak se routa vybere vždy a to, že položka neexistuje, zjistíš až
v cílovém presenteru. A to už je pozdě, nefungovala by Ti pak už žádná
jiná routa.
$router[] = new Route('clanek/<slug>', array(
'presenter' => 'Article',
'action' => 'default'
));
class ArticlePresenter extends BasePresenter
{
public function renderDefault($slug)
{
$article = ... // výběr z databáze podle slugu
if (!$article) {
$this->setView('notFound');
} else {
$this->template->article = $article;
}
}
}
Až Ti to všechno bude fungovat, tak koukni na odkazy v tomto příspěvku: https://forum.nette.org/…iewtopic.php?…
- mrako
- Člen | 3
tak pravdu povediac, naozaj som cakal nieco ine, nieco viac automaticke, hlavne, ked nieco sa dynamicky taha hlavne z DB.
Asi by to chcelo nejaky tutorial, kde by to bolo ukazane odzaciatku… alebo som skor nepochopil cely system „route“ alebo som uplne „blby“ (co bude asik najblizsie) :)
- Mesiah
- Člen | 240
Routy jsou těžké téma samo o sobě. Aji pan Grudl to přiznává.
Každopádně nevěš hlavu, všechno chce čas. Taky bych byl pro nějaký
tutorial, nebo pořádný text, co je projde od začátku do konce.
Jinak si člověk přečte dokomentaci, koukne na screencasty a pak ještě
procházet forum aby pochopil základy, u kterých stejně dojde k závěru:
aha, tak tohle funguje takto, ale proč nemám tušení… (viz ´#´
u stylu rout)