Select a duplicitní hodnoty

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

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
+
0
-

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ší :).

Rypi
Člen | 38
+
0
-

Super, a já nad tím tak složitě přemýšlel :)

mildabre
Člen | 62
+
0
-

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.