欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

如何将自定义回调函数添加到现有表单

如何将自定义回调函数添加到现有表单    

发表于                     

在本文中,我们将了解如何更改表单并插入自定义函数以在表单提交时调用。在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并做一些很酷的事情。喜欢在表单提交后重定向到另一个页面。                

希望这可以帮助。                

Danny Sipos的头像                    

我的名字是丹尼 SIPOS,我是一个Drupal的web开发位于布鲁塞尔比利时,这本书的作者Drupal的8模块开发我从事大型和小型项目,以及在此处撰写技术文章,但也在Sitepoint.comTutsPlusDigitalOcean上                            

不要犹豫,伸出手,如果我可以用你的项目帮助你。                            

评论                

               
星期一,2014年7月14日 - 17:11 David Jony提交(未经核实)                    

回调函数                    

有用 用于向Drupal中的现有表单添加自定义回调函数的信息。                                    

               
Tharun Kumar A(未经核实)2015年 12月30日星期三 - 10:34 提交                    

如何使用自定义模块将文件从Drupal推送到Alfreso                    

我必须将多个文档从Drupal上传到Alfresco存储库,并且与Drupal中的报告相同。因为我已经使用CMIS模块与Drupal集成。                                    

为了实现所有这些,我必须遵循以下步骤:                                    

  1. 为最终用户提供表单以添加详细信息和上载文件。

  2. 创建的表单应包含文件字段,该字段在alfresco存储库中存储数据而不是Drupal。

  3. 使用drupal中的Views创建包含上传内容和文件的报告,我可以在其中查看和访问上传的文件。

如果我在任何方法中获得上述解决方案,我会非常有帮助。即使,                                    

在此先感谢:)                                    

               
aditya提交(未经验证)于星期一,11/07/ 2016 - 18:33                    

自定义回调函数未调用                    

这不起作用
$ form ['actions'] ['submit'] ['#submit'] [] ='custom_callback';                                    

来自 https://www.webomelette.com/drupal-custom-form-callback-submit-button


普通分类: