2010-10-20 27 views
0

我遇到了Drupal表单的问题。想不到解决问题的方法,我想知道是否有任何大脑能解决我的问题。如何将我的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的情况下将我的表单提交到任何其他内部页面并保留我的表单信息?

在此先感谢。

回答

0

描述的一些争论@ Drupal的论坛(which can be followed here)的结论是,后:这是不可能有一个菜单回调处理表单结果。您可以改为使用表单提交处理程序(一如既往),然后重定向到菜单回调。 这不是菜单回调的POST,但它是一样好。

感谢您的帮助。

0

我不知道确切的,但也许你的代码与Drupal的内置冲突搜索模块?

+0

没有。事实并非如此,我有一个独特的模块名称。 'Search'只是在这个示例上下文中使用。不管怎么说,还是要谢谢你。 – acm 2010-10-20 12:28:24

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']); 
} 
+0

您好MPD,正如标题所述,我想提交(使用POST)到其他页面,而不仅仅是重定向URL中的值...无论如何,感谢您的帮助。 – acm 2010-10-21 08:42:44

相关问题