需要Drupal多个自定义字段,如果字段为空则传递验证

时间:2018-01-09 14:00:02

标签: php drupal-7 drupal-modules

我已经构建了一个包含多个值的自定义字段。我需要这个领域。但是如果至少填充了一个字段并且最后一个字段为空,我想通过验证。

但我的问题是Drupal警告我最后(空)字段是必需的。我认为hook_field_is_empty()解决了问题,但即使返回true,表单也无法验证。

非常感谢你的帮助。

实施:

function MYMODULE_field_widget_form(...) {
    $element['address']+=[
      ...
      '#required' => $instance['required'],
    ];
    ...
}

function MYMODULE_field_is_empty($item, $field) {
    if (empty($item['address']) && empty($item['other'])) {
        return true ;
    }
    return false ;
}

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我没有要求我的字段(在节点字段的定义中)。然后,我使用#validatehook_form_alter()中添加了回调。在该回调中,我测试是否定义了至少一个字段,如果没有定义则调用form_set_error()

这是有道理的,因为它不是可以知道节点的所有数据的字段本身。但是,有些事情有点不对,因为它无法按要求标记该字段(例如星号)。

<?php

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($formid == ...) { // a specific case
    array_unshift($form['#validate'], '_MYMODULE_validate_form') ;
  }
}

function _MYMODULE_validate_form(&$form, &$form_state) {
  if (empty($form_state['values']['field_geo'][LANGUAGE_NONE][0]['address'])) {
    form_set_error('field_geo', t('You have to define at least one address.')) ;
  }
}

?>