Formulář – Odkazování se v latte na $form->addGroup (použitého v presenteru)

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

ve formuláři se dají „kontejnerovat“ grupovat položky.
$form->addGroup(‚group-1‘);
v mém případě mám celý $form zapsáno v presenteru
jak se v latte odkazovat na blok Group? v tom smyslu že vypíše vše co v dané grupě je.

Editoval ZAJDAN (5. 3. 2012 13:45)

Jan Endel
Člen | 1016
+
0
-
{form fooForm}
	{foreach $form['group-1']->components as $component}
		{label $component->name /} {input $component->name}
	{/foreach}
{/form}
ZAJDAN
Člen | 45
+
0
-

čoveče něco dělám špatně, ale toto v mím případě nefunguje.
komponentu s formulářem vyrábímv presenteru:

protected function createComponentRegForm() {
        $form = new Form;
        $form->setAction('/submit.php');
        $form->setMethod('POST');
        $form->onSuccess[] = callback($this, 'RegFormSubmitted');

        $form->addGroup('personal');
        $form->addText('names', 'Jméno:');
        $form->addText('address', 'adresa:');
.... and so on

v latte vykresluji nyní takto a tak mi to i funguje, ale chybí mi to vykreslovat po Groupách

{block #content}
{form regForm}
<div class="BodyForm">
    <div id="FormContent">
        {control regForm}
    </div>

    <div id="FotoContainer"></div>

    </div>
</div>
{/form}
{/block}

Editoval ZAJDAN (5. 3. 2012 17:46)

Jan Endel
Člen | 1016
+
0
-

Řešilo se to tady nedávno

ZAJDAN
Člen | 45
+
0
-

to je sice pěkné, ale tím pádem nemohu použít
$form->addGroup(‚personal‘);
ale
$form->addContainer(‚personal‘);

pokud to dobře chápu

Jan Endel
Člen | 1016
+
0
-

Aha, až ted jsem si všiml, že používáš addGroup a né addContainer, no mě osobně se zdá Container čistší řešení nebo máš nějaký důvod pro použití group?

ZAJDAN
Člen | 45
+
0
-

pilec napsal(a):

Aha, až ted jsem si všiml, že používáš addGroup a né addContainer, no mě osobně se zdá Container čistší řešení nebo máš nějaký důvod pro použití group?

nevím přišlo mi to prašť jak uhoď, ale dejme tomu, že zkusím ten container, v presenteru tedy:

protected function createComponentRegForm() {
       $form = new Form;
       $form->setAction('/submit.php');
       $form->setMethod('POST');
       $form->onSuccess[] = callback($this, 'RegFormSubmitted');

       $form->addContainer('personal');
       $form->addText('names', 'Jméno privátu:');
       $form->addText('address', 'adresa:');

v latte:

{formContainer personal} {label names}

dostanu vystup:
Unknown macro {formContainer} in …/Registration/default.latte:3
a navíc ja nechci vypisovat polozku po polozce daneho kontajneru solo
prostě jednoduše do šablony vyrenderovat celý obsah kontejneru

Editoval ZAJDAN (5. 3. 2012 18:19)

Jan Endel
Člen | 1016
+
0
-

Pak by to mělo jít jak jsem psal v prvním příspěvku.

ZAJDAN
Člen | 45
+
0
-

pilec napsal(a):

Pak by to mělo jít jak jsem psal v prvním příspěvku.

a to lze použít v případě addGroup nebo addContainer
?

ZAJDAN
Člen | 45
+
0
-

no myslel jsem si, že v nette budu mlátit weby jak baťa cvičky, ale nejsem dobrej programátor
to co chci jsem vyřešil úúúúplně jinak…možná lamácky, ale zatím se to nejvíc přibližuje tomu co požaduji.

v presenteru jsem udělal dvě komponenty a každá z nich má jiný obsah formuláře a pak si v latte zavolám konkretní komponentu přes control:

form regForm}
<div class="BodyForm">
    <div id="FormContent">
        {control regForm}
    </div>

    <div class="FotoContainer">
    {control regForm1}

    </div>
</div>
{/form}
Jan Endel
Člen | 1016
+
0
-

Tak by to mělo fungovat v případě Containeru.

Milo
Nette Core | 1283
+
0
-

Add. {formContainer ...}. Jakou verzi Nette používáš? Tohle makro je od verze 2.0, ve verzi 2.0-dev ještě nebylo.

A k tomu jak vykreslovat formulář… máš to překombinovaný. Koukni se do dokumentace, jak správně vykreslit formulář je tam moc pěkně popsané.

// Když máš v prezenteru metodu
public function createComponentRegForm ()
{
}

// Tak v šabloně buď formulář vyrenderuješ automaticky celý
{control regForm}

// anebo si ho chceš renderovat input po inputu
{form regForm}
	{input name} {label name /}
	{input mail} {label mail /}
{/form}
ZAJDAN
Člen | 45
+
0
-

díky, ale to neřeší co potřebuju a to proto že:
1 -
{control regForm}
jak píšeš vyrendruje celej formulář a to já nechci, proto jsem chtěl použít addGroup a renderovat po grupách

2 –

{form regForm}
        {input name} {label name /}
        {input mail} {label mail /}
{/form}

tady se mi opravdu položku po položce vypisovat nechce

to jak jsem psal, že jsem vytvořil dvě componenty obsahující různé části formuláře a následně je renderuju přes

{form regForm}
<div class='formBody'>
<div id='formContent'>{control regForm}</div>
<div id='formFoto'>{control regForm1}</div>
</div>
{/form}

mi splní to co potřebuji.....zda je to hulvátské řešení netuším, ale funguje přesně jak chci…jednotlivé bloky formuláře zavřu do divů a nastyluju jak potřebuju

Editoval ZAJDAN (6. 3. 2012 7:58)

ZAJDAN
Člen | 45
+
0
-

velmi mě zajímá ještě jedna věc…
v běžném případě html vs javascript to používám, ale tady v nette netuším
potřeboval bych ve formuláři udělat tlačítko kde po jeho kliknutí vyběhne popup uvnitř kterého bude další mini formulář se zaškrtávacími poli