Jak dostat data z DB do pole
- Rellik
- Člen | 104
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
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
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)
- Rellik
- Člen | 104
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)
- Rellik
- Člen | 104
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
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>