php - 需要Drupal多个自定义字段,如果字段为空则通过验证

标签 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 ;
}

最佳答案

为了解决这个问题,我将我的字段设置为不需要(在节点字段的定义中)。然后,我使用 hook_form_alter()#validate 中添加了一个回调。在该回调中,我测试是否至少定义了一个字段,如果未定义,则调用 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.')) ;
  }
}

?>

关于php - 需要Drupal多个自定义字段,如果字段为空则通过验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48169841/

相关文章:

drupal - 以编程方式创建 Drupal 7 字段组

drupal-6 - 钩子(Hook)用户() : inserting extra field into database not just form

php - 在php中搜索非好友用户

php - mysql查询查找最常见的号码及其相邻号码

drupal - 应用 "text-decoration: none"时链接文本仍然带有下划线

Drupal 6 - 模块中的自定义节点类型模板

php - 德鲁帕尔 7 : how to get the modules list

php - Get_the_terms - 显示所有帖子类型

php - 将 .db 文件导入 MySql 数据库

鼠标悬停时下拉菜单