Вы здесь

#states и обязательное поле

1

Здравствуйте, начал разбираться с #states. Вроде бы всё ясно за исключением того, что надо делать с обязательными полями. Как я понял #states изменяет только внешний вид полей.

Собственно, вопрос: Как изменить состояние поля на обязательное, при этом чтобы система его не пропускала пустым? Ведь если написать состояние required, то поле лишь внешне станет обязательным для заполнения.

Версия Drupal: 
7.x
Категория: 
Form API
Вопрос задан 13.05.2015 - 12:48

Ответы

2

http://xandeadx.ru/blog/drupal/813

  • по умолчанию делаете поля #required
  • альтерите форму
  • вешаете #after_build
  • в #after_build исходя из значений формы удаляете #required

ну или пишите свою validate функцию формы

Ответ дан 13.05.2015 - 14:21
Аватар пользователя xandeadx
xandeadx
1542

Не подскажите, как можно прочекать в after_build есть required или нет? Реализовано так:

function test_form_realty_node_form_alter(&$form, &$form_state){
    $form['field_street']['#states'] = array(
        'visible' => array(
            ':input[name="field_type[und]"]' => array(
                'value' => 'Сдам',
            ),
        ),
        'required' => array(
            ':input[name="field_type[und]"]' => array(
                'value' => 'Сдам',
            ),
        ),
    );

    $form['#after_build'][] = 'test_after_build';

}
function test_after_build(&$element) {
    $element['#required'] = TRUE;

    foreach (element_children($element) as $key) {
        test_after_build($element[$key]);
    }

    return $element;
}
Комментарий оставлен 15.05.2015 - 20:28