HTML::el(‚a‘) a $this->link v Presenteru

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

Zdravím,
nenašel jsem řešení jak do

<?php
Nette\Utils\Html::el('a')->href()
?>

nacpat v Presenteru $this->link(‚Presenter:action‘).

Bohužel to tak potřebuju, vím, že bych to mohl vytvořit předtím a uložit do nějaké proměnně $link a tu předat do ->href($link).

Díky za nějaké popostrčení.
Nette 2.0.8 a PHP 5.3

enumag
Člen | 2118
+
0
-

Asi tě nechápu, proč nepoužiješ tohle?

$el = \Nette\Utils\Html::el('a');
$el->href = $presenter->link('Presenter:action');
Tabetha
Člen | 140
+
0
-

Toto nejde?

<?php
Nette\Utils\Html::el('a')->href( $this->link('Presenter:action'))
?>
jetpack
Člen | 71
+
0
-

No zapoměl jsem uvést, že to používám v komponentě.

enumag: Chyba: Notice: $presenter is undefined

tabetha: Chyba: Error: using $this when not in object context

jetpack
Člen | 71
+
0
-

Jo a ještě pro upřesnění:
Používám to v komponentě Grido což je addon DataGrid pro Nette a jeho metodu:

<?php
$grid = new \Grido\Grid($this, $name);
$grid->addAction()->setCustomRenderer(function($row) // $row == Dibi row {
	$img = Html::el('img')->src('path/to/image')->width(16)->height(16);
	$a = Html::el('a')->href($this->link('Topics:delete') /* Zde to háže ty chyby */)->setHtml($img);
	return $a
});
?>

Editoval jetpack (4. 2. 2013 18:12)

Tabetha
Člen | 140
+
0
-

hádam by ma nikto neukrižoval za toto … ale malo by to ísť (niečo podobné ako v multiplier)

<?php
$grid = new \Grido\Grid($this, $name);
$presenter = $this->getPresenter();
$grid->addAction()->setCustomRenderer(function($row) use ($presenter) // $row == Dibi row {
    $img = Html::el('img')->src('path/to/image')->width(16)->height(16);
    $a = Html::el('a')->href($presenter->link('Topics:delete') /* Zde to háže ty chyby */)->setHtml($img);
    return $a
});
?>
jetpack
Člen | 71
+
0
-

Tohle obejití mě taky předtím napadlo a tak jsem to i předtím vyzkoušel:
Notice: $presenter is undefined

enumag
Člen | 2118
+
0
-

OMG ten kód přece neni jen tak na copy paste. Pokud kód má být v presenteru tak místo $presenter napíšeš $this, pokud jinde tak na začátek přidáš $presenter = …kód k získání presenteru…;. Snad jsi programátor ne?!

jetpack
Člen | 71
+
0
-

To jsem zkoušel!

<?php
// Tohle jsem zkoušel
$p = $this->getPresenter();
// I tohle
$p = $this->presenter;
// I tohle
$presenter = $this;
// I tohle
$presenter = $this->getPresenter();

Debugger::barDump($p); // Funguje
$grid->...->setCustomRenderer($p||$presenter->link('Topics:delete') /* Chyba:  notice: $p||$presenter undefined */ );
?>

Toto nechápu..
Jako mám to vyřešené, jen jsem to takto chtěl udělat..

Editoval jetpack (4. 2. 2013 18:58)

redhead
Člen | 1313
+
0
-

Jsi si jist, že u té lambda funkce máš v hlavičce use ($presenter) ?

jetpack
Člen | 71
+
0
-

Víc hlav víc ví. :-)
Nebylo to tam. Přidáním use($presenter) a definováním předtím $presenter = $this->getPresenter() již vše funguje.
+1 pro redhead ;)
Díky.