我有一个内容类型,其实体引用字段引用自定义实体。我需要使用一个选择框,因为自动完成小部件不适合我的情况。但是,我无法一次性加载所有实体作为可选值,因为它们太多(72000+表单甚至不会加载)。因此,我使用视图过滤器将实体引用选择框默认为有限数量的值,然后默认隐藏它。然后我使用ajax依赖下拉列表来显示和填充实体引用选择框,其中包含已过滤的值(我正在使用实现hook_form_alter的模块)。
我的问题是表单不会验证,因为现在我可以在选择框中选择不是默认值的实体引用值。所以我想我应该以某种方式控制实体引用字段的验证规则。是否有捷径可寻?我应该使用哪个钩子?
答案 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;
}
}