Helper plink generuje špatně URL
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Filip Procházka
 - Moderator | 4668
 
Můj bože co to je za úchylárnu :D jestli chceš poradit ukaž definici rout a napiš jaké odkazy to generuje, obrázky jsou na 2 věci

- whipster
 - Člen | 17
 
Bootstrap:
<?php
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
PagePresenter::createRoutes($router);
$router[] = $adminRouter = new \Nette\Application\MultiRouter('Admin');
$adminRouter[] = new Route('admin/[<lang [a-z]{2}>/]<presenter>/<action>[/<id>]',array("presenter"=>"Default", "action"=>"default","lang"=>  Environment::getVariable("lang")));
$router[] = new Route('[<lang [a-z]{2}>/]<presenter>/<action>[/<id>]', array("presenter"=>"Homepage","action"=>"default","lang"=>  Environment::getVariable("lang")));
/* pagePresenter ... */
public static function createRoutes($router){
        foreach (dibi::query("SELECT * FROM pages WHERE status=%s",self::STATUS_ACTIVE) as $page) {
            $router[] = new \Nette\Application\Route('[<lang [a-z]{2}>/]'.$page->url,
                    array( "presenter"=>"Page","action"=>"default","lang"=> $page->lang ? $page->lang :Environment::getVariable("lang"), "url"=>$page->url, "id"=>$page->id));
        }
        $router[] = new \Nette\Application\Route('[<lang [a-z]{2}>/]page/<action>[/<id>]', array("presenter"=>"Page","action"=>"default","lang"=>  Environment::getVariable("lang")));
    }
?>
				
- whipster
 - Člen | 17
 
Samozrejme chapu k cemu jsou routy.
mozna nevim jak udelat lepe routy pro stranky ktere nemaji presentery, ale jsou
definovany v databazi.
ale cekal bych neco konstruktivnejsiho nez ze „nevim k cemu jsou
routy“
I kdyz jsem mozna zvolil spatny navrh, i tak by to melo fungovat ne?
dekuji za konstruktivnejso odezvu

- Ondřej Mirtes
 - Člen | 1536
 
$router[] = new Route('<id>[/<action>]', array(
	'lang' => 'cs',
	'presenter' =>'Article',
	'id' => array(
		Route::FILTER_IN => array($articleService, 'getIdBySlug'),
		Route::FILTER_OUT => array($articleService, 'getSlugById'),
	),
	'action' => 'default',
));
				
- Aurielle
 - Člen | 1281
 
$router[] = new Route('[<lang ...>/]<url .*?>', array(
	'presenter' => '...'
	'action' => '...',
	'lang' => '...',
	'url' => array(
		Route::FILTER_IN => function($value) { /* funkce filtrující přicházející argumenty třeba proti databázi, pokud neexistuje vrátí se NULL */ },
		Route::FILTER_OUT => function($value) { /* to samé, jen pro generování odkazů */ },
		Route::VALUE => 'default hodnota, nepovinná',
	),
));
Filtry se dají použít třeba i na převádění URL na interní ID a zpět.

- whipster
 - Člen | 17
 
Děkuji za nasměrování
Nahradil jsem konstrukci routy, ale stejně to generuje nesmyslné URL :(
<?php
 $router[] = new Route('[<lang [a-z]{2}>/]<page .*?>', array(
                'presenter' => 'Page',
                'action' => 'default',
                'lang' => Environment::getVariable("lang"),
                'page' => array(
                    Route::FILTER_IN => function($value) {
                        $page = dibi::fetchSingle("SELECT id FROM pages WHERE %and",array("url"=>$value,"status"=>  Pages::STATUS_ACTIVE));
                        if ( $page) return $page;
                    },
                    Route::FILTER_OUT => function($value) {
                        $page = dibi::fetchSingle("SELECT url FROM pages WHERE id=%i",$value);
                        if ($page) { return $page; }
                    },
                    //Route::VALUE => 'defaultValue',
                ),
        ));
?>
ale bez výsledku :(
<?php
{plink this} v šabloně vrací "/testApp/document_root/page/"
?>