Select box naplnění daty pomocí fetchPairs
- svobodai
- Člen | 136
mám problém se Select Boxem, který plním pomocí fetchPairs jsem zjistil,
že když ten výběr dám srovnat podle jména dostanu jiný select box než
když dám srovnat podle ID resp. k popiskům jsou přiřazeny různé
indexy.
Výstup z fetchPairs je v pořádku tam jsou data jak mají být v obou
případech. Problém musí být někde ve zpracování select boxu.
NetteFramework-1.0dev-PHP5.2
PHP 5.2.9 (Windows NT V1 5.2 build 3790)
- svobodai
- Člen | 136
Jan Tvrdík napsal(a):
Pokud jsi ručně nenastavil
$useKeys
naFAlSE
, tak to musí fungovat.
Ne nic jsem nenastavoval. Napsal jsem jen takovýto řádek
<?php
$form->addSelect('nacionality','Národnost',$enums['nacionality'])->skipFirst();
?>
kde $enums je definované pole s poly pro selctboxy a checkboxy.
Přesto pokud nechám ten seznam srovnat podle jména tak vyjde jiný obsah
Optionů než při seřazení podle ID.
Editoval svobodai (24. 6. 2010 12:26)
- svobodai
- Člen | 136
22 napsal(a):
A není to logický? Pořadí ID se přece nemusí shodovat z abecedním pořadím nebo jsem to blbě pochopil? Káždopádně zkus Debug::dump() a uvidíš, jaký data jdou do selectBoxu.
Ano pořadí ID se samozřejmně nemusí schodovat s abecedním. Problém je v to, že mi to dá toto
pro seřazeno podle ID
<select size="6" onfocus="this.onmousewheel=function(){return false}" name="activities[]" id="frmregister-step2-activities" multiple="multiple">
<option value="0">– Vyberte –</option>
<option value="1" selected="selected">Chodím</option>
<option value="2">Běhám</option>
<option value="3">Lezu</option>
<option value="4" selected="selected">Plavu</option>
</select>
pro seřazeno podle jména
<select size="6" onfocus="this.onmousewheel=function(){return false}" name="activities[]" id="frmregister-step2-activities" multiple="multiple">
<option value="0">– Vyberte –</option>
<option value="1" selected="selected">Běhám</option>
<option value="2">Chodím</option>
<option value="3">Lezu</option>
<option value="4" selected="selected">Plavu</option>
</select>
Což jak jistě chápete, že to není to samé. Potřeboval bych aby to ten výsledek udělalo takto.
pro seřazeno podle ID
<select size="6" onfocus="this.onmousewheel=function(){return false}" name="activities[]" id="frmregister-step2-activities" multiple="multiple">
<option value="0">– Vyberte –</option>
<option value="2">Běhám</option>
<option value="1" selected="selected">Chodím</option>
<option value="3">Lezu</option>
<option value="4" selected="selected">Plavu</option>
</select>
- toka
- Člen | 253
To se mi stávalo taky, a nedokázal jsem to nijak ošetřit. Měl jsem
fetchPairs
, který vracel id
a jmeno
, ale
na při použití addSelect
vůbec nebylo bráno v potaz
id
, ale indexy začaly samy od jedné. Problém byl ale v tom, že
jsem načetl data z databáze a následně použil
array_merge
:
$data = $this->model->getDataFilterPairs(); // sql> ORDER BY name
$druh = array_merge(array(0 => ' - nerozhoduje - '), $data);
Jedině co šlo, bylo zrušit ORDER BY name
, nebo
array_merge
. Funkci array_merge
se zřejmě nelíbí,
že pořadí indexů není lineární (1, 2, 3, 4, …).
- nAS
- Člen | 277
V manualu se pise:
If all of the arrays contain only numeric keys, the resulting array is given incrementing keys starting from zero.
Pokud potrebujes spojit pole s numerickymi indexy s jejich zachovanim, tak pouzij operator plus:
$druh = array(0 => ' - nerozhoduje - ') + $data;
- David Grudl
- Nette Core | 8228
Proto je lepší místo array_merge použít
<?php
$form->addSelect('nacionality', 'Národnost', $enums['nacionality'])->skipFirst(' - nerozhoduje - ');
?>