我的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 :(得分: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,但它的效果一样好。
感谢您的帮助。