Routování zanořených kategorií

vanaveno
Člen | 144
+
0
-

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
+
+2
-

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
+
0
-

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)