Formulář – dynamická pole se nezpracuji

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
KillPrd
Začátečník | 110
+
0
-

Ahoj v componente formuláře si vytvořím dynamicky 8 položek a rád bych je zpracoval nicméně pri odeslání formuláře to tyto pole nenajde hlásí to že neexistují.

<?php

for($i = 1;$i<=count($sql2);$i++){
	$form->addCheckbox('stat'.$i, 'Aktivní?:')->setValue(@$sql2[$i]->stat);
	$form->addText('nazev'.$i, 'Název banner:')->setValue(@$sql2[$i]->nazev);
	$form['nazev'.$i]->setOption('description', 'Druh baneru:'.($i == '0'?'240x150 v levo nad boxama':'').($i == '1'?'240x150 v pravo nad boxama':'')
	.($i == '2'?'115x? v pravo v liště':'')
	.($i == '3'?'115x? v pravo v liště':'')
	.($i == '4'?'115x? v pravo v liště':'')
	.($i == '5'?'115x? v pravo v liště':'')
	.($i == '6'?'768x60 v pravo v liště':'')
	.($i == '7'?'768x60 v pravo v liště':''));
	$form->addTextArea('clanek'.$i, 'Script nebo text:')->setValue(@$sql2[$i]->clanek);
	$form->addFile('file_name'.$i,'Img nebo swf:')
	->addCondition(Form::FILLED, 'Musíte vložit soubor!')
	->addRule(Form::FILLED, 'Musíte vložit soubor!');
}


?>

nenašel jsem nikde jak tohle ošetřit…

bojovyletoun
Člen | 667
+
0
-

v čem je problém? mě to jde takto

"stat1" => TRUE
   "nazev1" => "wq" (2)
   "clanek1" => "sa" (2)
   "stat2" => TRUE
   "nazev2" => ""
   "clanek2" => "sdf" (3)
   "stat3" => FALSE

není lepší použít Containery? $cont=$from->addcontainer() To si vlož do cyklu a v něm místo form užij cont. Resp pak smaž ty $i uvnitř.
potom:

ray(8) {
   1 => array(3) {
      "stat1" => FALSE
      "nazev1" => ""
      "clanek1" => ""
   }
   2 => array(3) {
      "stat2" => FALSE
      "nazev2" => ""
      "clanek2" => ""
   }

jinak tamty špagety jsou takový antipattern, co brání použit pole?

PS. tohle ještě nejsou ty pravé dynamické formuláře. Pro opravdové d.f si najdi DynamicContainer(addon).

Editoval bojovyletoun (25. 1. 2011 17:48)

KillPrd
Začátečník | 110
+
0
-

změnil jsem to jak si psal a stejně je nevypíše.

<?php
for($i = 1;$i<=count($sql2);$i++){
$cont=$form->addcontainer($i);
$cont->addCheckbox('stat', 'Aktivní?:')->setValue(@$sql2[$i]->stat);
$cont->addText('nazev', 'Název banner:')->setValue(@$sql2[$i]->nazev);
$cont['nazev']->setOption('description', 'Druh baneru:'.($i == '0'?'240x150 v levo nad boxama':'')
.($i == '1'?'240x150 v pravo nad boxama':'')
.($i == '2'?'115x? v pravo v liště':'')
 .($i == '3'?'115x? v pravo v liště':'')
.($i == '4'?'115x? v pravo v liště':'')
.($i == '5'?'115x? v pravo v liště':'')
.($i == '6'?'768x60 v pravo v liště':'')
.($i == '7'?'768x60 v pravo v liště':''));
$cont->addTextArea('clanek', 'Script nebo text:')->setValue(@$sql2[$i]->clanek);
$cont->addFile('file_name','Img nebo swf:')
->addCondition(Form::FILLED, 'Musíte vložit soubor!')
->addRule(Form::FILLED, 'Musíte vložit soubor!');
}
?>