Vlastní vykreslení formuláře – jak vykreslit začátek a konec?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Prochy
- Člen | 91
Dobrý večer,
dělám si takový menší formulář přes třídu \Nette\Forms\Form, kde v renderu nastavím vlastní latte šablonu a nevim, jak v té šabloně vykreslit začátek formuláře a konec (<form…</form>). Počítám, že to je banální věc, ale nemůžu na to přijít.
Zde nastavení render():
public function render() {
$template = new \Nette\Templating\FileTemplate();
$template->setFile(__DIR__ . '/EditMethodPaymentForm.latte');
$template->registerFilter(new \Nette\Latte\Engine());
$template->registerHelperLoader('Nette\Templating\Helpers::loader');
$template->form = $this;
$template->render();
}
Další věc, kterou si nejsem jistý je, jak předávat formulář do proměnný. Nejsem si jistý, jestli volba
$template->form=$this
je správná.
Děkuji za pomoc.
- Prochy
- Člen | 91
Zajímavé to by mě nenapadlo, ale bohužel nefunguje. Hlásí mi to, že komponenta neexistuje. Teda jestli jsem tě správně pochopil
class EditMethodPaymentForm extends UI\Form {
.
.
.
protected function createComponentXxxForm($name) {
$form = $this;
return $form;
}
public function render() {
$template = new \Nette\Templating\FileTemplate();
$template->setFile(__DIR__ . '/EditMethodPaymentForm.latte');
$template->registerFilter(new \Nette\Latte\Engine());
$template->registerHelperLoader('Nette\Templating\Helpers::loader');
$template->control = $template->_control = $this;
$template->render();
}
- Šaman
- Člen | 2666
Motáš dohromady několik věcí.
- Formulář sám o sobě není komponenta. Ano, Nette ho umí pomocí nějakého defaultního rendereru vykreslit, ale sám o sobě nemá žádnou šablonu. Jsou dvě možnosti, jak čistý formulář zapsat do samostatné třídy, buď podědíš UI\Form, nebo si napíšeš tovární třídu. Já si píšu tovární třídu, ale prakticky je to úplně jedno. Třetí možnost je přímov presenteru/komponentě ten formulář vytvořit.
- Je více možností, jak jej vykreslit, ale nejpoužívanější je
vytvořit z něho komponentu pomocí továrničky v presenteru, nebo
v komponentě. Ta továrnička se podle konvencí musí jmenovat
createComponent…()
a vracet instanci komponenty, nebo formuláře (ten vytvoří buď pomocí už hotové tovární třídy, nebo jako novou instanci naší poděděné třídy). V tuto chvíli formulář buď rychle vykreslíš pomocí makra{control …}
, nebo můžeš použít výše zmíněná makra form a vykreslovat si jej ručně. Pořád ale nepoužíváš žádnou šablonu formuláře, vykresluješ ho až v šabloně komponenty/presenteru, kam jsi ho vložil. - Pokud chceš mít formulář jako komponentu s vlastní šablonou, tak ten formulář vlož do opravdové komponenty a vykresli ho v ní a do presenterů vkládej až tu komponentu. Komponenta narozdíl od formuláře už svoji šablonu má. Ukázka je tady a šablona zde. Všimni si, že třída není Form, ale Control. Form si jen vytvoří.
Editoval Šaman (7. 8. 2014 9:15)