差异hook_form_alter()和hook_prepare()

时间:2012-09-05 08:11:59

标签: drupal drupal-7

我对Drupal很新。

我遇到了两种预先填充表单的方法,即hook_form_alter()hook_prepare()

我已经阅读了文档,我相信这两种方法都可以实现我想要的目标。

我想知道为这两个函数创建了什么?是否有一个指定功能的左右?

据我所知,hook_form_alter()采用当前的表单状态,并对其进行操作。这是否意味着此功能是为了改变实际形式本身?比如更改某些字段,或添加自定义字段等等?

另一方面,

Hook_prepare()在填充添加/编辑表单之前接受一个节点并对其进行操作。

假设我正在尝试预先填充表单。 hook_prepare()会成为“正确”的方式吗?或者它真的无关紧要?如果我使用的是webform模块而不是内容类型会怎样?

1 个答案:

答案 0 :(得分:1)

两个钩子完全不同,它们根本不做同样的事情。

只要使用hook_form_alter()构建表单,就会调用

drupal_get_form()。它允许模块以结构化的方式更改与表单相关的元素或元数据(操作字段属性,添加AJAX,添加CSS属性等)。为任何实现它的模块调用钩子。

相反,hook_prepare()用于在节点对象传递给实体表单进行添加/编辑之前对其进行操作。它仅为定义正在准备的节点类型的模块调用。因此,除非您已经定义了一个自定义的“节点类型模块”,否则不会调用此钩子。

简短的回答是99%的时间你会使用hook_form_alter()hook_prepare()仅在一组非常具体的情况下出现,如果您使用的是Webform模块,则不适用于您的情况。