Helpery v presenteru i komponentě

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

Je možné nějak rozumně registrovat helpery pro šablonu, tak aby byly dostupné jak v presenterových šablonách tak komponentách? Zatím to řeším pomocí BasePresenteru a BaseControlu ale to se mi moc nelíbí

Oli
Člen | 1215
+
0
-

Vyřešil jsem to kompozicí. Něco jako:

class MyHelpers
{

	public function __construct()
	{

	}


	public function createTemplate($template)
	{
		$template->registerHelper('shortNtags', function ($s, $len = 10, $allow = "") {
			$text = strip_tags($s, $allow);
			return \Nette\Utils\Strings::truncate($text, $len);
		});

		// ...

		return $template;
	}
}

// presenter
protected function createTemplate($class = NULL)
{
	$template = parent::createTemplate($class);
	$template = $this->myHelpers->createTemplate($template);
	return $template;
}

// komponenta
protected function createTemplate($class = NULL)
{
	$template = parent::createTemplate($class);
	$template = $this->myHelpers->createTemplate($template);
	return $template;
}

Jestli to je dobré nebo špatné řešení nevím. Funkční je ;-)

Jiří Nápravník
Člen | 710
+
0
-

Díky za rekaci, nicméně to je hodně podobné jako s basetřídama, resp. tady je zase to, že to musím pořád kopírovat. Měl jsem spíše na mysli, zda nefunguje nějak nastavit na jednom místě a pak to bude fungovat všude, jako třeba makra…

vvoody
Člen | 910
+
0
-

Skrátiť duplicitný kód preťaženia createTemplate metódy sa snáď dá už jedine volaním traity v ktorej bude tá metóda createTemplate.

Oli
Člen | 1215
+
0
-

Jiří Nápravník napsal(a):

tady je zase to, že to musím pořád kopírovat. Měl jsem spíše na mysli, zda nefunguje nějak nastavit na jednom místě a pak to bude fungovat všude, jako třeba makra…

No však, nevím jestli mě něco uniká, ale takhle to funguje ne? V te tride nastavis a pak si to hodis do basePresenteru a baseComponent a mas to vsude. Pokud teda z nich dědíš. Respektive jestli to chceš třeba jen v admin části, tak si to dáš do nějakýho Admin/BasePresenteru…

Ale ten samotnej kod pro helpery je jen na jednom místě.

Jiří Nápravník
Člen | 710
+
0
-

Jasně však já to tak mám, jak píšu v prvním pvodu, mám to taky zatím v BasePresenteru a BaseControlu, ale spíše jsem se ptal, jeslti není nějaký čistší řešení. Ostatně i David psal na twitteru že BasePresenter je antipattern…

David Matějka
Moderator | 6445
+
0
-

v soucasnem stavu budes muset vzdy neco pridat jak do BasePresenteru, tak do BaseControlu, jelikoz neni centralizovane vytvareni sablon. Ja to treba resim, ze mam TemplateFactory, ktera mi vytvari sablonu vsude, kde potrebuju, a umoznuje centralni pridani helperu a helper loaderu.

Oli
Člen | 1215
+
0
-

Jiří Nápravník: Četl jsem to taky s tím antipatternem. Bohužel, to byl v podstatě zatím jen výkřik, nebo to někde rozepsal? Někdo mu tam i psal, jestli by to nerozepsal.

Popravdě taky to řešení jak jsem uvedl nepovažuju za ideální, ale pro to abych měl definice helperů na jednom místě to stačí.