vykresleni „control“ po svem?
- wdolek
- Člen | 331
snazim se prijit na to, jak si z {control ...}
vydolovat
jednotlive komponenty (podobne, jako kdybych predal Form sablone a v sablone si
je pak vyzobaval pomoci ArrayAccess
)
vychazel jsem z threadu:
https://forum.nette.org/…-renderovani
kde mimo jine zaznelo, ze neco takoveho je jiz mozne / mozne bude:
https://forum.nette.org/…-renderovani#…
https://forum.nette.org/…-renderovani#…
v presenteru mam toto:
public function createComponentLoginForm() {
$form = new \Nette\Application\AppForm($this, 'loginForm');
$form->addText('username', 'Uživatelské jméno')
->addRule(\Nette\Forms\Form::FILLED, 'Zadejte uživatelsié jméno');
$form->addPassword('passwd', 'Heslo')
->addRule(\Nette\Forms\Form::FILLED, 'Zadejte heslo');
$form->addSubmit('btnOk', 'OK');
$form->onSubmit[] = array($this, 'loginFormSubmitted');
return $form;
}
v sablone mam toto:
{block #content}
{control loginForm begin}
<h1>FooBar Administration Area</h1>
{if $flashes}
<div class="message">
{control loginForm errors}
{foreach $flashes as $flash}
<p>{$flash->message}</p>
{/foreach}
</div>
{/if}
<fieldset>
{control loginForm-username label}
{control loginForm-username control}
</fieldset>
<fieldset>
{control loginForm-passwd label}
{control loginForm-passwd control}
{control loginForm-btnOk control}
</fieldset>
{control loginForm end}
{/block}
avsak jedine, co ziskam je:
MemberAccessException
Call to undefined method Nette\Forms\TextInput::render().
<?php $control->getWidget("loginForm-username")->render('label') ;$control->getWidget("loginForm-username")->render('control') ?>
… umm… copak delam spatne? :D … mam: Nette Framework 0.9.3 (revision cc750ea released on 2010–01–28)
Editoval wdolek (7. 4. 2010 13:48)
- Honza Marek
- Člen | 1664
{control loginForm-passwd label}
a podobně totiž naprosto
nedělá to, co potřebuješ.
Pro vypsání labelu/políčka bys potřeboval
<?php
echo $control->getWidget("loginForm")->getComponent("username")->label
?>
resp.
<?php
echo $control->getWidget("loginForm")->getComponent("username")->control
?>
Co to dělá ve skutečnosti, to jsi sám napsal výše.
Ve frameworku nějaká hezčí syntaxe podporována není, ale můžeš zkusit takovou jednu mojí hračku.
Oficiálně se to dělá takhle:
- Přiřadit si v presenteru instanci formuláře do šablony.
- v šabloně
{widget $form begin}
{widget $form errors}
{$form["username"]->label}: {$form["username"]->control}
{widget $form end}