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

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)*



?>
Azathoth
Člen | 495
+
0
-

No tak to znamená, že klíč ‚Jaro‘ máš dvakrát a u selectboxu se klíče nesmí opakovat, tedy se vyhodí error.

jim.street
Člen | 26
+
0
-

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

Podla mňa v tej hláške je presne uvedené, čo je problém. Dumpni si $this->mapOfImages a uvidíš.

jim.street
Člen | 26
+
0
-

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)