Natavenie defaultValue pre checkBoxList
- cujan
- Člen | 410
Caute
mam na forme checkBoxList , do ktoreho natahujem farby z ciselnika (id,
nazov) napr.modra, zlta, cervena.
Cely form je editovaci form urcitej polozky a ja potrebujem aby ked nacitam form
tak som mal zaskrtnute urcite farby napr. aby bola zaskrtnuta modra a
cervena.
Zoznam Id zaskrtnutych farieb taham z DB a mam ich v poli $farby.
Ako by sa to dalo riesit?
Vdaka
- Vojtěch Dobeš
- Gold Partner | 1316
No, argument předaný setDefaultValue()
musí být pole ve
formátu key
⇒ value
.
V tomto případě to tedy bude pole booleanů, kde klíčem budou klíče předané Checkboxu.
$form->addCheckboxList('farby', 'Farby:', array(
'red' => 'Cervena',
'blue' => 'Modra',
));
$form->setDefaults(array(
'farby' => array(
'red' => TRUE,
'blue' => FALSE,
),
));
- Vojtěch Dobeš
- Gold Partner | 1316
To vůbec nesouvisí s Nette a s poskytnutými informacemi to ani nejde řešit :)
- Draffix
- Člen | 146
cujan napsal(a):
Presnejsie ide o to, ze ja ma farby, ktore maju byt zaskrtnute v db, a odtial si ich viem uz vytiahnut do premennej(1 rozmerne pole) $farby obsahuje (cervena, zelena) len toto pole neviem prerobit na dvojrozmerne… typu $farby(‚cervena‘=>true,‚zelena‘=>false)
No pokud jsem to správně pochopil, tak nepotřebuješ dvojrozměrné pole, ale asociativní pole
- cujan
- Člen | 410
uz som to z casti poriesil, len problem je v tom, ze mi vytvori len pole co ma jeden prvok…
<?php
foreach ($farby as $farba)
{
$pary = array($farba => "true");
}
?>
napriek tomu ak som to aplikoval na prvok
<?php
$form['farba']-> setDefaultValue($pary);
?>
tak nezaskrtne sa ani jedna farba…
Editoval cujan (8. 11. 2012 10:53)
- Vojtěch Dobeš
- Gold Partner | 1316
Přednes svoji potíž na JakPsatWeb, tohle nesouvisí s Nette.
Řešení snad může vypadat takto (ačkoliv bez kontext programu je to tápání):
$farby = array_map(function () {
return TRUE;
), array_flip($farby));
- cujan
- Člen | 410
super pomohlo to…
<?php
//vytvorenie asociativneho pola
$farbyPary = array_map(function () {return TRUE;}, array_flip($farby));
?>
ale este maly problem je v tom, ze ak pouzijem na nastavenie default hodnot
<?php
$form['farba']-> setDefaultValue($farbyPary)
?>
tak mi zaskrtne uplne vsetky farby, ktore su naplnene v checkBoxListe …
- Vojtěch Dobeš
- Gold Partner | 1316
cujan Podívej se na to očima toho, kdo tvůj problém čte. Zjistíš, že ti chybí dost informací… zkus rovnou poslat svůj zdrojový kód, poskytnout co nejvíc informací… takhle ti nikdo pomoct nemůže.
- cujan
- Člen | 410
oki cize toto je form
<?php
protected function createComponentEditForm() {
//nacitanie udajov z ciselnika
$skupina = $this->skupinaRepository->findAllSkupina()->fetchPairs('id','nazov');
$krystalografickaSustava = $this->ciselnikkrystalografickasustavaRepository->findAllKrystalografickaSustava()->fetchPairs('id','vlastnost');
$vryp = $this->ciselnikvrypRepository = $this->ciselnikvrypRepository->findAllVryp()->fetchPairs('id','vlastnost');
$stiepatelnost = $this->ciselnikstiepatelnostRepository = $this->ciselnikstiepatelnostRepository->findAllStiepatelnost()->fetchPairs('id','vlastnost');
$farba = $this->ciselnikfarbaRepository->findAllFarba()->fetchPairs('id','vlastnost');
$lesk = $this->ciselnikleskRepository->findAllLesk()->fetchPairs('id','vlastnost');
$lom = $this->ciselniklomRepository->findAllLom()->fetchPairs('id','vlastnost');
$form = new Form;
//$form ->addHidden('id');
$form -> addText('nazov','Názov minerálu',40,100)->addRule(Form::FILLED,'Je nutné zadať názov');
$form -> addSelect('idSkupina','Skupina',$skupina)->setPrompt('- Zvoľte skupinu -');
$form -> addText('chemickeZlozenie','Chemické zloženie',40,100);
$form -> addSelect('idCiselnikKrystalografickaSustava','Kryštalografická sústava',$krystalografickaSustava)->setPrompt('- Zvoľte sústavu -');
$form -> addSelect('idCiselnikVryp','Vryp',$vryp)->setPrompt('- Zvoľte vryp -');
$form -> addText('tvrdostOd','tvrdosť od',40,100);
$form -> addText('tvrdostDo','tvrdosť do',40,100);
$form -> addSelect('idCiselnikStiepatelnost','Štiepateľnosť',$stiepatelnost)->setPrompt('- Zvoľte štiepateľnosť -');
$form -> addText('hustotaOd','hustota od',40,100);
$form -> addText('hustotaDo','hustota do',40,100);
$form -> addCheckboxList('farba','farba',$farba);
$form -> addCheckboxList('lesk','lesk',$lesk);
$form -> addCheckboxList('lom','lom',$lom);
$form->addSubmit('create', 'Ulož');
$form->onSuccess[] = $this->editMineralFormSubmitted;
return $form;
}
?>
tu je metoda render edit
<?php
public function renderEdit($id=0)
{
$mineralEdit = $this->mineralRepository->findBy(array('id' => $id))->fetch()->toArray();
$farby = $this->mineralfarbaRepository->findBy(array('idMineral'=> $id))->fetchColumn('idFarba');
dump($farby);
$form = $this['editForm'];
$form -> setDefaults($mineralEdit);
$form['idSkupina'] -> setDefaultValue($mineralEdit['idSkupina']);
$form['idCiselnikKrystalografickaSustava'] -> setDefaultValue($mineralEdit['idCiselnikKrystalografickaSustava']);
$form['idCiselnikVryp'] -> setDefaultValue($mineralEdit['idCiselnikVryp']);
$form['idCiselnikStiepatelnost'] -> setDefaultValue($mineralEdit['idCiselnikStiepatelnost']);
//vytvory asociativne pole pre farby (cervena => true...)
$farbyPary = array_map(function () {return TRUE;}, array_flip($farby));
dump($farbyPary);
$form['farba']-> setDefaultValue($farbyPary);
}
?>
- Vojtěch Dobeš
- Gold Partner | 1316
S tím už se lépe odpovídá :). Bylo by asi dobré ještě doplnit do
toho pole ty negativní barvy… teď budou mít všechny TRUE
, a
ty co v poli nejsou, ale jsou ve $farby
v továrničce
formuláře, by se měly přidat s hodnotou FALSE
.
- cujan
- Člen | 410
teraz render edit vyzera takto
<?php
public function renderEdit($id=0)
{
$mineralEdit = $this->mineralRepository->findBy(array('id' => $id))->fetch()->toArray();
$farby = $this->mineralfarbaRepository->findBy(array('idMineral'=> $id))->fetchColumn('idFarba');
$farbyAll = $this->ciselnikfarbaRepository->findAll()->fetchColumn('id');
dump($farbyAll);
$form = $this['editForm'];
$form -> setDefaults($mineralEdit);
$form['idSkupina'] -> setDefaultValue($mineralEdit['idSkupina']);
$form['idCiselnikKrystalografickaSustava'] -> setDefaultValue($mineralEdit['idCiselnikKrystalografickaSustava']);
$form['idCiselnikVryp'] -> setDefaultValue($mineralEdit['idCiselnikVryp']);
$form['idCiselnikStiepatelnost'] -> setDefaultValue($mineralEdit['idCiselnikStiepatelnost']);
//vytvory asociativne pole pre farby (cervena => true...)
$farbyPary = array_map(function () {return TRUE;}, array_flip($farby));
$farbyKomplet = $farbyPary + array_map(function () {return FALSE;}, array_flip($farbyAll));
//foreach ($farby as $farba)
//{
//$pary = array($farba => "true");
//}
dump($farbyKomplet);
$form['farba']-> setDefaultValue($farbyKomplet);
}
?>
dump $farbyKomplet
array(15) {
12 ⇒ TRUE
10 ⇒ FALSE
11 ⇒ FALSE
13 ⇒ FALSE
14 ⇒ FALSE
15 ⇒ FALSE
16 ⇒ FALSE
17 ⇒ FALSE
18 ⇒ FALSE
19 ⇒ FALSE
20 ⇒ FALSE
21 ⇒ FALSE
22 ⇒ FALSE
23 ⇒ FALSE
24 ⇒ FALSE
}
farby komplet uz v tvare ze farby co maju byt zaskrtnute su true a ostatne
su false, len pri zobrazeni mam este stale vsetky zaskrtnute…
neviem ci neude problem v tom ze to pole nie je zoradene…
Editoval cujan (8. 11. 2012 11:44)
- Vojtěch Dobeš
- Gold Partner | 1316
cujan Hluboce se omlouvám za mystifikaci… o který CheckboxList jde?
- cujan
- Člen | 410
o tento
https://componette.org/search/?…
ale pohoda, aj tak ti dakujem za kopu uzitocnych rad… vela som sa naucil a este viac si ma donutil nastdovat si tym ze si ma nakopol…
dikes