vygenerovanie control do stringu

ikoon
Člen | 80
+
0
-

Zdravim

mam latte, v ktorom je len {control mojakontrola}. To by som rad vygeneroval do stringu. Skusal som to cez

$latte = new \Latte\Engine;
$html = $latte->renderToString(__DIR__.'/../FrontModule/templates/sablona.latte', []);

ale to mi hlasi chybu, ze Unknown macro {control} in ...

Je to nejak mozne?

Editoval ikoon (23. 6. 2020 14:58)

David Matějka
Moderator | 6445
+
0
-

nejsnazsi to bude zachytit pres ob, v presenteru zhruba:

ob_start();
$this['mojekontrola']->render();
$html = ob_get_clean();
ikoon
Člen | 80
+
0
-

To mi nejde/nepojde, robim to v modeli, nie v presenteri (som asi zabudol napisat).

David Matějka
Moderator | 6445
+
0
-

aby komponenta správně fungovala, musí být připojená k presenteru – klidně k nějakému dummy presenteru.

alternativou je, že nebudeš renderovat celou komponentu, ale jen šablonu a pošleš tam všechny parametry, které posíláš v render metodě komponenty

ikoon
Člen | 80
+
0
-

vdaka, ale to je na mna moc zlozite, az tak sa v nette zatial nevyznam. konkretny priklad by nebol prosim? par riadkov…

David Matějka
Moderator | 6445
+
+1
-

tady je treba ukazka, jak muzes renderovat sablony pro maily https://phpfashion.com/…lech-a-nette .. i pro jiny ucel to bude stejne

ikoon
Člen | 80
+
0
-

tak som to skusil, uz to pise ine chyby, konkretne

Call to undefined method Nette\Application\LinkGenerator::getComponent()

 4:    use Latte\Runtime as LR;
 5:
 6:    class Templateb1dad6351b extends Latte\Runtime\Template
 7:    {
 8:
 9:        function main()
10:        {
11:            extract($this->params);
12:            /* line 1 */ $_tmp = $this->global->uiControl->getComponent("mojakontrola");
13:            if ($_tmp instanceof Nette\Application\UI\IRenderable) $_tmp->redrawControl(null, false);
14:            $_tmp->render();
15:            return get_defined_vars();
16:        }

moj kod je toto:

$latte = $this->latteFactory->create();
Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
$latte->addProvider('uiControl', $this->linkGenerator);
$params = [];
$html = $latte->renderToString(__DIR__.'/../FrontModule/templates/sablona.latte', $params);
David Matějka
Moderator | 6445
+
0
-

nerenderuj tu sablonu presenteru, ktera renderuje {control}, ale samotnou sablonu, kterou renderujes v te komponente

ikoon
Člen | 80
+
0
-

David Matějka napsal(a):

nerenderuj tu sablonu presenteru, ktera renderuje {control}, ale samotnou sablonu, kterou renderujes v te komponente

aha, ale bude to fungovat, kde v tej komponente mam form? no skusim…

ikoon
Člen | 80
+
0
-

Unknown macro {form}, did you mean {for}? in ...

asi to skusim inak cele spravit

Editoval ikoon (24. 6. 2020 9:53)

ikoon
Člen | 80
+
0
-

Ide mi o to, ze vypipsujem texty z DB, no a ked do textu vlozim napr ten {{mojakontrola}}, tak by som to potreboval nahradit (to {{..}}) formom s inputboxami atd (a ten musi samozrejme fungovat). Vsetko je v DB, nemozem to spravit ako normalny latte s tym textom.

David Matějka
Moderator | 6445
+
0
-

no formulare jsou taky problematicky, leda ze bys pouzil Nette\Forms\Form namisto Nette\Application\UI\Form (plus musis nainstalovat FormMacros do latte)

takze ty nekde v modelu vytahnes z db nejakou sablonu, tam chces nektere casti nahradit za komponenty a pak s tim budes delat co?

ikoon
Člen | 80
+
0
-

no, mam presenter, ktory z modelu vytiahne text clanku a zobrazi v jednochej sablone, kde sa len vypise ten text z DB.

V niektorych textoch chcem ale zobrazit form, clovek v nom nieco vypise, da submit a ja to spracujem. Ten form je momentalne ako komponenta, ale teoreticky to moze byt sucast toho presenteru (ak by to pomohlo).

Zacalo to tak, ze som mal X latte, na kazdy clanok jedno latte a k tomu niekolko presenterov. To som ale prehodil do DB, niekolko presenterov nahradil jeden. Akurat ze v niektorych tych latte som mal {control nieco} a to mi teraz robi problem.

David Matějka
Moderator | 6445
+
0
-

no pokud je to stejne vyvolane v presenteru, tak se muzes vratit k tomu memu puvodnimu reseni. to, ze to generujes nekde v modelu, neznamena, ze si z presenteru nemuzes predat komponentu / nebo samotny presenter (resp container) jako lokator komponenty