addCondition a elseCondition

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

Zdravím, prosím o radu.
Vo formulári mám Select, v ktorom sa dajú vybrať 3 možnosti. Pri každej možnosti potrebujem zobraziť cez toggle iné inputy.
addCondition mi toggluje správne ale elseCondition nefunguje – input fyzospsc je neustále viditeľný.
Ďakujem

$form->addSelect('persontype', 'Právna forma:', $personType)
    ->setPrompt('Vyberte')
    ->setAttribute('class', 'form-control')
    ->addCondition($form::EQUAL, 'Právnická osoba')
        ->toggle('pravospsc')
        ->toggle('pravostel')
        ->toggle('pravoskupaauta')
        ->toggle('poistnaudalost')
        ->toggle('pzpvinychpoi')
        ->toggle('intervalplatby')
    ->elseCondition($form::EQUAL, 'Fyzická osoba - občan')
        ->toggle('fyzospsc');
CZechBoY
Člen | 3608
+
0
-

edit: tohle nefunguje

Je potřeba skrýt fyzopsc input pokud není vybrána volba Fyzická osoba - občan.
Myslím, že se to dělá nějak takhle

$form->addSelect('persontype', 'Právna forma:', $personType)
    ->setPrompt('Vyberte')
    ->setAttribute('class', 'form-control')
    ->addCondition($form::EQUAL, 'Právnická osoba')
        ->toggle('pravospsc')
        ->toggle('pravostel')
        ->toggle('pravoskupaauta')
        ->toggle('poistnaudalost')
        ->toggle('pzpvinychpoi')
        ->toggle('intervalplatby')
        ->toggle('fyzospsc', false)
    ->elseCondition($form::EQUAL, 'Fyzická osoba - občan')
        ->toggle('fyzospsc');

Editoval CZechBoY (28. 9. 2016 11:50)

majo1
Člen | 103
+
0
-

@CZechBoY žiaden efekt :/

Editoval majo1 (28. 9. 2016 11:27)

CZechBoY
Člen | 3608
+
0
-

Zkusil jsem si to teda u sebe

protected function createComponentForm()
    {
        $form = new Form();

        $abcID = 'abc-container';
        $defID = 'def-container';
        $ghiID = 'ghi-container';

        $form->addText('abc', 'ABC')
            ->setOption('id', $abcID);
        $form->addText('def', 'DEF')
            ->setOption('id', $defID);
        $form->addText('ghi', 'GHI')
            ->setOption('id', $ghiID);

        $form->addSelect('a')
            ->setItems(['abc', 'def'], false)
            ->addCondition(Form::EQUAL, 'abc')
                ->toggle($abcID)
                ->toggle($ghiID)
            ->elseCondition()
                ->toggle($defID);


        return $form;
    }

a chová se to jak potřebuješ. Zvolím abc jsou vidět pouze abc a ghi inputy, zvolím def je vidět pouze def input.

Editoval CZechBoY (28. 9. 2016 11:49)

majo1
Člen | 103
+
0
-

