我是Drupal的新手。
我遇到了两种预填充表单的方法,即hook_form_alter()和hook_prepare()
我已经看过文档了,我相信这两种方法都可以达到我想要的效果。
我想知道这两个函数是用来做什么的?有没有专门为指定功能设计的?
据我所知,hook_form_alter()接受当前的表单状态,并对其执行操作。这是否意味着这个函数是用来改变实际表单本身的?比如更改某些字段,或者添加自定义字段等等?
另一方面,Hook_prepare()获取一个节点并在它填充添加/编辑表单之前对其执行操作。
假设我正在尝试预先填充一个表单。hook_prepare()是不是“正确”的方式呢?或者这真的无关紧要?如果我使用的是webform模块,而不是内容类型,该怎么办?
发布于 2012-09-05 16:38:30
这两个钩子是完全不同的,它们根本不做同样的事情。
每当使用drupal_get_form()构建表单时,都会调用hook_form_alter()。它允许模块更改元素或元数据(操作字段属性、添加AJAX、添加CSS属性等)。以结构化的方式与表单相关。任何实现钩子的模块都会调用钩子。
相反,hook_prepare()用于在将节点对象传递给实体表单进行添加/编辑之前对其进行操作。它只为定义正在准备的节点类型的模块调用。所以,除非你定义了一个自定义的“节点类型模块”,否则这个钩子将不会被调用。
简而言之,99%的时间你会使用hook_form_alter()。hook_prepare()只有在一组非常特殊的情况下才会出现,如果你使用的是Webform模块,就不适用于你的情况。
https://stackoverflow.com/questions/12277148
复制相似问题