1                    

我创建了一个表单,如:                    

function create_custom_form($form, &$form_state) {
    $form['#action'] = "#";
        ....
}

function create_custom_form_validate($form, &$form_state) {
        ....
}

function create_custom_form_submit($form, &$form_state) {
        ....
        if(..)
           drupal_goto('abc');
        else
           drupal_goto('xxx');
}
                   

当我在开始行动之前提交此表格drupal并且在阅读我的功能之后...我如何绕过行动表格并只读取_submit功能?                    

                      
改善这个问题                            
于12月3日在9:48编辑                                
                                   
                               
Shakti Singh                                    
66.5k17117141                                    
12月3日在9:44 问                                
                                   
                               
  • 通过添加处理程序到您的提交按钮$form['submit'] = array('create_custom_form_submit'); -  Hamza Waqas  2012年3月30日9:48                                
       

1答案  正确答案 有大用                

活跃的最老                    
       
2                        

不要使用drupal_goto,因为可能有更多的“提交”回调要执行。该drupal_goto功能会中断这些。                        

相反,请使用$form_state['redirect'] = ...http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_redirect_form/7                        

function create_custom_form_submit($form, &$form_state) {
        ....
        if(..)
           $form_state['redirect'] = 'abc';
        else
           $form_state['redirect'] = 'xxx';
}
                       

由于此函数具有相同的形式ID(create_custom_form) - 附加单词“_submit”,因此该函数将自动执行,因此无需在表单中添加任何提交回调。                        

如果您希望在提交时执行其他功能,那么您应该像Hamza所建议的那样执行,只有您的附加功能将具有不同的名称。例如                        

function create_custom_form($form, &$form_state) {
  $form['#action'] = "#";
  ....
  // Add any additional callbacks to call before any redirects happen
  $form['#submit'][] = 'create_custom_form_additional_submit_callback';    
  $form['#submit'][] = ...
}

function create_custom_form_additional_submit_callback($form, &$form_state) {
  // Do something before redirect
  ...
}
                       

在上面的例子中:                        

  • create_custom_form_additional_submit_callback

                       

  • create_custom_form_submit (因为它的名字与'_submit'相同)

将执行,并且只有当它们都完成时才会执行重定向。                        

改善这个答案                            
于12月12日11点44分 回答                                
                                   
                               
  • 我尝试使用$ form_state ['redirect'],但我遇到了同样的问题...如果我在这个假页面中更改了表格动作白色虚假页面drupal重定向而不是按照重定向或转到...我认为在转到行动之前和检查后_submit ... -  Stefano 3月30日在14:50                                    
  • 如果您将表单操作设置为哈希“#”,页面将提交给自己,但是服务器和drupal将永远不会看到您的“#”,即使它在URL中它不是您的服务器的可见字符。由于Drupal正在寻找一个永远不会找到的#,你的提交钩子永远不会发射。如果您希望检测表单是否由您网页上的其他脚本提交,那么为什么不将操作设置为“?submitted = 1” -  Conor Clafferty 于12年3月30日18:51                                     
       

你的答案