Načtení defaultní hodnoty do formuláře
- Oli
- Člen | 1215
Ahoj,
mám takovej problém, ale nikde jsem na něj nenašel řešení. Respektive
řešení je celkem dost, ale žádné mě nefunguje a nevím jak to mám
udělat. Potřeboval bych naplnit select defaultníma hodnotama z databáze.
Problém je ten, že na stránce je víc formulářů a já nevím jak je
odlišit. Můj kod je:
Presenter:
protected function createComponentEditRole()
{
$form = new Form();
$form->addSelect('role', null, array('guest','registered','moderator','administrator'));
$form->addHidden('userId');
$form->addSubmit('send', 'Odeslat');
$form->onSuccess[] = callback($this, 'editRoleSubmitted');
return $form;
}
Template:
<tr n:foreach="$users as $user1" n:class="$iterator->isOdd() ? odd : even">
<td>{$user1->id}</td>
<td>{$user1->username}</td>
<td>{$user1->name}</td>
{if $user->isAllowed('users', 'edit')}
<td>
{form editRole}
{control $form errors}
{input userId value => $user1->id}
{input role} {input send}
{/form}
</td>
{else}
<td>{$user1->role}</td>
{/if}
</tr>
Bylo by hrozně super, kdyby mě někdor řekl, co mám změnit/dopsat aby to
fungovalo popřípadě uvedl nějakou funkční ukázku. Zkoušel jsem i podle
Vychozí
data pro editační formulář , ale taky me to neslo (mozna jsem nekde
udelal chybu.
Předem díky za jakékoli tipy ;-)
- Tomáš Votruba
- Moderator | 1114
Ahoj, přesně na to je určený Container replicator. Vše budeš mít na jednom místě a bez magie :).
- Oli
- Člen | 1215
Díky, ale abych řekl pravdu tak jsem to moc nepochopil. Popravdě ani moc
nechápu container. Myslím, že jsem to funkčně připojil, ale píše mě to,
že komponenta neexistuje, problem je, zže nevím jakou komponentu mám volat.
Zkoušel jsem to nějak takhle:
Presenter:
use Nette\Forms\Container;
---
protected function createComponentEditRole()
{
$form = new Form();
$form->addDynamic('dates', function (Container $container) {
$container->addDate('date');
});
$form->addSelect('role', null, array('guest','registered','moderator','administrator'));
$form->addHidden('userId');
$form->addSubmit('send', 'Odeslat');
$form->onSuccess[] = callback($this, 'editRoleSubmitted');
return $form;
}
Template:
{form editRole}
{foreach $form['editRole']->containers as $user}
{control $form errors}
<div class="pair">
{$user['dates']->control} {$user['dates']->label}
</div>
{input userId value => $user1->id}
{input role} {input send}
{/foreach}
{/form}
Dělal jsem to podle návodu u toho Replicatoru
Zkoušel jsem co mě napadlo, ale tohle je pro mě zatím španělská vesnice.
Mohl by jsi mě prosím nějak nakopnout? Případně uvést nějaký funkční
příklad? Zatím mě ani není moc jasný jak to využít v tom mem problemu
:-) Každopádně díky.
- .:M@rt!n:.
- Člen | 201
Já jsem tohle řešil tak že jsem si form pojemnoval podle toho k čemu je určenej: tedy například budeš mít:
protected function createComponentEditRoleAdmin()
A pak k tomu jen uděláš latte editRoleAdmin.latte (nevím jestli nebude jenom editAdmin-ale to ti pomůže laděnka) a v něm vložený form
{form editRoleAdmin}