Select a duplicitní hodnoty
- Rypi
- Člen | 38
Ahoj,
načítám do selectu položky z DB (typově jako následující
dump pole)
array(3) {
1=> "Jablko"
2=> "Hruška"
3=> "Pomeranč"
}
a potřeboval bych, aby ve výsledném HTML selectu byla nahoře ještě jedna položka „moje prioritní ovoce“, která ale bude mít stejné id, jako jedno z ovocí načítané z databáze.
3=> "- moje prioritní ovoce -"
1=> "Jablko"
2=> "Hruška"
3=> "Pomeranč"
Pokud použiju následující strukturu (v pole nemůze být záznam se stejným klíčem 2x), nette mi to nedovolí.
array(2) {
3=> "- moje prioritní ovoce -"
"Seznam z DB" => array(3) {
1=> "Jablko"
2=> "Hruška"
3=> "Pomeranč"
}
}
Jak řešíte takovou situaci? Díky
- Vojtěch Dobeš
- Gold Partner | 1316
Vyřešil bych to asi programově. Dal bych tomu naprosto unikátní hodnotu
(my
), a ve zpracování formuláře ji případně nahradil za to
číslo… Ukecané řešení bývá často nejlepší :).
- mildabre
- Člen | 62
Rypi napsal(a):
Super, a já nad tím tak složitě přemýšlel :)
Tohle je přece analyticky úplně blbě (promiň mě to ostré slovo). Tohle se řeší v Nette standardně pomocí metody ->setPrompt(„– napověda pro select ---“) jež je přesně pro toto určena – přidá Ti do selectu jednu položku navíc, která je vybraná pokud není select nastaven na nějakou jinou hodnotu.
Ty ale chceš aby když se nic nevybere se zvolila položka s id 3. To je také analyticky špatný návrh – klient nic nevybere a přitom se mu „záludně“ navolí ovoce 3. To už je lepší metodou ->setDefaults() nastavit výchozí hodnotu selectu na 3 aby uživatel viděl co ho čeká když si nezvolí něco jiného.
Když už mermomocí chceš aby když nic nezvolí tam byla ta 3 tak si přidej tu položku metodou setPrompt() a ve zpracování formuláře nastav pro NULL natvrdo tu 3 – je to ale IMHO „špatná praktika“ – já to takhle nikdy nepoužívám.