Helpery v presenteru i komponentě
- Jiří Nápravník
- Člen | 710
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
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
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…
- Oli
- Člen | 1215
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
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
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
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čí.