0

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

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

4

1 回答 1

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;
  }
}
于 2013-05-17T05:31:17.833 回答