0

我对 Drupal 比较陌生。

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

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

我想知道这两个函数是为了什么而创建的?有没有为指定功能制作的?

据我了解, hook_form_alter() 采用当前的表单状态,并对其进行操作。这是否意味着这个函数是用来改变实际表单本身的?喜欢更改某些字段,或添加自定义字段等?

另一方面,Hook_prepare() 在填充添加/编辑表单之前获取一个节点并对其进行操作。

假设情况是我正在尝试预填充表单。hook_prepare() 会是“正确”的方法吗?还是真的没关系?如果我使用 webform 模块而不是内容类型怎么办?

4

1 回答 1

1

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

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

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

简短的回答是 99% 的时间你会使用hook_form_alter(). hook_prepare()仅在一组非常特定的情况下进入等式,如果您使用的是 Webform 模块,则不适用于您的情况。

于 2012-09-05T08:38:30.273 回答