Jak dostat data z DB do pole

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

Zdravím, potřeboval bych trochu nakopnout. Mám tabulku v DB ve které jsou 4 buňky. Potřebuju dvě z těchto buněk nějak dostat do pole ve formátu: array(‚buňka1‘=>‚buňka2‘, ‚buňka1‘=>‚buňka2‘… Podle počtu záznamů.
Daří se mi získat pouze jeden jeden záznam, jako jednorozměrné pole array(‚buňka1‘,‚buňka1‘,…
Potřebuju to pro vytvoření radio buttonu ve formuláři. Zatím to mám tak:

...
foreach ($this->model->getGalerie() as $gal) {
           $set_gal[] = $gal->galerie ;
        }
        $form->addRadioList('slozka', 'Volba galerie', $set_gal); // tady potřebuju vypsat buňku1 a jako value buňku2
...

Takto mě to bypíše pouze jednu tu buňku s prázdným value. Jak to provést aby to vyplnilo obě hodnoty?
A ještě jedna podotázka: Jak pak tyto radio butony seřadit vedle sebe aby byly třeba 4 vřadě a pak se udělal nový řádek?
Dřív sem na to použil:

if(($br%4)>"2")
 {
   echo "\t\t</tr><tr>\n";
 }

Ale tady to asi tak lehce nepůjde…

Díky za odpověď. :)

hAssassin
Člen | 293
+
0
-

doporucuju abys sis nechal vypsat obsah $set_gal po pridani zaznamu a jiste poznas co je za chybu ;)

Jinak tezko radit protoze tezko rict co presne vraci $gal->galerie. Pokud vraci cely pole a ne jen jeden zaznam, nebo vraci asociativne klic ⇒ hodnota, tak ty tam appendujes cely pole. Ale to uvidis, kdyz si to nechas vypsat.

Rellik
Člen | 104
+
0
-

Tak to teda ještě upřesním: tabulka v db je následující:

CREATE TABLE IF NOT EXISTS `galerie` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `galerie` varchar(35) COLLATE utf8_bin NOT NULL,
  `slozka` varchar(35) COLLATE utf8_bin NOT NULL,
  `verejna` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=0 ;

Je v ní x záznamů. Z těchto záznamů mě pro daný účel zajímají „galerie“ a „slozka“. V buňce „galerie“ jsou uloženy názvy jednotlivých galerií a v buňce „slozka“, jak už název napovídá, složka ve které jsou fotky příslušné galerie. A já potřebuju tyto dvě hodnoty dostat do toho formuláře. Hodnotu „galerie“ jako název radiobutonu a „slozku“ jako jeho value. Zároveň to musí vypsat všechny záznamy. Tudíž těch radiobuton bude tolik, kolik je záznamů v tabulce. Jinak $gal->galerie vrací právě ty názvy galerií. Funguje to tak jak bych chtěl, jen je problém v tom, že nevím jak přiřadit ještě ty value (slozka)… :(

EDIT:
Už sem na to přišel…

...
foreach ($this->model->getGalerie() as $gal) {
           $set_gal[$gal->slozka] = $gal->galerie ; // tady to chtělo to pole plnit rovnou těmi daty...
        }
        $form->addRadioList('slozka', 'Volba galerie', $set_gal);
...

Jinak mám ještě problém tím zobrazením, ale to už snad taky nějak vykoumám…

Editoval Rellik (11. 1. 2012 19:52)

hAssassin
Člen | 293
+
0
-

Bingo…
Jinak pokud pouzivas default renderer pro formy tak RadioList se vykresli automaticky spravne, ne? Nebo si budes muset napsat vlastni.

Rellik
Člen | 104
+
0
-

Jo vykreslí se to správně, jen to vykresluje pod sebe. Takže když bude mnoho záznamů, tak budu dlouho rolovat dolů, než se dostanu k samotnému formuláři. No nějak to třeba vyřeším.
Jinak tohle je součástí formuláře na upload fotek, který se provádí do vytvořené galerie v jiném formu, kde se vytvoří unikátní složka a název galerie a tato složka se uloží do DB. V tomto formu sem právě řešil výběr patřičné galerie pro upload. To sem zdárně vyřešil. Jen to zobrazení je ještě trochu mimo mé představy… :)
Teď ještě vyřešit automatické menšení fotky na nějaký maximální rozměr a vytvoření její miniatury do předvytvořené složky. V samotném php s tím nemám problém. Jen tady je pro mě mnoho nových věcí, které teprv začínám objevovat… :)

Edit: Nette je fakt supr… Stačilo najít v dokumentaci práci s obrázky a komplet upload je vyřešen… :)

Editoval Rellik (11. 1. 2012 20:43)

hAssassin
Člen | 293
+
0
-

tak misto radio buttonu pouzij select. funkcne to je prakticky to sami a nebudes mit problem s mistem.

Rellik
Člen | 104
+
0
-

Už sem vyřešil i to skládání do řad a slopců:

<table>
    <tbody>
        <tr>
    {var $td=-1}
    {foreach $galerie as $gal}
        {var $br++}
            <td>
                <a href="{link Fotky:default folder=>$gal->slozka}">{$gal->galerie}</a>
            </td>
        {if $td%4>"2"}
        </tr><tr>
        {/if}
    {/foreach}
        </tr>
    </tbody>
</table>

Je to z jiného templatu, ale to je myslím fuk… Jde o to že data jdou na řádek a po každém 4 výpisu se vytvoří nový řádek. Takže to udělá pěknou tabulku… :-) Ono to nette není zase tak moc složité jak se mi zdálo ze začátku. Jen se na to musí jít jinak… :)

bojovyletoun
Člen | 667
+
0
-

Hosiplan by napsal „sodoma gomora“, vrána „mraky balastního kódu, který nenese absolutně žádnou myšlenku a v aplikaci je jen proto, že někdo neměl dost invence na to, aby vymyslel, jak se bez něj obejít
Elegantněji by to vyřešil zápis $iterator->isLast https://latte.nette.org/cs/tags#…) ,případně jeho zápis v latte

{block content}
<table>
{foreach [1,2,3,4,54,6,6,76,5,4] as $j}
	<tr><td>{$j}
	<tr n:last=4><td>...</tr>
{/foreach}
</table>

Viz https://latte.nette.org/cs/tags#…

Rellik
Člen | 104
+
0
-

Sodoma gomora, možná. Nějak se začít musí. Jinak s tím n:last=4 to nepůjde, protože já ten vložený tag začínám uzavíracím tagem </tr> ;-)

Filip Procházka
Moderator | 4668
+
0
-
{if $iterator->isLast(4)}</tr><tr>{/if}
Rellik
Člen | 104
+
0
-

No a v čem je to kratší… Pouze o to nadefinování té proměnné $td :) Ten můj způsob je sice kostrbatější, ale ve výsledku vyjde nastejno… :-) Ale díky za radu, zase sem o něco chytřejší… :)

22
Člen | 1478
+
0
-

zbytečná proměnná navíc !== ve výsledku vyjde nastejno

Editoval 22 (18. 1. 2012 18:17)

rixi
Člen | 109
+
0
-

pripadne by si mohol pouzit metodu fetchPairs('zlozka', 'galerie'), takto by nasledovny foreach mohol odpadnut

foreach ($this->model->getGalerie() as $gal) {
	$set_gal[$gal->slozka] = $gal->galerie ; // tady to chtělo to pole plnit rovnou těmi daty...
}