Výpis komponent pomocí filtru – registrace v presenteru

krcuk41
Člen | 12
+
0
-

Ahoj,

řeším takový složitější problém. Mám ho vyřešený a je funkční ale moc se mi to nelíbí.

Mám komponenty a chci je vypisovat v tělě textu a to tak, že v textu vytvořím kód, který následně reprezentuje nastavení pro vykreslení komponenty.

Mám vytvořený filtr, který funguje ale problém nastává, při registraci komponent. Potřebuju je vyrenderovat jako string a v tu chvíli se objevuje chyba, že komponenta není připojená k presenteru.

Mám to vyřešené takto – registruju filtr:

$presenter = $this->getPresenter();

$this->template->addFilter('shortcode', function (string $string) use ($presenter, $shortcode) {
	$control = $shortcode->create();
	$control->setPresenter($presenter);
	return $control($string);
});

V samotném filtru už pak můžu volat na presenteru addComponent, vyrenderovat jí do stringu a vložit místo kódu.

Nevím jestli to není prasárna.

Navíc bych si chtěl filtr spíš registrovat v konfiguraci. Jde to nějak?

services:
	nette.latteFactory:
		setup:
			- addFilter('shortcode', @App\IShortcode::create())

Díky za radu.