我在菜单挂钩中定义了两个drupal节点,如下所示。第一页是一个界面:一些drupal表单我想要做的是通过submitt函数从第一页提取值,并将用户重定向到下一页,并使用函数drupal_goto()发送这些值。如何将这些值/数组添加到drupal_goto()函数中,然后从目标页面获取它并使用它(方案是这样的:第1页 - 提交 - 获取提交的值---将它们放在一个数组中 - -go到另一个页面并通过使用drupal_goto()函数发送提交的值)
在我的模块模块中:
function my_module_menu() {
$items = array();
$items['admin/interface'] = array( // page one that is some drupal forms
'title' => '',
'page callback' => 'drupal_get_form',
'page arguments' => array('my_module_form'),
'access arguments' => array('access content'),
'file' => 'includes/my_module.form.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['complete-page'] = array( // once the user is redirected to this page I want to use
// the sent array as an argument of the menu function: my_module_function()
'title' => 'complete',
//'page callback' => 'my_module_complete',
//'page arguments' => $query,
'access callback' => TRUE,
'page callback' => 'my_module_function',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function my_module_function($val){
//use the value $val
}
表单功能:
function my_module_form($form, &$form_state) {
//some drupal forms
$form['xxx'] = array(
'#type' => 'type',
'#value' => t('some text'),
);
return $form;
}
在我的submitt函数中,我想提交一些提交的值,将它们放在一个数组中并发送到下一页:
function my_module_submit($form, &$form_state) {
$values = array();
$value1 =$form_state['values']['xxx'];
$value2 =$form_state['values']['form'];
$value3 =$form_state['values']['another_form'];
$values[0] = $value1;
$values[1] = $value2;
$values[2] = $value3;
drupal_goto('complete-page', $values);
}
答案 0 :(得分:0)
drupal_goto
只是将重定向发送回浏览器,这意味着需要在该请求中传递任何数据,或者您可以将其存储在$ _SESSION中。
例如:
drupal_goto( 'complete-page', array( 'query' => array( 'xxx' => $form_state['values']['xxx'] ) ) );
或:
$_SESSION['complete-page']['xxx'] = $form_state['values']['xxx'];
drupal_goto( 'complete-page' );
第一个缺点是提交的值在查询中可见。第二个缺点是它污染了你的会话,并且是一种将数据传送到目的地的相当全面的方式(你应该删除处理程序中完整页面的数据)。
答案 1 :(得分:0)
您不应使用drupal_goto
函数来管理多页表单。你在这里面对的问题是:要提供参数,你必须在url(& param_name = param_value)中提供它们或将它们存储到用户会话中。您还可以通过在每个页面上调用新表单来松开Drupal的缓存机制。
问题是使用表单附带的$form_state
数组。您可以在页码内存储,然后根据此页码调整返回的表单。
您会找到一些示例here或here。
目前更好的方法是使用必须已安装的chaostools
(许多模块都必须使用)。没有在线文档:您应该安装advanced-help模块。这是an example of how to do it。小心,这个例子适用于Drupal 6。