在代码中存储Drupal 7 Web表单


8

我想知道是否有解决方案以代码形式存储Web表单。这样您就可以轻松地在其他站点上复制它们并将它们与您自己的模块捆绑在一起。我正在寻找类似的东西作为视图API。

如果没有可用的功能,那么有多少人对此感兴趣?我可能会开发一个模块,该模块可以处理在Code中存储Web表单。您是否对创建这样的模块有任何担忧?

谢谢Jaap


您是说使用Webform模块创建的表单?
Mołot

1
是的,我的意思是使用Webform模块创建的表单
Jaap Jansma 2014年

1
实际上,这非常容易,只需看看Webform共享是如何做到的。(webform_share_export()webform_share_node_insert()是货币功能)。不能说我赞成使用eval(),但是您可以轻松地将其转换为使用JSON对象/序列化字符串。您需要克服的唯一(小)困难是如何/何时将Webform应用于新节点,当然需要一个节点来附加Webform。
克莱夫(Clive)

Answers:


1

不是真的,也没有必要

  1. 如果您需要可从代码获得的表单,那么从头开始编写Form API表单并不难。与视图相反,您只能将主题的Webform包含在其节点ID中,并且该ID会因站点而异,因此与模块捆绑在一起的Webform表单将不方便。

  2. 如果要将表单与模块捆绑在一起,并且由于任何原因不能使用Form API,则可以使用UUID功能集成Webform共享。它不是纯粹意义上的代码,但是应该可以工作。

  3. hook_form_alter获取特定Web表单的Form API表示相对容易。当然,将来您将无法轻松对其进行更改,但是再次,与观点相反,它很好。如果未显示某些数据,则不会损坏模块。未提供的数据或模块未提供的数据可能会破坏事情。因此,如果模块需要表单,则编辑起来不容易。无论如何,对表单的编辑都需要对模块的代码进行编辑,因此,在这种情况下,Form API代码使事情变得更容易,从长远来看并不难。


1
尽管这是替代方法的一个很好的答案,但我认为希望将Webforms保留在代码中是一个相当合理的要求(我不同意没有必要,或者那是不可能的)。例如,如果您想为基本的Contact表单提供一个模块,然后用户可以通过UI对其进行扩展,那么使用Web表单将是理想的选择。自己构建该UI确实很痛苦。由于webform对象(或数组?)无论如何都位于节点对象上,因此可以非常轻松地对其进行序列化和重新应用
Clive

@Clive但是对于基本的联系,为什么有人需要真正的代码?为什么导出节点(使用UUID功能集成可以将节点导出到模块)不够?
Mołot

该模块是否也同步Webform对象?
克莱夫(Clive)

据我记得,@ Clive 有一些问题,但是可以。哦,如果自定义代码需要来自表单的数据,那么将其设置为Webform会不会很危险?我不知道在Webform中无法对字段进行抵抗删除的方法(但我承认我看上去并不那么努力)。
Mołot

1
确实,甚至有Webform补丁程序可以使集成工作。我收回它了:)
克莱夫(Clive)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.