为什么我不能将字段移动到 Drupal 表单中的字段集中 - 无法获取当前值
我在 Drupal 7 中有一个节点表单,为了为用户简化它,我想使用垂直选项卡功能将其分成几个部分。
使用 hook_form_FORMID_alter() 我可以毫无困难地移动字段。保存节点时,它会正确写入值,并且它们会显示在节点视图中。
但是,当我重新编辑节点时,未设置已移动字段的任何值,因此我实际上丢失了数据。我尝试了各种选项,包括更改 form_state['fields'][field][langcode] 中的 array_parents 值。
(我想知道在预渲染期间移动字段是否会更好。)
有什么想法吗?
I have a node form in Drupal 7, in order to simplify it for the user I want to break it up into sections using the vertical tabs feature.
Using hook_form_FORMID_alter() I can move the fields without difficulty. When the node is saved, it writes the values correctly, and they appear in the node view.
But when I re-edit the node any value for a moved field is not set so I effectively lose the data. I've tried various options including changing the array_parents value in form_state['fields'][field][langcode].
(I wondered whether it would be better to move the fields during pre_render instead.)
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
字段 API 字段默认放置在容器字段类型中。如果要将它们转换为垂直选项卡中的字段集,可以执行以下操作:
更好的解决方案是使用新的 字段组模块,以便您可以通过 UI 而不是在代码中进行这些修改。
Field API fields by default are placed into a container field type. If you want to convert them to a fieldset in the vertical tabs, you can do the following:
A better solution would be to use the new Field Group module so you can make these modifications through the UI, rather than in code.
有时,在表单创建过程的 #after_build 步骤中移动字段项目效果更好。
在 hook_form_alter 中,您可以像这样设置 after build 函数:
然后您可以像这样定义 after_build 函数:
我认为您甚至可以在各个元素上定义 after_build 。
不管怎样,这是在所有模块完成其工作后更改表单的好方法。
Sometimes it works better to move field items around in the #after_build step of the form creation process.
in hook_form_alter, you set your after build function like so:
Then you define your after_build function like so:
I think you can even define after_build on individual elements.
Anyway, it's a good way to alter the form after all the modules have done their thing.