addSelectBox – obarvení pouze jedné položky (Nette 2)
- Prochy
- Člen | 91
Zdravim,
chci se zeptat, je možný nějak obarvit pouze jeden řádek v Selectu? Nějak nad tím dumám, ale nedaří se mi na to přijít.
Doplnim, že používám ruční vykreslování. Zajímalo by mě, jestli je možný vykreslit jednotlivý optiony ručně, to by potom nebyl problém. Jelikož tím, že tam mám pouze toto, tak to nejspíš nikdy neobarvim jednotlivě.
<td colspan="3">{input declaration}</td>
Děkuji za odpověď
Editoval Prochy (27. 10. 2012 9:16)
- Prochy
- Člen | 91
Dobrá, tak už to mám obarvený, teď by mě ještě zajímalo, jak potom nastavit defaultní hodnotu.
Jinak přikládám způsob vyřešení prvnotního problému:
$listDeclarations = array(Html::el('option', array(
'value' => 'Není',
'style' => array('color:red !important;'),))
->add('Není'),
Html::el('option', array('value' => 'Papírové'))
->add('Papírové'),
Html::el('option', array('value' => 'Elektronické'))
->add('Elektronické'));
$this->addSelect('declaration', 'Prohlášení:', $listDeclarations)
->setDefaultValue('Papírové');
Děkuji za odpověď
EDIT Vyřešeno:
Moje chyba, nějak sem si usmyslel, že by mělo jít do setDefaultValue
nastavit přímo text vybírané položky, stačilo tam dát
setDefaultValue(1)
Editoval Prochy (27. 10. 2012 17:16)
- Prochy
- Člen | 91
Tak jsem se dostal až teď k testování, a objevil se někde problém, asi dělám něco špatně. Pokud odešlu formulář, tak se pokaždé vrátí hodnota jako NULL u selectu vytvořený pomocí html option.
Zde kód:
protected function createComponentTest($name){
$list = array(Html::el('option', array(
'value' => 'Není',
'style' => array('color'=>'red'),))
->add('Není'),
Html::el('option', array('value' => 'Papírové'))
->add('Papírové'),
Html::el('option', array('value' => 'Elektronické'))
->add('Elektronické'));
//$listDeclarations=array('není','papírové');
$form = new Form();
$form->addSelect('select','select:')->setItems($list);
$form->addSubmit('ok','ok');
$form->onSuccess[]=callback($this,'pokus');
return $form;
}
public function pokus(Form $form){
dump($form->getValues());
}
A hodnota select je vždy NULL ať vyberu, co vyberu. Tak by mě zajímalo, kde bych mohl mít chybu.
Děkuji za odpověď
- enumag
- Člen | 2118
Kdybys tam nedával ty options jako hotový HTML tak bys klasicky použil:
$select->setItems($pole, FALSE);
Kde důležité je to false na konci, protože řekne selectu, že nemá vracet klíče (0, 1, 2), ale hodnoty. Obávám se ale, že v případě toho předání HTML to nebude fungovat, můžeš vyzkoušet. ;-)
- Prochy
- Člen | 91
To sem už zkoušel nejde to, ale já tady nechápu, proč to nefunguje, když formulář se vykreslí takto:
<tr>
<th><label for="frmtest-select">select:</label></th>
<td>
<select name="select" id="frmtest-select">
<option value="Není">Není</option>
<option value="Papírové">Papírové</option>
<option value="Elektronické">Elektronické</option>
</select></td>
</tr>
Kdybych tam dal toto:
$listDeclarations=array('není'=>'není','papírové'=>'papírové');
$form = new Form();
$form->addSelect('select','select:',$listDeclarations);
Tak mi to správně vypíše Není nebo papírové a nemusí tam být ani false, proto mě zaráží, že mi skript s HTML optiony nefunguje. :-(
Editoval Prochy (30. 10. 2012 13:22)
- enumag
- Člen | 2118
V tom případě bys musel použít:
$list = array(
'Není' => Html::el('option', array(
'value' => 'Není',
'style' => array('color'=>'red'),
))->add('Není'),
'Papírové' => Html::el('option', array('value' => 'Papírové'))->add('Papírové'),
'Elektronické' => Html::el('option', array('value' => 'Elektronické'))->add('Elektronické'),
);
Dovolím si ale říct, že toto řešení nepodporuji. :-) Nemám rád používání polí tímto způsobem (s nečíselnými indexy).
Editoval enumag (30. 10. 2012 13:31)