2011-08-29 47 views
4

我添加了一个字段到一个节点使用hook_form_alter,我可以看到它很好,但现在我想当然也输入在该字段中的数据也保存。我必须做什么才能发生?Drupal保存数据hook_form_alter

回答

4

当您更改表单时,您还需要向模块添加表单提交处理程序;通过这种方式,您的模块将在提交表单时被调用,并且您可以保存您添加的字段的值。

如果有多个按钮,那么最好将提交处理程序添加到您需要采取行动的特定按钮。例如,假设表单有两个提交按钮:“保存”和“删除”;如果使用$form[#submit][] = "my module_form_submit";添加提交处理程序,则即使点击“删除”按钮,也会调用提交处理程序。

据报道在Form buttons can define custom #submit and #validate handlers

所有形式可以有“#validate”以及包含验证和提交处理程序的名单当用户提交数据要执行“#submit”属性。以前,如果表单包含多个提交按钮以启动不同的操作(例如更新记录而不是删除操作),则必须检查传入的$ form_values ['op']是否为点击按钮的名称,然后执行不同的代码根据其价值。

现在,如果需要,可以在每个单独的窗体按钮上定义#validate和#submit属性。

当使用特定按钮提交表单时,将使用其验证和提交处理程序,而不是默认的表单级别。如果没有在按钮级别指定,则将使用表单级别处理程序。

此外,The 'op' element in the form values is deprecated and should not be relied upon报告:

如上所讨论的,每个按钮可以具有 “#validate” 和与其相关联的 “#submit” 功能。因此,应该有一个按钮提交表单并调用正常的$form_id_validate$form_id_submit处理程序。任何需要调用不同验证或提交功能的其他按钮都应该有button-specific functions。还要注意,表单值中的'op'元素(对应于Drupal 5.x中有多个表单时单击的按钮)不应再被依赖并且可能不存在。