实体引用字段和从属下拉列表

时间:2013-05-16 17:11:41

标签: drupal drupal-7 drupal-modules

我有一个内容类型,其实体引用字段引用自定义实体。我需要使用一个选择框,因为自动完成小部件不适合我的情况。但是,我无法一次性加载所有实体作为可选值,因为它们太多(72000+表单甚至不会加载)。因此,我使用视图过滤器将实体引用选择框默认为有限数量的值,然后默认隐藏它。然后我使用ajax依赖下拉列表来显示和填充实体引用选择框,其中包含已过滤的值(我正在使用实现hook_form_alter的模块)。

我的问题是表单不会验证,因为现在我可以在选择框中选择不是默认值的实体引用值。所以我想我应该以某种方式控制实体引用字段的验证规则。是否有捷径可寻?我应该使用哪个钩子?

1 个答案:

答案 0 :(得分:0)

将实体引用字段设置为自动完成,并使用$form['field_entity_ref']['#access'] = FALSE完全以您的格式将其从流程中取出。这应该可以解决验证问题。 (当然,“field_entity_ref”就是我所说的实际参考字段。

如果仍然需要,请将自己的验证添加到表单中。

最后,实施hook_node_presave()以手动输入自定义ajax下拉框的值。

因此,如果您的自定义ajax选择框名为my_custom_ref,那么它看起来像这样:

function mymodule_node_presave($node) {
  if (isset($node->my_custom_ref)) {
    $node->field_entity_ref[$node->language][0]['target_id'] = $node->my_custom_ref;
  }
}