Poradie poloziek v selecte
- brano
- Člen | 25
Mam select v ktorom chcem vyberat povedzme zoznam rubrik, hierarchicku
strukturu. Id-cka v DB nezodpovedaju poradiu, v ktorom to chcem mat
v selecte. Existuje nejaky rozumny sposob, ako taketo cosi predat do
selectu?
Totiz – ked to tam nacpem ako array( db_id ⇒ item_name ), bude to vo
vysledku zle utriedene. Ked to tam nacpem ako utriedene pole, musim riesit
logiku prevodu toho, co sa vo formulari vybralo na id vybratej veci v DB.
A samozrejme opacne pre defaultne hodnoty. Nejake zazracne riesenia?
Editoval brano (9. 12. 2009 17:43)
- brano
- Člen | 25
A kedze ziadne neocakavam, pridam aspon dalsiu otazku. Kde je najvhodnejsie robit transformaciu podobneho typu default premennych? Mam komponentu odvodenu od AppForm, do ktorej viacero ludi bude pchat a citat data. Teda sa mi moc nehodi, aby sa kazdy z nich staral o transformaciu dat. Da sa to strcit na nejake jednotne miesto v tom formulari?
- blacksun
- Člen | 177
Já si tedy myslím, že to funguje přesně tak, jak by mělo, tzn. při předání pole id=>název se v selectboxu zobrazí názvy a po submitu dostaneš IDčko, u multiselectu pole IDček.
K třídění lze použít php funkci asort, která zachovává indexy, viz http://php.net/…on.asort.php
Editoval blacksun (9. 12. 2009 18:09)
- brano
- Člen | 25
No, ja v zasade netvrdim ze nieco nefunguje tak ako by malo. :) Predstav si taketo pole:
array(
1 ⇒ „Rubrika1“,
2 ⇒ „Rubrika2“,
11 ⇒ „–Podrubrika11“,
12 ⇒ „–Podrubrika12“,
21 ⇒ „–Podrubrika21“,
22 ⇒ „–Podrubrika22“,
)
Zobrazi sa v takomto poradi. Lenze ako pouzivatel by si ocakaval, ze podrubriky budu medzi rubrikami. Da sa to samozrejme jednoducho osetrit tym, ze si spravis nejake pole, co ti bude permutovat indexy, a do selectu budes strkat utriedene tak ako chces, ale uz sa o to musi starat niekto, kto ten komponent pouziva, a to je dost nepohodlne. Takze otazka bola, ci sa to da strcit niekde do formu dnu na nejake rozumne miesto.
Triedenie pochopitelne nic nevyriesi.
blacksun napsal(a):
Já si tedy myslím, že to funguje přesně tak, jak by mělo, tzn. při předání pole id=>název se v selectboxu zobrazí názvy a po submitu dostaneš IDčko, u multiselectu pole IDček.
K třídění lze použít php funkci asort, která zachovává indexy, viz http://php.net/…on.asort.php
- blacksun
- Člen | 177
Tak pokud bys měl takovéto indexy a chtěl bys řazení 1,11,12,2,21,22, tak např:
<?php
$arr = array(
1 => "Rubrika1",
2 => "Rubrika2",
11 => "-Podrubrika11",
12 => "-Podrubrika12",
21 => "-Podrubrika21",
22 => "-Podrubrika22", );
ksort($arr, SORT_STRING);
?>
array(6) {
1 ⇒ string(8) „Rubrika1“
11 ⇒ string(13) „-Podrubrika11“
12 ⇒ string(13) „-Podrubrika12“
2 ⇒ string(8) „Rubrika2“
21 ⇒ string(13) „-Podrubrika21“
22 ⇒ string(13) „-Podrubrika22“
}
- blacksun
- Člen | 177
Případně pomocí <optgroup> lze definovat skupiny a pak se předává pole polí, např.
<?php
$arr = array(
"Rubrika1" => array(,
11 => "-Podrubrika11",
12 => "-Podrubrika12",
),
"Rubrika2" => array(
21 => "-Podrubrika21",
22 => "-Podrubrika22",
)
);
?>
Bohužel se pak Rubrika1 – název skupiny nedá vybrat jako položka selectboxu.
- Ondřej Mirtes
- Člen | 1536
Pokud je to jednoduché pole, tak ho můžeš seřadit funkcemi v PHP. Některé podporují i vlastní callback pro porovnávání. Toto se uvnitř třídy Form řešit IMHO nemusí.