Nette 2.1 – iterace přes FormContainer

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
motorcb
Člen | 552
+
0
-

Zdravím.

Jak v Nette 2.1 projdu v latte ve formuláři všechny Containery?

$sub1 = $form->addContainer('first');
$sub1->addText('name', 'Your name:');
$sub1->addText('email', 'Email:');

$sub2 = $form->addContainer('second');
$sub2->addText('name', 'Your name:');
$sub2->addText('email', 'Email:');
...

Nyní staticky první container:

{formContainer first}
<tr>
    <td>{label name /} {input name}</td>
    <td>{label email /} {input email}</td>
</tr>
{/formContainer}

Děkuji za rady

Editoval motorcb (10. 1. 2014 11:19)

David Matějka
Moderator | 6445
+
0
-

zkus

{foreach $form->getComponents(TRUE, 'Nette\Forms\Container') as $container}

pripadne prvni parametr FALSE, pokud nechces rekurzivne

motorcb
Člen | 552
+
0
-

@matej21:

Díky, to vypadá funkčně, jak si sáhnu na komponenty v containeru?

{foreach $form->getComponents(TRUE, 'Nette\Forms\Container') as $container}
    <tr>
        <td>{dump $container}</td>
        <td>{label $container->name /} {input $container->name}</td>
    </tr>
{/foreach}

Toto nefunguje a hlásí: Call to undefined method Nette\Forms\Container::getLabel()

David Matějka
Moderator | 6445
+
0
-

ty chces containery nebo controly? container samozrejme label nema ani to nejde vykreslit jako input

viz api https://api.nette.org/…ntainer.html

jestli chces vsechny controly, zkus pouzit ->getControls()