Как программно отменить обязательность заполнения поля в форме?

Главные вкладки

Аватар пользователя engenes engenes 9 января 2020 в 11:57

Хочу сделать, чтобы в форме оформления заказа в зависимости от галки в одном поле, другое становилось необязательным для заполнения.

написал следующее

<?php
function amkara_form_alter(&$form, &$form_state$form_id){
    
$form['buttons']['continue']['#validate'][] = 'amkara_form_validate_requered';
}
function 
amkara_form_validate_requered(&$form, &$form_state){
    
//form_set_error('field_tel', 'Title cannot be "test"');
    
dpm($form);
    
dpm($form_state);
}
?>
<?php
    
function amkara_form_validate_requered(&$form, &$form_state){
        
//form_set_error('field_tel', 'Title cannot be "test"');
        
unset($form_state['complete form']['commerce_fieldgroup_pane__group_shipping']['field_house']['und']['#required']);
        unset(
$form_state['complete form']['commerce_fieldgroup_pane__group_shipping']['field_house']['und'][0]['#required']);
        unset(
$form_state['complete form']['commerce_fieldgroup_pane__group_shipping']['field_house']['und'][0]['value']['#required']);
        unset(
$form_state['field']['#parents']['commerce_fieldgroup_pane__group_shipping']['#fields']['field_house']['und']['instance']['required']);
        
        
        
dpm($form_state);
    }
?>
<?php
    
function amkara_form_validate_requered(&$form, &$form_state){
        
//form_set_error('field_tel', 'Title cannot be "test"');
        
$form_state['complete form']['commerce_fieldgroup_pane__group_shipping']['field_house']['und']['#required'] = false;
        
$form_state['complete form']['commerce_fieldgroup_pane__group_shipping']['field_house']['und'][0]['#required'] = false;
        
$form_state['complete form']['commerce_fieldgroup_pane__group_shipping']['field_house']['und'][0]['value']['#required'] = false;
        
$form_state['field']['#parents']['commerce_fieldgroup_pane__group_shipping']['#fields']['field_house']['und']['instance']['required'] = false;
        
        
        
dpm($form_state);

    }

?>

то есть думаю, что надо именно в валидации писать условие

но при этом поля почему то являются обязательными для заполнения...

подскажите, что сделать, чтобы отменить обязательность заполнения этих полей

Лучший ответ

Аватар пользователя gun_dose gun_dose 13 января 2020 в 9:50
1

Если менять надо по условию, то нужно делать через states

Комментарии

Аватар пользователя engenes engenes 10 января 2020 в 6:09

Целый модуль из за 4 полей?
все таки хочется понять как это сделать программно, для иметь больший контроль над этим

Аватар пользователя engenes engenes 12 января 2020 в 19:39

То есть в самой форме мы отменяем required, а где писать условие? при проверке формы выходит?
Алгоритм, выходит, такой: если у нас есть какой то условие в зависимости от которого поля должны становиться обязательными, то в любом случае в саму форму можно добавить и обычные поля, а потом во время проверки уже ставить или убирать required?

В общем вопрос я наверное так и решил, пока ждал ответ) снял со всех required через админку а потом при проверке уже написал условие