Nefunkčnost menu generovaného presenterem
- thunderbuff
- Člen | 164
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
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.