Routování zanořených kategorií
- vanaveno
- Člen | 144
Ahojte,
konečně dokončuji svůj první větší projekt v Nette (:-;. Řeším
právě routování zanořených subkategorií. Tomu routování jsem ještě
dostatečně neporozuměl. Zatím jsem si vystačil s návodem, který jsem
našel na youtube od Jana Smitka.
Potřeboval bych prosím poradit jak na zanořené subkategorie v url.
Například
nejakadomena.xx/elektronika/projektory
Zatím dokáži jen tohle
nejakadomena.xx/tag/elektronika/ když kliknu na podkategorii Projektory dostanu
tohle nejakadomena.xx/tag/projektory/
<?php
$router[] = $tagRoute = new RouteList();
$productRoute[] = new TagRoute('tag/<tagId>', array(
'module' => 'Front',
'presenter' => 'Product',
'action' => 'producTag',
'tagId' => array(
Route::FILTER_IN => function ($tagId) {
if (is_numeric($tagId)) {
return $tagId;
} else {
$tag = $this->tagManager->getTags()->where('tagalias', $tagId)->fetch();
return $tag->tagId;
}
},
Route::FILTER_OUT => function ($tagId) {
if (!is_numeric($tagId)) {
return $tagId;
} else {
$tag = $this->tagManager->getTags()->where('tagId', $tagId)->fetch();
return $tag->tagalias;
}
}),
));
?>
To samé pořebuji i u detailu produkt
zatím dokáži tohle
nejakadomena.xx/detail/nazev-produktu
<?php
$router[] = $productRoute = new RouteList();
$productRoute[] = new ProductRoute('detail/<productId>', array(
'module' => 'Front',
'presenter' => 'Product',
'action' => 'detail',
'productId' => array(
Route::FILTER_IN => function ($productId) {
if (is_numeric($productId)) {
return $productId;
} else {
return $this->productManager->getProducts()->where('slug = ?', $productId)->fetch()->productId;
}
},
Route::FILTER_OUT => function ($productId) {
if (!is_numeric($productId)) {
return $productId;
} else {
return $this->productManager->getProducts()->get($productId)->slug;
}
}),
));
?>
potřeboval bych spíše tohle
nejakadomena.xx/elektronika/projektory/nazev-produktu.
Jak na to? Přemýšlel jsem, že bych ty tagy spojil elektronika/projektory a
nějak vložil do routy
<?php
$router[] = $productRoute = new RouteList();
$productRoute[] = new ProductRoute('<path>/detail/<productId>', array(
'module' => 'Front',
'presenter' => 'Product',
'action' => 'detail',
'path' => array(
Route::FILTER_OUT => function ($productId) {
....
}
),
'productId' => array(....
?>
Editoval vanaveno (5. 11. 2020 10:35)
- David Matějka
- Moderator | 6445
ahoj, mozna ti pomuze globalni filtr, tam dostanes pole vsech parametru – vcetne productId a muzes zkonstruovat path.
Jen si u toho dej pozor na vykon, aby router nepokladal moc dotazu
obecne je nejlepsi se na hierarchicke routy vykaslat :)
- vanaveno
- Člen | 144
nejlepsi se na hierarchicke routy vykaslat :) Díky Davide, to jsem potřeboval poradit, ještě se mám hooodně co učit
David Matějka napsal(a):
ahoj, mozna ti pomuze globalni filtr, tam dostanes pole vsech parametru – vcetne productId a muzes zkonstruovat path.
Jen si u toho dej pozor na vykon, aby router nepokladal moc dotazu
obecne je nejlepsi se na hierarchicke routy vykaslat :)
Editoval vanaveno (5. 11. 2020 11:29)