Podmínka addConditionOn OR

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

Zdravím mám následující formulář:

	$school = array(
		1 => 'nevím',
		2 => 'základní škola',
		3 => 'střední škola',
		4 => 'VOŠ',
		5 => 'Vysoká škola'
	);

	$form->addRadioList('school_id', '', $school )
		->setRequired( 'Vyberte školu' );

	$form->addText( 'school_name', 'Název školy:' )
		->addConditionOn( $form['school_id'], Form::EQUAL, 2 )
		->addConditionOn( $form['school_id'], Form::EQUAL, 3 )
		->addConditionOn( $form['school_id'], Form::EQUAL, 4 )
		->addConditionOn( $form['school_id'], Form::EQUAL, 5 )
			->setRequired( 'Zadejte jméno školy' );

Pokud uživatel vybere v radio listu jednu ze škol: 2 až 5, musí být povinný textbox school_name
Jak na to? Moje ukázka nikdy nepožaduje vyplnit pole school_name

Co dělám špatně?
Děkuji

David Matějka
Moderator | 6445
+
0
-

bud

  1. IS_IN
  2. negace pravidla:
->addConditionOn($form['school_id'], ~Form::EQUAL, 1)
motorcb
Člen | 552
+
0
-

@matej21 Paráda, díky. A co když mám:

$school = array(
    1 => 'nevím',
    2 => 'základní škola',
    3 => 'střední škola',
    4 => 'VOŠ',
    5 => 'Vysoká škola'
);

$form->addRadioList('big_school', 'Vysoká škola', arraz( 0 => 'Ne', 1 => 'Ano') )
    ->setRequired( 'Zadejte vysoká škola' );

$form->addRadioList('school_id', '', $school )
    ->setRequired( 'Vyberte školu' );

$form->addText( 'school_name', 'Název školy:' )
    ->addConditionOn( $form['is_school'], Form::EQUAL, 1 )
    ->addConditionOn( $form['school_id'], ~Form::EQUAL, 1 )
        ->setRequired( 'Zadejte jméno školy' );

Kde school_name má být povinný když je studovaná vysoká škola ( big_school == 1) NEBO school_name !=1 ?

Jak to zapsat? Tento zápis bere pouze první podmínku:

    ->addConditionOn( $form['is_school'], Form::EQUAL, 1 )
    ->addConditionOn( $form['school_id'], ~Form::EQUAL, 1 )
David Matějka
Moderator | 6445
+
0
-

to bude snazsi tam dat callback

->addCondition(function() use ($form) {
	return ...; //true nebo false
})
motorcb
Člen | 552
+
0
-

Díky!
Toto mi hlásí chybu: Object of class Nette\Forms\Controls\RadioList could not be converted to int

            ->addCondition(function() use ( $form ) {
                if( ( $form['is_school'] == 1 ) || ( $form['school_id'] != 1 ) )
                {
                    return TRUE;
                }
                else
                {
                    return FALSE;
                }
            })

Jak na to?

David Kudera
Člen | 455
+
0
-

->getValue()

Editoval David Kudera (10. 1. 2015 10:49)

motorcb
Člen | 552
+
0
-

Ano, tohle funguje. ALE nezobrazí Javascriptovou hlášku Zadejte jméno školy. Vypíše tuto chybu do eorrů u formuláře.
Dokážu nějak zachovat JS hlášku o nevyplnění pole?
Díky

->addCondition(function() use ( $form ) {
    if( ( $form['is_school']->getValue() == 1 ) || ( $form['school_id']->getValue() != 1 ) )
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
})->setRequired( 'Zadejte jméno školy' );
Jan Endel
Člen | 1016
+
0
-

Vlastní validace takto jsou jenom v php, na klient side si je musis doimplementovat sam.

motorcb
Člen | 552
+
0
-

Díky, a nějaký nástřel jak na to? Odkaz na nějakou dokumentaci? Řešilo se to někde?

Díky

Jan Endel
Člen | 1016
+
0
-

tohle bohužel s nette nemá moc co společného, je to čistý js před odesláním formu, zkus drobátko pogooglit :-).

David Matějka
Moderator | 6445
+
0
-

@JanEndel ale ma :P

@motorcb zkus https://github.com/…alidator.php