如何将Drupal表单提交到任何其他内部页面?

时间:2010-10-20 10:08:22

标签: php forms drupal-6

我的Drupal表单有问题。想不出解决问题的方法,我想知道是否有任何大脑可以解决我的问题。

我有这样的表格:

<?php
function mymodule_myform(){
  $form['#action'] = url('search/cards');
  $form['whatwhere']['what'] = array(
    '#type' => 'textfield',
    '#title' => t('What?'),
    '#maxlength' => 80,
    '#required' => TRUE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Search'),
  );
}
?>

正如您所看到的,应该将所有信息提交给www.example.com/search/cards。 这确实会将我的表单提交到所需的URL。但是,如果没有定义路径的mymodule_menu()挂钩,它将以404结尾。

所以我补充说:

<?php
function mymodule_menu(){
  $items['search/%'] = array(
    'title'  => t('Search Results'),
    'page callback' => 'mymodule_main',
    'access arguments' => array('access content'),
    'file' => 'mymodule.inc',
    );
}
?>

并且,在mymodule.inc文件中,我将创建我的函数mymodule_main()

<?php
function mymodule_main(){
  print_r($_POST);
  die(); // ### Note the die(); ###

  return 'Just searched: '. $_POST['what'];
}
?>

如果我完全保留它,当然PHP将在屏幕上打印表单信息后立即结束脚本执行。一切都好!

但是,如果我删除die(),似乎该函数被调用两次,第二次调用不再填充$ _POST ..似乎mymodule_menu()以某种方式覆盖任何形式提交处理程序正在......

问题是:如何在没有404的情况下将表单提交到任何其他内部页面并保留表单信息?

提前致谢。

3 个答案:

答案 0 :(得分:1)

我认为您需要使用http://api.drupal.org/api/function/search_box_form_submit/6

中描述的方法

function MODULE_block_form_submit($form, &$form_state)  
{  
    if (isset($_REQUEST['destination'])) {  
        unset($_REQUEST['destination']);  
    }

    if (isset($_REQUEST['edit']['destination'])) {  
        unset($_REQUEST['edit']['destination']);  
    }  

    $form_state['redirect'] = 'search/cards/'. trim($form_state['values']['whatwhere']);  
}

答案 1 :(得分:0)

我不确切知道,但是您的代码可能与drupal的内置搜索模块冲突?

答案 2 :(得分:0)

经过一番辩论@ drupal论坛(which can be followed here)的结论是:不可能有一个菜单回调处理表单结果。您可以使用表单提交处理程序(一如既往),然后重定向到菜单回调。 它不是菜单回调的POST,但它的效果一样好。

感谢您的帮助。