vygenerovanie control do stringu
- ikoon
- Člen | 80
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
nejsnazsi to bude zachytit pres ob, v presenteru zhruba:
ob_start();
$this['mojekontrola']->render();
$html = ob_get_clean();
- David Matějka
- Moderator | 6445
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
- David Matějka
- Moderator | 6445
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
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
nerenderuj tu sablonu presenteru, ktera renderuje {control}, ale samotnou sablonu, kterou renderujes v te komponente
- David Matějka
- Moderator | 6445
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
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
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