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

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)

David Kudera
Člen | 455
+
0
-

Třeba by ti mohlo pomoct tohle s nějakými úpravami