více inputů pod jedním jménem ala []

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

nemůžu si vzpomenout, ani to najít. Jak-že se s Forms dělá to abych měl více hodnot z inputů v poli

<input name="pole[]" type="text" />
<input name="pole[]" type="text" />
<input name="pole[]" type="text" />
.
.
.
kravčo
Člen | 721
+
0
-

enoice napsal(a):

nemůžu si vzpomenout, ani to najít. Jak-že se s Forms dělá to abych měl více hodnot z inputů v poli

<input name="pole[]" type="text" />
<input name="pole[]" type="text" />
<input name="pole[]" type="text" />
.
.
.

Určite funguje toto:

$container = $form->addContainer('pole');
$container->addText('t0', 'text0');
$container->addText('t1', 'text1');

čo vygeneruje

<input name="pole[t0]" type="text" />
<input name="pole[t1]" type="text" />

S číselnými indexami mi to brblalo – potrebuje alfanumerické meno komponentu, t.j. „0“, „1“, … sa mu nepozdáva. Mám pocit, že David na školení spomínal, že to ide, no zatiaľ som neprišiel na to, ako. No a bez indexov, to veru neviem…

romansklenar
Člen | 655
+
0
-

Nette Forms Example 6 ?

EDIT: Kravco byl rychlejší :)

Editoval romansklenar (20. 11. 2008 22:06)

LM
Člen | 206
+
0
-

Index může být číselný ale musí to být string, takže $c->addText('0', 'text') by mělo fungovat.

ViliamKopecky
Nette hipster | 230
+
0
-

Ano ano, Container je to klíčové slovo. Dík kluci

kravčo
Člen | 721
+
0
-

LM napsal(a):

Index může být číselný ale musí to být string, takže $c->addText('0', 'text') by mělo fungovat.

Funguje, vďaka :)


Zrejme to má nejaký zmysel, prečo je striktne vyžadovaný typ string ako meno komponentu, no mňa dosť zmiatla chybová hláška:

Component name must be non-empty alphanumeric string, '1' is invalid.

Z nej to vyzerá, ako by som string podhodil, aj keď v skutočnosti tam je číslo. Človek znalý podľa kódu ľahko vidí, aké hlášky by to hádzalo pri poli, či vhodnom objekte.

Je pravda, že teraz, keď som si pozrel aj kód, ktorý k výnimke viedol, by som na to zrejme prišiel, ale zvačša človek nečíta kód, keď chybová hláška hovorí jasne…

David Grudl
Nette Core | 8144
+
0
-

Dobrý tip, chybovou hlášku upravím.

Vitek Jezek
hledá kolegy | 285
+
0
-

jinak k pretypovani staci udelat "".$int (kde $int je integer : ) , vyzkouseno, funguje.

jen netusite, zda sezerou vsechny prohlizece, kdyz prvni znak je rovnou cislo? Treba v CSSku to tusim haprovalo, tak aby to nehaprovalo i tady – treba nejake mirne archaicky IE (6? 5.5?) by nemuselo ani odeslat dany input (u IE nic neni nemozne :D )

PetrP
Člen | 587
+
0
-

Whitek napsal(a):
jinak k pretypovani staci udelat "".$int (kde $int je integer : ) , vyzkouseno, funguje.

lepší je ovšem (string) $int ;]

krajaac
Člen | 45
+
0
-

Whitek napsal(a):

jinak k pretypovani staci udelat "".$int (kde $int je integer : ) , vyzkouseno, funguje.

jen netusite, zda sezerou vsechny prohlizece, kdyz prvni znak je rovnou cislo? Treba v CSSku to tusim haprovalo, tak aby to nehaprovalo i tady – treba nejake mirne archaicky IE (6? 5.5?) by nemuselo ani odeslat dany input (u IE nic neni nemozne :D )

Staricke IE 5.5 nema se zpracovanim formulare typu form[1]["neco"] problem, pouzivam to v administraci a funguje to v pohode (testovano v IEtester).

PetrP napsal(a):

Whitek napsal(a):
jinak k pretypovani staci udelat "".$int (kde $int je integer : ) , vyzkouseno, funguje.

lepší je ovšem (string) $int ;]

$container->addText((string) $int, "$text") je sice programatorsky cistejsi ale $container->addText("$int", "$text") je rychlejsi na napsani ;)

PetrP
Člen | 587
+
0
-

krajaac napsal(a):

$container->addText((string) $int, "$text") je sice programatorsky cistejsi ale $container->addText("$int", "$text") je rychlejsi na napsani ;)

Oboje vypadá lépe než "".$int, ale u (string) $int je i pro jiného člověka než autora kódu jasné co a proč to dělá.

Jakub Šulák
Člen | 222
+
0
-

Jak se dostanu po odeslání k odeslaným datům?
Jak přepsat do Nette tohle:

<?php
<input type="text" name="neco[]" value="a" />
<input type="text" name="neco[]" value="b" />

foreach ($_POST['neco'] as $item){
  echo $item.'<br />';
}
?>

Díky předem za radu..

EDIT:
Pro ostatní kdo by hledal – $form->getValues(); :-)

Editoval Jakub Šulák (10. 12. 2008 13:20)

David Grudl
Nette Core | 8144
+
0
-
$subform = $form->addContainer('neco');
$subform->addText('0', 'Prvni:');
$subform->addText('1', 'Druhý:');