Hi,
I need to create a form with a couple of text fields and a few checkboxes. I can not use the 'checkboxes' element, as i need to add some custom attributes to each checkbox elements.
However, i keep running into problems when validation fails for one of the textfields. If one of the checkboxes are checked, then all checboxes appear as checked when drupal displays the validation errors. In other words, Drupal seems to be confused.
I've tried to compare how 'checkboxes' and multiple 'checkbox' elements are rendered, and there seems to be a difference. When using the 'checkbox' element, each checkbox gets its name value like "territory[1]". However, when using the 'checkbox' element, the name value is just "territory". I suspect this might be the reason why Drupal gets confused?
However, how can i get Drupal to understand that i want it to treat my 'checkbox' elements as 'checkboxes'?
Any ideas appreciated!
注释
使用“复选框”,然后创建
使用“复选框”,然后创建您的形式更换主题皮肤功能,增添您在更换主题皮肤功能所需的属性。
想想Drupal的论坛吸?在这里添加您同意:https://www.drupal.org/node/2641072
什么是你的功能需求
嗨,
什么多个复选框代表逻辑?难道各个复选框设置一个不同的字段的值?(例如现场1:黑皮鞋(是/否),现场2:白色的衬衫(是/否))。或者,你有一个字段(E,G,鞋的颜色),并希望用户选择一个独特的价值?
一个复选框表示二进制值(例如,开/关,1/0,真/假)。单选按钮允许人们选择一个独特的价值(如性别男或女)。一组复选框可以代表一对多值(例如检查您要订购的所有食品项目)。
总之,你有什么功能需求。贵的形式代表什么实体。什么是实体的字段(属性)?什么是你试图管理(请详细说明)基础数据对象?
这其中往往是一
这其中往往是在我的眼中钉。
举例来说,我需要建立一个很好的铺出表,在左侧栏的复选框来指示任意元素的形式将采取行动。
有些表的行会被禁用。
还有的复选框元素来做到这一点没有什么好办法。事实上,你不能轻易地在所有禁用单个复选框。常重要的是要在视觉上显示给最终用户的禁用元件。但是如果你使用复选框元素,没有了大量的工作,你没有得到漂亮的单个返回数组,你会与复选框。这是负载的乐趣时,你有可能有它的元素任意数量的单一形式。
噢 - 我差点忘了 - 有复选框,当你渲染复选框元素,这一切都正确的,在一个地方。这使得它基本没用,如果你想格式化表,或者要渲染的复选框在多个点上任何时候。
如果有,让他们返回单个阵列,或单独呈现,并从复选框元素样式选项个人复选框元素链接一个简单的方法,那将是巨大的。
因此,没有人居然有这样做的什么好的建议?我还没有想出未加重实现一个优雅的解决方案。
狼
主题功能
你可以做到这一切,如果你有你的表单主题功能。
在主题功能,您可以使用drupal_render从复选框元素渲染个别复选框,无论你想他们。你也可以做这样的事情改变一个人复选框的#TYPE从设置为隐藏所以在你的表中,可以挑选哪些复选框来显示,同时还具有自己的价值观通过的提交,这样你就不会失去前对于那些复选框 - 现有值。
我有做过没有太多的麻烦。你应该能够轻松地让他们禁用,而不是隐藏的,但我没有这样做(在我的经验Drupal有一个可怜的记录,其#disabled属性,所以它可能不只是工作,立竿见影)。
...
一些快速笔记:
-即使您使用“单选小号 ”(或“复选框上课 '),你仍然可以定义子”单选“自定义属性的元素。见comment_form_alter为例。这工作,因为form_process_radios不会覆盖现有的儿童。
-或者安装#after_build或#process处理程序。
- 有许多地方的Drupal布局复选框在表中(你会注意到在“斑马线”行)。它在主题化阶段完成。检查的代码。
- 对于禁用的表单元素:要小心。读#426056和#227966,并确保相关的错误确实固定在Drupal。尤其是确保已签禁用的按钮保持其状态。(另外:隐藏按钮,而不是禁用它们。)
来自 https://www.drupal.org/node/798744