Jak vypsat komponentu do šablony uloženou v databasi

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

Ahoj chtěl jsem se zeptat dá se nějak elegantně vypsat html kod sablony komponenty do promenné? Potřeboval jsem udělat, když si do database uložím html kod s značkou komponenty a pak bych tuto značku potřeboval nahradit, buď v šabloně replace nebo jsem to udělal takto

public function renderDefault()
    {
        $this->template->stranky = $this->pages;
        $this->template->dlouhy = $this->createTemplate()
            ->getLatte()
            ->setLoader(new \Latte\Loaders\StringLoader())
            ->renderToString($this->pages->dlouhy,$this->template->getParameters());
    }

Ale to mi nepřijde jako elegantní řešení. Zkoušel jsem v šabloně toto

{var $for = $control["form"]->render()}
{$stranky->dlouhy|replace:"<<registrace>>",$for}

Ale to vždy vypíše formulář.

Editoval zool (11. 1. 2015 10:34)

Filip Klimeš
Nette Blogger | 156
+
0
-

Úplně nerozumím čeho chceš dosáhnout. Proč si chceš HTML kód ukládat do databáze?
Pokud chceš vložit komponentu do jiné šablony, použij makro {control ..} a v presenteru si udělej továrničku takhle.

EDIT: koukám, že v dokumentaci to není popsané.

Zkus to takhle:

V šabloně si udělej makro

{control myComponent}

a v presenteru si přidej metodu

public function createControlMyComponent()
{
    return new MyComponent(); // pokud má komponenta nějaké závislosti, předej je tady
}

Editoval FilipKlimeš (11. 1. 2015 11:13)

David Matějka
Moderator | 6445
+
0
-

parametry se oddelujou dvojteckou, ne carkou.
(ale nevim, jestli to tim je…)

$form->render() nevraci vysledek, ale vykresli form.
Zkus pouzit makro capture

Editoval matej21 (11. 1. 2015 12:41)

Etch
Člen | 403
+
0
-

@matej21: parametry jde oddělit dvojtečkou i čárkou. Klidně se to může i mixovat.

David Matějka
Moderator | 6445
+
0
-

heh, to jsou mi novinky :) a ja myslel, ze uz znam vsechno :)