Nefunkčnost menu generovaného presenterem

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

Zdravím, při tvorbě menu jsem narazil na „divné“ chování, které mi není jasné. Moje menu není schopné vytvořit funkční odkazy. Pokud však odkaz přesunu copy-paste co šablon, funguje to. Poradíte mi, kde je chyba?

Router:

$router = $container->router;

if (isset($_SERVER['NETTE_HTACCESS'])) { // FastCGI
    $router[] = new Route('index.php', 'Homepage:show', Route::ONE_WAY);
    $router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:show');
}
else {
    $router[] = new SimpleRouter('Homepage:show');
}

Generování menu v presenteru:

public function assemblyMenu() {

    $menuItems = array(
        "Frontend" => "Homepage:show",
        "Nástěnka" => "Admin:dashboard",
        "Import" => "ImportDat:Import 74",
        "Sign out" => "Sign:out",
    );
    $this->template->menuItems = $menuItems;
}

public function beforeRender() {
    $this->assemblyMenu();
}

Vypsání menu v šabloně. Odkaz na „ImportDat:Import 74“ nefunguje.
Hlásí chybu „error: No route for ImportDat:Import 74()“

<ul n:inner-foreach="$menuItems as $item => $link" id="menu">
	<li><a {ifCurrent $link}class="current"{/ifCurrent} n:href="{$link}">{$item}</a></li>
</ul>

Pokud v té samé šabloně použiji následující kód, odkaz se v pořádku vytvoří a ukazuje tam, kam má:

<a n:href="ImportDat:Import 74">Import</a>

Poradíte mi prosím, kde dělám chybu?

Editoval thunderbuff (17. 2. 2012 9:50)

zatomik
Člen | 19
+
0
-

Obávám se, že takto to nepůjde. Myslím, že n:href zpracovává ty proměnné trochu jinak, než si myslíš, protože jde například napsat toto: „Product:show (expand) $args“ nebo „Product:show $productId“, takže to tu proměnou pouze nevypíše, ale vezme si jako argument, tohle ti asi vysvětlí nějaký Nette guru.

Nicméně možné řešení vypadá takto:
V presenteru si definuj pole rozdělené na dvě části obsahující Presenter:action a argumenty:

<?php
$menuItems = array(
        "Frontend" => array ("Homepage:show"),
        "Nástěnka" => array ("Admin:dashboard"),
        "Import" => array ("ImportDat:Import",array ('id'=>74)),
        "Sign out" => array ("Sign:out"),
    );
?>

a v šabloně pak použij toto:

<?php
<li><a {ifCurrent $link}class="current"{/ifCurrent} n:href="$link[0] (expand)$link[1]">{$item}</a></li>
?>

Je to jen nástřel, můžeš to ještě vylepšit, aby jsi tam nepoužíval pouze nicneříkající indexy.