Generování odkazů v komponentě

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

Zdravím, mám problém s generováním odkazů v komponentě, pokud chci odkazovat do jiného presenteru.

Mám base presenter, ve kterém je děděná továrnička:

public function createComponentForum($id, $a = 0){
    $c = new frontendModule\ForumComponent($a);
    $this['forum'] = $c;
    return $c;
}

Komponenta si poté načte vlastní šablonu a vykreslí se. Když pak ale chci v šabloně použít

{foreach $topics as $topic}
{link forum: $topic}
{/foreach}

dostanu chybovou hlášku „Component with name ‚forum‘ does not exist.“ Když vynechám dvojtečku na konci, tak mi link vygeneruje jen crosshash (#). Musí se komponenta připojit do prezenteru ještě někde jinde krom továrničky?

Aurielle
Člen | 1281
+
0
-

Používáš továrničky nesprávně. Továřnička příjmá jediný parametr $name, který je v tvém případě roven ‚forum‘. Obsah metody by měl správně vypadat takto:

protected function createComponentForum()
{
	$c = new fronendModule\ForumComponent();
	// tady někde si získáš a doplníš $a
	return $c;
}
Buri
Člen | 15
+
0
-

I když jsem továrničku přepsal, problém to neřeší. Komponenta se stále snaží generovat odkaz na komponentu místo na presenter. :/

Buri
Člen | 15
+
0
-

Tak problém jsem nakonec vyřešil přepsáním fce link do komponenty:

public function link($target, $args = array()){
     return $this->getPresenter()->link($target, $args);
}

Editoval Buri (24. 12. 2011 14:41)

Aurielle
Člen | 1281
+
0
-

Latte má dvě makra pro zpracovávání odkazů – link ukazuje na daný presenter či komponentu, plink ukazuje vždy na presenter. Pokud jsi chtěl linkovat na presenter, měl jsi použít plink ;-)