【问题标题】:Programmatically update CCK List allowed values on an ajax callback attached to a dependent field以编程方式更新附加到依赖字段的 ajax 回调上的 CCK 列表允许值
【发布时间】:2014-06-02 15:45:03
【问题描述】:
嗨,我真的很困惑。我一直在努力让它工作一段时间,并且几乎把我的大部分头发都拔掉了!..
我有一个 CCK 列表(文本)选择字段,其中的选项是根据另一个字段的值使用 ajax 填充的。问题是,我没有为选择字段设置任何“允许值”,因为它们是在表单完成期间以编程方式填充的。这会导致以下问题:
- 即使列表元素设置为“无限”,也只能选择 1 个值
- 保存表单出现非法选择错误
- 编辑表单不会设置默认值
我理解为什么会发生这种情况,但不知道如何以干净的方式解决它。
我曾尝试在 ajax 调用期间更新字段允许的值,但随后我得到“具有现有数据的列表字段 ___ 不能更改其键。”
谢谢
【问题讨论】:
标签:
drupal
drupal-7
cck
form-api
【解决方案1】:
好的,我设法让这个工作..
我已经实现的是根据另一个包含 ajax 回调的字段的值动态更新现有 CCK 字段的选择列表值,以使用更新的值重新渲染 CCK 字段。
现在,如果使用表单 API 从头开始创建表单/元素,这将是小菜一碟,但有时在使用实体和现有字段时,这不是一个选项。
简而言之,我做了以下事情:
- 更新字段设置以使用 allowed_values_function
- 实现填充CCK字段列表的自定义函数
- 使用 get/set_variable 在 ajax 调用之间存储允许的值
- 使用 hook_field_attach_validate 删除任何“非法选择”。 core list.module 产生的错误