Kdyby/Replicator – zmena poctu polozek – „sablony“
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Kurtas
- Člen | 109
Ahoj,
pouzivam Replicator kde defaultne mam pridane 3 polozky, uzivatel muze
pridavat/mazat jednotlive polozky.
Nyni bych chtel do formulare pridat SelectBox kde si uzivatel vybere nejakou
sablonu, submitne se form a replicator nacte urcity pocet polozek a zaroven je
nejak predvyplneni.
Prevyplneni jsem nasel v jine diskuzi, ale nevim jaka je best practise na zmenu poctu polozek pomoci callbacku na tlacitku
<?php
/** @var \Kdyby\Replicator\Container $doors */
$doors->setDefaults(array(
1 => array('dvere_cislo' => 1, 'dvere_nazov' => 'Hnědé'),
2 => array('dvere_cislo' => 2, 'dvere_nazov' => 'Zelené'),
3 => array('dvere_cislo' => 3, 'dvere_nazov' => 'červené'),
));
?>
EDIT: Zjistil jsem ze replikator vytvori X polozek podle toho co se mu podstrcit do setDefaults(), jen nechapu proc se nemeni pocet polozek a jejich default hodnoty pri zmene hodnoty nad polickem templates. Fireloggerem jsem si overil ze opravdu podsouvam spravne pole
<?php
$template = $this->addSelect("templates", null, array(0 => "2 row", 1 => "3 rows"))->setPrompt("Select templates");
$loadBtn = $this->addSubmit('load', 'Load');
$loadBtn->setValidationScope(FALSE)
->onClick[] = callback($this, 'loadTemplate');
$legs_default=array(
0 => array(),
1 => array(),
2 => array(),
);
if($template->getValue() !== null ){
if((int)$template->getValue()==1){
$legs_default=array(
0 => array('definition' => "test"),
1 => array('definition' => "test2"),
2 => array('definition' => "test3"),
);
}if((int)$template->getValue()==0){
$legs_default=array(
0 => array('definition' => "test"),
1 => array('definition' => "test2")
);
}
}
\Nette\Diagnostics\FireLogger::log($legs_default);
$removeEvent = callback($this, 'MyFormRemoveElementClicked');
$legs = $this->addDynamic('legs', function (Container $leg) use ($self,$type,$removeEvent) {
$def = $leg->addText('definition', 'Definition');
$removeBtn = $leg->addSubmit('remove', 'Remove');
$removeBtn->setValidationScope(FALSE) # disables validation
->onClick[] = callback($self, "removeLegClicked");
}, count($legs_default));
$legs->setDefaults($legs_default);
?>
Diky
Kurtas
Editoval Kurtas (14. 7. 2014 15:05)