link uvnitř komponenty – problém s předáním parametrů

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

mám v aplikaci komponentu BookList, starající se o výpis dat z DB do tabulky. Součástí šablony je odkaz pro stažení souboru. Nabídnutí ke stažení nabízí funkce Download ve tříde komponenty.

Nicméně použiji-li funkci link, funkce neobdrží žádné argumenty.

V souboru BookList.php mám funkci:

<script>
public function handleDownload($id,$name){
	echo $id.$name;
	die();
  }
</script>

v šabloně template.php se pak odkazuji:

<script>
{$component->link('download!',array('name'=$item->name,'id'=>$item->id))}
</script>

($item->name a $item->id obsahují text a číslo, tam chyba není). Poradíte mi někdo prosím, kde je v mém přístupu chyba, nebo proč se komponentě proměnné nepředají?

redhead
Člen | 1313
+
0
-

Jenom vidím chybu v chybějícím znaku > za ‚name‘=

btw: proč nepoužíváš konstrukci:

{link download! name => $item->name, id => $item->id}

??

joska
Člen | 20
+
0
-

znak > byl jen překlep, a děkuji za zkrácený zápis, nepoužíval jsem ho, protože jsem nejspíš udělal chybu a odkazoval se na presenter, odkud je komponenta volána, namísto na třídu komponenty. Nicméně ani zkrácený zápis nic neřeší. Když si ve funkci Download zavolám func_get_args(), nic mi nevrátí.

Jinak URL ve které se parametry předává je ?library-name=hodnota&library-id=862&do=library-download. Bylo by legitimní, brát si údaje z URL přes $this->getParam()?

redhead
Člen | 1313
+
0
-

Jen pro doplnění:

{plink} presenterovský link

{link} componentový link (možný je i případ $presenter = $component, pokud odkazuješ v šabloně presenteru)

Editoval redhead (27. 5. 2010 23:09)

redhead
Člen | 1313
+
0
-

Tvoříš tu komponentu v továrničce? Pojmenuješ ji library?

joska
Člen | 20
+
0
-

jj, v továrničce. v presenteru takto:

<script>
      protected function createComponentLibrary()
      {
          $library = new BookList();
          return $library;
      }
</script>

v template pak vkládám {control library}

Rada
Člen | 9
+
0
-

No.. Mě to dneska stálo asi 3h času a testování do zblbnutí…
V konstruktoru tvojí komponenty si dej odkaz na zavolání konstruktoru rodičovské třídy…

Např…

<?php
	/**
	 * Konstruktor tridy
	 * @param Bascet $bascet
	 */
	public function __construct(Bascet $bascet) {
		parent::__construct();
		$this->_bascet = $bascet;
	}
?>

A pak by to mělo už fungovat :)

Editoval Rada (29. 5. 2010 18:19)

joska
Člen | 20
+
0
-

Opravdu stačí zavolat parent::__construct();, děkuji moc, sám bych na to rozhodně nepřišel.