欢迎各位兄弟 发布技术文章
这里的技术是共享的
在本文中,我们将了解如何更改表单并插入自定义函数以在表单提交时调用。在Drupal 7中,当用户按下提交按钮时,会调用一个或多个回调函数来处理它。在两者之间,您还可以拥有验证功能 - 您可以在节点添加/编辑表单上看到最佳功能 - 但我邀请您阅读本文,了解有关如何将自己的验证回调添加到现有表单的更多信息。
因此,为了举例说明如何添加自定义回调,让我们调试现有表单并查看其中的内容。让我们使用hook_form_alter()来执行此操作,因此将以下代码抛出到自定义模块中,确保首先安装了Devel模块:
1
2
3
| function your_module_form_alter(& $form , & $form_state , $form_id ) {
dpm( $form );
}
|
清除缓存并编辑节点或添加新节点。您将$form
在调试信息数组中注意到2个元素(数组本身)调用#validate
和#submit
。
第一个包含验证回调,第二个包含提交回调。在此表单上没有提交回调,因为它使用按钮级别处理程序,因此在此处定义回调:
1
| $form [ 'actions' ][ 'submit' ][ '#submit' ]
|
您将必须导航调试信息,您将找到该node_form_submit()
功能:
现在让我们看另一个例子。编辑站点上的任何现有块,并尝试找到阵列的元素#validate
和#submit
元素$form
。您会注意到,此处的回调函数位于更高级别。还有另一个很好的理由,为什么在Drupal开发时,使用Devel进行调试是一个很好的帮助。
设置了一些上下文后,让我们回到手头的工作。在提交表单时,我们如何确保调用自己的自定义功能?我们必须在那里的某处插入我们自己的回调函数。但首先,让我们创建它:
1
2
3
| function custom_callback() {
drupal_set_message( 'This is my custom message' );
}
|
上面我们有一个简单的函数,用于drupal_set_message()
在通常的Drupal位置输出一个字符串。因此,我们希望在用户按下表单上的提交按钮后打印此消息。多么疯狂?
正如您所见,有两个地方可以插入自定义回调函数 - 在按钮级别或更高的表单级别。让我们一起使用节点编辑表单,然后将其插入更高级别,看看会发生什么:
1
2
3
4
五
| function your_module_form_alter(& $form , & $form_state , $form_id ) {
if ( $form [ '#form_id' ] == 'article_node_form' ) {
$form [ '#submit' ][] = 'custom_callback' ;
}
}
|
在这里,我们定位文章内容类型的节点编辑表单,并在更高级别插入我们的自定义回调。现在,如果您编辑节点,您应该会看到自定义消息打印到常用节点编辑消息旁边的页面上。需要注意的一点是,它会在常规版之前打印出来。这意味着它在按钮级别处理程序之前被调用。因此,如果我们想要在之后调用它,我们将其添加到那里:
1
2
3
4
五
| function your_module_form_alter(& $form , & $form_state , $form_id ) {
if ( $form [ '#form_id' ] == 'article_node_form' ) {
$form [ 'actions' ][ 'submit' ][ '#submit' ][] = 'custom_callback' ;
}
}
|
由于函数名是函数数组中的第二个,因此它被调用为second,并且在正常节点处理发生后我们的消息被打印出来。同样,在块配置表单中,您所要做的就是按照您想要调用的函数的正确顺序添加回调。这就是你如何能够加入Drupal Form API并做一些很酷的事情。喜欢在表单提交后重定向到另一个页面。
希望这可以帮助。
我的名字是丹尼 SIPOS,我是一个Drupal的web开发位于布鲁塞尔,比利时,这本书的作者Drupal的8模块开发。我从事大型和小型项目,以及在此处撰写技术文章,但也在Sitepoint.com,TutsPlus或DigitalOcean上。
不要犹豫,伸出手,如果我可以用你的项目帮助你。
评论
回调函数
有用 用于向Drupal中的现有表单添加自定义回调函数的信息。
答复
如何使用自定义模块将文件从Drupal推送到Alfreso
我必须将多个文档从Drupal上传到Alfresco存储库,并且与Drupal中的报告相同。因为我已经使用CMIS模块与Drupal集成。
为了实现所有这些,我必须遵循以下步骤:
为最终用户提供表单以添加详细信息和上载文件。
创建的表单应包含文件字段,该字段在alfresco存储库中存储数据而不是Drupal。
使用drupal中的Views创建包含上传内容和文件的报告,我可以在其中查看和访问上传的文件。
如果我在任何方法中获得上述解决方案,我会非常有帮助。即使,
在此先感谢:)
答复
自定义回调函数未调用
这不起作用
$ form ['actions'] ['submit'] ['#submit'] [] ='custom_callback';
答复
来自 https://www.webomelette.com/drupal-custom-form-callback-submit-button