SelectBox jako asociativní pole z databáze
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- jim.street
- Člen | 26
Ahoj, potřeboval bych se zeptat, jak dostat do …
<?php
$form->addSelect('obrazky', 'Obrazky:')
->setItems($array);
// ... $array ve formě asociativního pole.
//Mám kolekce obrázků (jaro, léto, podzim, zima) a pak jednotlivé názvy obrázků.
//Pro kolekce mam vytvořenou tabulku kolekce s id_kolekce a názvem kolekce
//Pro obrázky mám název, cestu (odkaz) k obrázku ve filesystemu a id_kolekce
//Obě dvě tabulky zpracovávám takto
$this->mapOfImages = array();
foreach ($collections as $col) { // $collections je (SELECT * FROM kolekce)->fetchAll;
$arrayImages = $imagesModel->getImages(); // (SELECT * FROM images)->fetchAll;
foreach ($arrayImages as $a) {
$this->mapOfImages[] = array(
$col['nazev'] => array(
'popis' => $a['popis'],
)
);
}
}
// jenže když použiji do ->setItems($this->mapOfImages), vyhodí mi laděnka
**Nette\InvalidArgumentException**
*Items contain duplication for key 'Jaro' u řádku ->setItems($this->mapOfImages)*
?>
- jim.street
- Člen | 26
To vím, jen nevím, jak to upravit tak, aby se mi k fotkám jaro asociovalo pole s prvky duben, květen ; k léto červen, červenec a podobně.
Editoval jim.street (2. 12. 2014 18:25)
- japlavaren
- Člen | 404
Podla mňa v tej hláške je presne uvedené, čo je problém. Dumpni si $this->mapOfImages a uvidíš.
- jim.street
- Člen | 26
Upravil jsem to na kód níže, ale pořád mi to nefunguje tak, jak má. V čem je chyba? Špatně procházím vnitřní cyklus?
<?php
$this->mapOfImages = array();
foreach ($collections as $col) {
foreach ($arrayImages as $a) {
if($col['id_kolekce'] == $a['kolekce']) {
$this->mapOfImages [$col['nazev']] = array(
$a['id_obrazku'] => $a['popis'],
);
}
}
}
//Když si to dumpnu, tak už mi pracuje i strukturu to má správnou. Akorát, že mi to vypíše u kaže kolekce //pouze jednorozměrné pole s jedním prvkem.
//dump mi vypisuje toto:
array(4) {
"Zima" => array(1) {
34 => "Jedna" (5)
}
"Jaro" => array(1) {
3 => "obrázek 3" (31) // zde by se se měl vypsat i 1 => obrázek 1, 2 => obrázek dva
}
"Léto" => array(1) {
35 => "Tři" (4)
}
"Podzim" => array(1) {
33 => "Test" (4)
}
}
?>
Editoval jim.street (2. 12. 2014 23:38)