Ruční vykreslení formuláře – nevím, jak na to

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

Zdravím,

potřebuji ručně vyrenderovat takovýhle formulář. Otázek je vždycky pět.

protected function createComponentForm()
{
	$form = new Nette\Application\UI\Form;
	$container = $form->addContainer('question');

	foreach ($this->questions as $question) {
		$container->addRadioList($question['id'], $question['question'],
			array(
				1 => $question['answer_1'],
				2 => $question['answer_2'],
				3 => $question['answer_3'],
			))
			->setRequired('Musíte zaškrtnout jednu odpověď u každé otázky!');
	}

	$form->addSubmit('send');

	$form->onSuccess[] = callback($this, 'formSubmitted');

	return $form;
}

Doteď jsem ho prostě vyrenderoval přes {control form}, jenže ho teď musím udělat ručně a nevím si rady. Snažím se o tenhle výsledek. Bílé „řádky“ budou vypadat stejně jako ten první.
Prosím, docela to spěchá. Díky

Editoval Grelek (18. 3. 2013 16:42)

factor
Člen | 28
+
0
-

Ahoj,
nestačilo by před cyklus dodat?

$form->addGroup('Otazka N#');
Grelek
Člen | 233
+
0
-

Ale co potom s tím v Latte?

castamir
Člen | 629
+
0
-

inspiruj se v sandbox → app → template → components

Editoval castamir (18. 3. 2013 17:01)

Grelek
Člen | 233
+
0
-

Zkusil jsem tedy tohle, ale na <td> to vyhazuje vyjímku Component name must be integer or string, object given.

<tr n:foreach="$form->controls as $input">
	<td>{input $input} {label $input /}</td>
</tr>
castamir
Člen | 629
+
0
-
{form form}
<table>
    {foreach $form["question"]->components as $component}
    <tr>
        <th>{label $component/}</th>
        <td>{input $component}</td>
    </tr>
    {/foreach}
    <tr>
        <th></th>
        <td>{input "send"}</td>
    </tr>
</table>
{/form}
Grelek
Člen | 233
+
0
-

<th>{label $component/}</th> to stejně shodí znovu do té vyjímky.

castamir
Člen | 629
+
0
-

dumpni mi prosim $this->questions

Na pole hodnot mi to fungovalo.

Editoval castamir (18. 3. 2013 17:45)

castamir
Člen | 629
+
0
-

http://pastebin.com/ux948Tjd

najdi deset rozdilu :D
me to jede


jeste zkus v kazdem cyklu dat na zacatek {dump $component} a mrkni do debugbaru

Editoval castamir (18. 3. 2013 18:08)

Grelek
Člen | 233
+
0
-

OMG. A nemůže tam hrát roli, že to běží v IFrame jako aplikace na Facebooku?

I když, to je blbost, tam do toho nemá Facebook jak zasahovat…

Editoval Grelek (18. 3. 2013 18:10)

castamir
Člen | 629
+
0
-

zkus

{form form}
<table>
    {foreach $form["question"]->components as $component}
    <tr>
	{dump $component}
    </tr>
    {/foreach}
    <tr>
        <th></th>
        <td>{input "send"}</td>
    </tr>
</table>
{/form}

a napis, co ti to vypisuje v debugbaru

Editoval castamir (18. 3. 2013 18:11)

castamir
Člen | 629
+
0
-

predpokladam, ze tech vypisu tam bylo 5

Grelek
Člen | 233
+
0
-

Jojo, to jsem zapomněl napsat. /facepalm

castamir
Člen | 629
+
0
-

Zkopci mi presne hlavicku vyjimky, kterou ti to zahlasi, kdyz tam das tento kod, a napis sem verzi Nette

Grelek
Člen | 233
+
0
-

Nette\InvalidArgumentException
Component name must be integer or string, object given.

Nette 2.0.6, PHP 5.3.3

castamir
Člen | 629
+
0
-

upgraduj Nette

na 2.0.6 mi to vyhodilo stejnou chybu, na 2.0.7 a novejsi uz ne

Editoval castamir (18. 3. 2013 18:29)

Grelek
Člen | 233
+
0
-

Funguje to. =D Super, díky moc. Teď jdu zkusit tu druhou verzi, co jsi posílal.

EDIT: Jsem pitomec, vždyť je to úplně stejný. Ještě jednou ale moc děkuju. =)

Editoval Grelek (18. 3. 2013 18:37)