odebrání validačního pravidla

d@rkWolf
Člen | 163
+
0
-

Zdravím, měl bych 2 dotazy k formulářům, pokud by mi někdo dokázal poradit? Předem dík.

1. je možné nějak odebrat validační pravidlo ve formuláři?

Mám komponentu s formulářem, který používám pro vkládání a editaci, přičemž při vložení tam mám 2 varianty přepínané radiem, buď si uživatel vybere obrázek s odkazem, nebo blok s editorem, kde si může stvořit co chce, přičemž tam mám pravidlo, že pokud si vybere obrázek, musí ho zadat(bez nahrání obrázku by výstup neměl smysl), jenže při editaci mě pak toto pravidlo blokuje uložení i v případě, že tam obrázek uložený je a uživatel upravuje pouze nějakou jinou položku. Nebo jak se dá formuláři říct, že je obrázek vyplněný? Při úpravě natahuju data z DB a vyplňuju default hodnoty, nicméně upload input vyplnit nemůžu, když nechci obrázek měnit. Používáte někdo podobný formulář, jak se to dá vyřešit?

2. je možné ověřovat 2 položky ve formuláři proti sobě?

Mám datumy od-do, ale potřeboval bych to ověřovat, zda jsou vyplněné oba, nebo žádný. Podařilo se mi ale pouze nastavit to tak, že když vyplním první, zvýrazní se nutnost druhého-opačně to ale nejde(dostanu chybu, že systém nezná ověřované pole-je až další, takže zřejmě ještě neexistuje, nebo nevím).

Rob Bob
Člen | 60
+
+3
-

Oboje je možné, budeš potřebovat addConiditonOn(), viz
https://doc.nette.org/…s/validation#…

Pokud tuto metodu znáš a nevíš si s tím rady, napiš řešení, které máš hotové a pak ti ho pomůžeme opravit.

Editoval Rob Bob (6. 2. 2018 11:30)

d@rkWolf
Člen | 163
+
0
-

No, mám to takto:

obrázek:

<?php
$form->addRadioList('type','Typ pop-upu', $type)
                ->setRequired('Vyberte!')
                ->setDefaultValue('type-img')
                ->addCondition($form::EQUAL, 'type-img')
                    ->toggle('sec-frm-popupFormControl-popupForm-img')
                    ->toggle('sec-frm-popupFormControl-popupForm-img_link')
                ->endCondition()
                ->addCondition($form::EQUAL, 'type-html')
                    ->toggle('sec-frm-popupFormControl-popupForm-text')
                ->endCondition();
        $form['type']->getItemLabelPrototype()->addAttributes(array("class" => "radio"));
        $form['type']->getLabelPrototype()->addAttributes(array("class" => "label"));
        $form['type']->getSeparatorPrototype()->setName(null);
$form->addUpload('img', 'Obrázek')
     ->setAttribute('class', 'form-control')
     ->addConditionOn($form['type'], Form::EQUAL, 'type-img')
          ->addRule(Form::FILLED, 'Obrázek je vyžadován!');
?>

Od – Do:

<?php
$form->addText('show_from', 'Od')
        ->setAttribute('class', 'form-control datepicker');
$form->addText('show_to', 'Do')
        ->setAttribute('class', 'form-control datepicker')
        ->addConditionOn($form['show_from'], Form::FILLED)
             ->addRule(Form::FILLED, 'Je třeba vyplnit oba datumy, nebo žádný!');
?>

jak sem psal nahoře, funguje mi jen jednosměrně, vyplním „Od“, vyžaduje se vyplnění „Do“, ale jak to udělat i pro opačnou variantu, abych to měl zajištěný, sem nepřišel-pokud udělá to samé jako je u „Do“ opačně, řve na mě chyba, že pole je neznámé.

ali
Člen | 342
+
0
-

Vytvor si prvni inputy bez pravidel (oba dva) a pod ne teprve pridej pravidla pres $form[‚show_from‘] a $form[‚show_to‘]

Rob Bob
Člen | 60
+
0
-

1. V prvním případě bych si vytvořil nějaký hidden input $form->addHidden("imgExists", false), který v případě editace a existujícího obrázku nastavíš na true.

<?php
$form->addUpload('img', 'Obrázek')
     ->setAttribute('class', 'form-control')
     ->addConditionOn($form['type'], Form::EQUAL, 'type-img')
     ->addConditionOn($form['imgExists'], Form::EQUAL, false)
          ->addRule(Form::FILLED, 'Obrázek je vyžadován!');
?>

U druhého případu si nejprve vytvoříš inputy a potom nastavíš pravidla

<?php
$form['show_from']->addConditionOn($form['show_to'], Form::FILLED)
             ->addRule(Form::FILLED, 'Je třeba vyplnit oba datumy, nebo žádný!');
$form['show_to']->addConditionOn($form['show_from'], Form::FILLED)
             ->addRule(Form::FILLED, 'Je třeba vyplnit oba datumy, nebo žádný!');
?>

Editoval Rob Bob (9. 2. 2018 9:29)