Nefungující odkaz v komponentě
- wassy
- Člen | 46
Dobrý den,
mám komponentu která generuje navigační tlačítka do administrace, ovšem
když chci generovat odkaz i s ID tak nette hlásí chybu error: No route for
Admin:presenter:action id() … control pro komponentu posílá odkazy v poli
typ_odkazu ⇒ odkaz a šablona to pak vykresluje pomocí makra plink…
control:
class NavigationControl extends Control
{
public function render($data = NULL)
{
$template = $this->template;
$template->setFile(__DIR__ . '/templates/navigationControl.latte');
$urls = array('view' => ':'.$this->presenter->name.':');
if($this->presenter->parameters['id']){
$urls['preview'] = ':admin:technologies:preview '.$this->presenter->params['id'];
}
$template->urls = $urls;
$template->translate = array('add' => 'Přidat', 'view' => 'Přehled', 'preview' => 'Náhled');
$template->navigationData = $data;
$template->render();
}
}
a šablona:
<div class="navigation clearfix">
{foreach $navigationData as $item}
{var $link = (array_key_exists($item, $urls)) ? $urls[$item] : $item}
<a {if $item == 'preview'}target="_blank"{/if} class="block left" id="{$item}" href="{plink $link}"><div class="icon"></div><span class="title">{$translate[$item]}</span></a>
{/foreach}
</div>
dodávám ještě routerfactory pro jistotu:
public function createRouter()
{
$router = new RouteList();
$router[] = $admin = new RouteList('Admin');
$admin[] = new Route('admin/<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
děkuji za jakékoli rady
- David Kudera
- Člen | 455
@Tirus91 to by mělo být jedno. Pokud by nebyl presenter dostupný, což v render metodě už je, tak by mu to vyhodilo exception. To getPresenter nebo jen presenter stejně volá obecnou metodu lookup s názvem třídy, která se má ve stromu komponent směrem nahoru dohledat
- David Kudera
- Člen | 455
Ehm, když už v renderu stejně přistupuješ k presenteru, tak co ty url
vytvořit už tam rovnou pomocí
$this->presenter->link('...');
?
Stejně když tam někdy budou parametry, tak si nemyslím, že by to pak latte
přeložilo. Myslím tím tohle:
$urls['preview'] = ':admin:technologies:preview '.$this->presenter->params['id'];