RadioList dotaz

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

Zdravím. Chci se zeptat na 2 věci:

  1. Když na stránku přidám radioList, který má X položek a chci, aby byl implicitně první už zaškrtnutý. Jak na to v appForm?
  2. Jak se dá jednoduše změnit separátor mezi jednotlivými radio buttony? Napadlo mě:
<?php
$form->addRadioList('druh', 'jedná se o:', $options)
        ->getSeparatorPrototype()->setHtml('element');
?>

to slouží ale nejspíš k naplnění obsahu html elementu. Pak jsem si říkal, že by šel nějak poladit renderer, něco jako:

<?php
$renderer = $form->getRenderer();
$renderer->wrappers['form']['container'] = Html::el('table')->id('dotaz');
?>

ale pro separator u radio buttonu. Nevíte?

Editoval Martin Mates (8. 4. 2009 18:25)

Patrik Votoček
Člen | 2221
+
0
-

1)

<?php
$form->addRadioList('druh', 'jedná se o:', $options)

if (!$form->isSubmitted())
	$form['druh']->setValue('sem napis to co ma byt defaultne vybrano');
?>
kravčo
Člen | 721
+
0
-

1) Ak chceš nastaviť predvolenú hodnotu viacerím prvkom, bude rozumnejšie použiť setDefaults():

$form = new AppForm;
$form->addXYZ...

if (!$form->isSubmitted()) { // Edit: doplnený „!“
    $form->setDefaults(array(
        'radio1' => 1,
        'text1' => "Hello world!\n",
        'checkbox1' => true,
    ));
}

2)jednom vlákne sa to tu už riešilo…

Editoval kravco (8. 4. 2009 23:52)

Martin Mates
Člen | 179
+
0
-

Já bych spíš potřeboval nějak přistoupit k vlastnosti checked. Aby to bylo zaškrtnuté i vizuálně. Nevím, jak na to s tím getControlPrototype, kdyz v radioListu je tech radio buttonu víc.

kravčo
Člen | 721
+
0
-

To rozhodne nepotrebuješ!

$form = new Form;
$form->addRadioList('moznost', 'Vyber moznosť:', array(
    1 => 'možnosť č. 1',
    2 => 'možnosť č. 2',
    3 => 'možnosť č. 3',
));

$form->setDefaults(array(
    'moznost' => 2,
));

echo $form;
Martin Mates
Člen | 179
+
0
-

Já tomu rozumím, proč to nepotřebuju. Je to 100% funkční i bez toho. Ale já bych chtěl, aby to prostě bylo zaškrtnuté. Ať už je důvod jakýkoli. Takhle si uživatel myslí, že neučinil žádnou volbu, že to nechal nevyplněné.

Zatím jako jedinou cestu vidím javascipt, který to zaškrtne :-/

kravčo
Člen | 721
+
0
-

Neviem kde je chyba, no mne kód, ktorý som vyššie napísal, druhý z radiobuttonov „zaškrtne“ – tak, že to vidím.

<input type="radio" name="moznost" id="frm-moznost-0" value="1" />
    <label for="frm-moznost-0">možnosť č. 1</label>
    <br />
<input type="radio" name="moznost" id="frm-moznost-1" checked="checked" value="2" />
    <label for="frm-moznost-1">možnosť č. 2</label>
    <br />
<input type="radio" name="moznost" id="frm-moznost-2" value="3" />
    <label for="frm-moznost-2">možnosť č. 3</label>
    <br />

Editoval kravco (8. 4. 2009 22:41)

Martin Mates
Člen | 179
+
0
-

Zkoušel jsem nejdříve to s tím isSubmitted a to mi nefungovalo. Bez toho to jde bez problémů a i to vidím zaškrtnuté. Díky moc!

kravčo
Člen | 721
+
0
-

Ejha, chybička se vloudila :) samozrejme tam malo byť:

// pokiaľ formulár NEbol odoslaný
if (!$form->isSubmitted()) {
    $form->setDefaults(...);
}

Tie predvolené hodnoty chceme samozrejme nastaviť ak formulár iba zobrazujeme (a ešte sme ho neodoslali).

_Martin_
Generous Backer | 679
+
0
-

Od revize 270 stačí volat $form->setDefaults(...);, formulář si (ne)odeslání hlídá sám.

kravčo
Člen | 721
+
0
-

Akonáhle sa Nette\Forms\Form.php zmení, odkaz prestane byť platný – lepšie je odkazovať napr. na vlákno, kde sa to preberalo, to bude aktuálne dlhšie.