Pomoc s routováním ve tvaru : lorem.cz/nazev-vlastni-stranky-z-databaze

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
docky
Člen | 59
+
0
-

Zdravím,
potřeboval bych pomoct s routovaním, mám tohle :

<?php
public static function createRouter() {

        $router = new RouteList();
        $router[] = $aRouter = new RouteList('Admin');
        $aRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');

        $router[] = $fRouter = new RouteList('Front');
        $fRouter[] = new Route('s[/<name>]', array(
            'presenter' => 'Pages',
            'action' => 'page',
            'name' => array(
                    Route::FILTER_IN => function($url) {
                        return \Nette\Utils\Strings::webalize($url);
                    },
                    Route::FILTER_OUT => function($url) {
                        return \Nette\Utils\Strings::webalize($url);
                    }
                )
            ));
        $fRouter[] = new Route('<presenter>/<action>[/<id [0-9]+>]', 'Homepage:default');

        return $router;
    }
?>

Mám v administraci zakládání vlastních stránek, a potřeboval bych, aby se vlastní stránka zobrazila například takhle : lorem.cz/nazev-vlastni-stranky-z-databaze
Zatím jsem to udělal takhle : lorem.cz/s/nazev-vlastni-stranky-z-databaze, jenže to mi nepříjde moc pěkné. Doufám že to nějak půjde. Děkuji za pomoc

Šaman
Člen | 2666
+
0
-

Zkus, jestli ti něco neporadí tady. Sice starši přednáška, ale routovánim z databáze se zabývá.
https://vimeo.com/…sob/35978077

A jestli ti jde jen o to zrušit ono /s, tak by mělo stačit jej smazat v definici routy a nechat jen parametr name, ne?

Editoval Šaman (6. 12. 2015 17:05)

docky
Člen | 59
+
0
-

to jsem zkousel, jenže pak nejdou klasicky presentery

mrtnzlml
Člen | 140
+
0
-

Můžeš se inspirovat třeba zde resp. zde. Rozhodně to není ukázka perfektního řešení, ale když jsem to psal, tak jsem řešil spíš funkčnost… :)

Přijde mi divné, to jak máš FILTER_IN a FILTER_OUT stejné.

Šaman
Člen | 2666
+
0
-

docky napsal(a):

to jsem zkousel, jenže pak nejdou klasicky presentery

No, musíš si sám nejprve nějak rozlišit, co půjde za touhle routou a co za presentery.
lorem.cz/pokus – má to být článek pokus z databáze, nebo Pokus:default?
Myslím, že nebudeš moci mít definovanou defaultní routu. když stanovíš pravidlo, že jeden parametr => tenhle router a dva [až tři] parametry jdou za <presenter>/<action>[/<id>], tak by to mělo fungovat. Případně si pohraj s pořadím rout. Ale připadá mi, že takto definované by měly být nezávislé, ale možná si zkus tu s více parametry (a žádnou defaultní routou, takže se nebude zkracovat!) dát před tu tvoji.

docky
Člen | 59
+
0
-
<?php
public static function createRouter() {

        $router = new RouteList();
        $router[] = $aRouter = new RouteList('Admin');
        $aRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');

        $router[] = $fRouter = new RouteList('Front');
        $fRouter[] = new Route('<name>', array(
            'presenter' => 'Pages',
            'action' => 'page',
            'name' => array(
                    Route::FILTER_IN => function($url) {
                        return \Nette\Utils\Strings::webalize($url);
                    },
                    Route::FILTER_OUT => function($url) {
                        return \Nette\Utils\Strings::webalize($url);
                    }
                )
            ));
        $fRouter[] = new Route('<presenter>/<action>[/<id [0-9]+>]', 'Homepage:default');

        return $router;
    }
?>

už mi to jde, díky :) zmenil jsem s[/<name>] na <name>