asi niekde robím chybu :) Pri prepínaní selectu inputy len menia poradie, zdá sa.
prikladám môj celý formulár,
ďakujem za ochotu

	public function createComponentPzpForm() {
        $form = new UI\Form;

        $todayDate = new DateTime();

        $vehicleType = [
...
        ];
        $form->addSelect('vehicletype', 'Druh vozidla:', $vehicleType)
            ->setPrompt('Vyberte')
            ->setAttribute('class', 'form-control');

        $form->addInteger('rokvyroby', 'Rok výroby:')
             ->addRule(Form::RANGE, 'Rok výroby môže byť zvolený od 1800 do 2016', [1800, date('Y')])
             ->setAttribute('class', 'form-control');

        $form->addInteger('objemvalcov', 'Objem valcov v cm<sup>3</sup>: ')
             ->setAttribute('class', 'form-control');

        $form->addInteger('vykonmotora', 'Výkon motora v kW:')
             ->setAttribute('class', 'form-control');

        /*$form->addDate('date', 'Začiatok poistenia:')
            ->setAttribute('class', 'form-control')
            //->setDefaultValue($todayDate->format('d.m.Y'))
            ->setFormat('D.M.Y');*/

        $manifactureBrand = [
 ...
        ];
        $form->addSelect('manifacturebrand', 'Továrenská značka:', $manifactureBrand)
            ->setPrompt('Vyberte')
            ->setAttribute('class', 'form-control');

        $form->addText('model','Model vozidla:')
            ->setAttribute('class', 'form-control');

        $fuelType = [
...
        ];
        $form->addSelect('fueltype', 'Druh paliva:', $fuelType)
            ->setPrompt('Vyberte')
            ->setAttribute('class', 'form-control');

        $form->addText('weight','Najväčšia prípustná celková hmotnosť v kg: (TP 32)')
            ->setAttribute('class', 'form-control');




        $fyzOsOb = "fyzos-ob-container";
        $fyzOsPo = "fyzos-po-container";
        $pravOs = "pravos-container";

        $personType = [
            'Fyzická osoba - občan' => 'Fyzická osoba - občan',
            'Fyzická osoba - podnikateľ' => 'Fyzická osoba - podnikateľ',
            'Právnická osoba'  => 'Právnická osoba',
        ];
        $form->addSelect('persontype', 'Právna forma:', $personType)
            ->setPrompt('Vyberte')
            ->setAttribute('class', 'form-control')
            ->addCondition($form::EQUAL, 'Právnická osoba')
                ->toggle($pravOs)
                ->toggle($fyzOsPo, false)
            ->elseCondition($form::EQUAL, 'Fyzická osoba - občan')
                ->toggle($fyzOsOb)
                ->toggle($pravOs, false);

                $form->addText('pravospsc', 'PSČ držiteľa')
                    ->setOption('id',$pravOs)
                    ->setAttribute('class', 'form-control');

                $form->addText('pravostel', 'Telefónne číslo poistníka')
                    ->setOption('id',$pravOs)
                    ->setAttribute('class', 'form-control');

                $firstCarBought = [
...
                ];
                $form->addSelect('pravoskupaauta', 'Kedy ste si kúpili prvé auto?', $firstCarBought)
                    ->setPrompt('Vyberte')
                    ->setOption('id',$pravOs)
                    ->setAttribute('class', 'form-control');

                $insuranceEvent = [
                    'Nie' => 'Nie',
                    'Áno' => 'Áno',
                    'Doteraz som nemal PZP uzatvorené'  => 'Doteraz som nemal PZP uzatvorené',
                ];
                $form->addSelect('poistnaudalost', 'Spôsobili ste do dnešného dňa poistnú udalosť, ktorá bola hradená z PZP? ', $insuranceEvent)
                    ->setPrompt('Vyberte')
                    ->setOption('id',$pravOs)
                    ->setAttribute('class', 'form-control');

                $form->addSelect('pzpvinychpoi', 'Máte uzatvorené poistenie aj v iných poisťovniach?', [
                    'Áno' => 'Áno',
                    'Nie' => 'Nie',
                ])
                    ->setPrompt('Vyberte')
                    ->setOption('id',$pravOs)
                    ->setAttribute('class', 'form-control');

                $form->addSelect('intervalplatby', 'Interval platby', [
...
                ])
                    ->setPrompt('Vyberte')
                    ->setOption('id',$pravOs)
                    ->setAttribute('class', 'form-control');





                $form->addText('fyzospsc', 'PSČ držiteľa fyz')
                    ->setOption('id',$fyzOsOb)
                    ->setAttribute('class', 'form-control');




        $form->addProtection('Vypršel ochranný časový limit, odešlete prosím formulář ještě jednou');
        return $form;
    }

Editoval majo1 (28. 9. 2016 12:03)

CZechBoY
Člen | 3608
+
+2
-

Ajo, až když jsem si to dal do idečka, který na mě řvalo, tak jsem si toho všiml :-)
Do elseCondition nedáváš podmínku, ale je to jen else větev… proto je asi lepší použít elseCondition + addCondition:

$form->addSelect('persontype', 'Právna forma:', $personType)
            ->setPrompt('Vyberte')
            ->setAttribute('class', 'form-control')
            ->addCondition($form::EQUAL, 'Právnická osoba')
	            ->toggle($pravOs)
	            ->toggle($fyzOsPo, false)
            ->elseCondition()
				->addCondition($form::EQUAL, 'Fyzická osoba - občan')
		            ->toggle($fyzOsOb)
		            ->toggle($pravOs, false);

Editoval CZechBoY (28. 9. 2016 12:12)