Samostatné použití Latte – Nefunkční makro {form}
- Martin Mates
- Člen | 179
Zdravím, snažím se využít formluáře a Latte šablony samostatně. Když jsem vyzkoušel kód z dokumentace:
$latte = new Latte\Engine;
$latte->setTempDirectory(__DIR__ . '/temp');
$latte->render(__DIR__ . '/form.latte', ['subscribeForm' => $this->form]);
Šablona pak vypadá takto:
<form n:name="subscribeForm">
<input n:name="email" type="email" placeholder="Enter your e-mail and..." class="radius" />
<input n:name="send" type="submit" value="Download free pdf guide" class="button" />
</form>
Zařve mi to na chybě „Unknown attribute n:name…“. Takto použitá šablona zřejmě umí jen základní makra jako {$promenna}, {if}, {while} (to mi funguje), ale makro {form} nefunguje. Víte někdo co s tím? Můžu to makro {form} do šablony nějak registrovat?
Editoval Martin Mates (7. 10. 2014 21:50)
- David Matějka
- Moderator | 6445
Ano, musis ale zaregistrovat
Nette\Bridges\FormsLatte\FormMacros
, zhruba takhle:
$latte->onCompile[] = function($latte) {
Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler());
}
Editoval matej21 (7. 10. 2014 22:05)
- Martin Mates
- Člen | 179
Díky moc! To mě posunulo o něco dál. Šablona už se zkompiluje. Teď zase pro změnu dostávám error `Argument 1 passed to Nette\Bridges\FormsLatte\FormMacros::renderFormBegin() must be an instance of Nette\Forms\Form, null given `
Teď to vypadá takhle:
$latte = new Latte\Engine;
$latte->setTempDirectory(__DIR__ . '/temp');
$latte->onCompile[] = function($latte) {
FormMacros::install($latte->getCompiler());
};
$latte->render(__DIR__ . '/form.latte', ['subscribeForm' => $this->form]);
Formulář je správně a je typu Nette\Forms\Form, protože když v šabloně napíšu {$subscribeForm}, tak se to vykreslí. Asi to nějak špatně té šabloně předávám.
Ve zkompilované šabloně to vypadá takhle:
<?php Nette\Bridges\FormsLatte\FormMacros::renderFormBegin($form = $_form = $_control["subscribeForm"], array()) ?>
Nerozumím tomu, ale trochu mi dělá starosti to $_control tam. Čím by to mohlo být?
- David Matějka
- Moderator | 6445
Ty tam mas totiz pouze nazev – tak se to snazi hledat ten formular
v komponente.
zkus pouzit:
<form n:name="$subscribeForm">
(tedy s $
, takze to rovnou vezme objekt v te promenne)