使用drupal_goto()发送数组

时间:2013-11-18 16:20:49

标签: php drupal-7

我在菜单挂钩中定义了两个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);
}

2 个答案:

答案 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数组。您可以在页码内存储,然后根据此页码调整返回的表单。

您会找到一些示例herehere。 目前更好的方法是使用必须已安装的chaostools(许多模块都必须使用)。没有在线文档:您应该安装advanced-help模块。这是an example of how to do it。小心,这个例子适用于Drupal 6。