我可以在表单提交中设置带有目标参数的form_state重定向吗?

时间:2010-11-10 09:48:52

标签: drupal drupal-forms

我为基于Drupal的网络应用程序构建了一个“快速链接”下拉选择框。选择框实现为标准Drupal表单,该表单显示在站点的所有页面上。当用户选择一个选项并提交表单时,我想将用户重定向到相应的页面,但是当他们完成后让他们返回到原始页面。

e.g。 user在node / 5上,并选择一个快速链接,将其带到另一个表单。完成此表单后,我希望将它们返回到node / 5。

我已经在系统的其他部分使用drupal_get_destination将?destination = node / 5 querystring参数附加到目标表单来实现这一点,这很有效。但是,在我的快速链接表单提交处理程序中,我设置了form_state ['redirect']来设置目标页面,如果我添加了?destination =参数,它会被URL编码,因此在我的目标时不会被选中表格已提交。

function dh_seo_quick_links_form_submit($form, &$form_state) {
  $form_state['redirect'] = $form['#link_targets'][$link].'?'.drupal_get_destination();
}

我完全走错了路吗?这种重定向甚至可能吗?我可以直接使用$ _REQUEST变量做一些聪明的事吗?

5 个答案:

答案 0 :(得分:11)

这是Drupal 7的一个很好的解决方案,允许你使用相对路径:

$form_state['redirect'] = array(
  'node/[node number]',
  array(
    'query' => array(
      'variable_name' => 'value',
    ),
    'fragment' => 'hash_fragment'
  ),    
);

此代码创建以下网址:

..?node/[node number]&variable_name=value#hash_fragment

这可以让您在利用Drupal框架时获得很大的灵活性。

答案 1 :(得分:5)

好的 - 我已经解决了。似乎如果你在$ form_state ['redirect']中设置了一个相对URL,它会被URL编码,但绝对的URL不会:

$form_state['redirect'] = 'myform?'.drupal_get_destination();

重定向到myform%3Fdestination%3Dnode%252F5

global $base_url;
$form_state['redirect'] = $base_url.'/myform?'.drupal_get_destination();

重定向到myform?destination = node / 5,这就是我想要的。

答案 2 :(得分:3)

您可以为$form_state['redirect']提供数组,并将目标查询作为第二个参数。例如:

$form_state['redirect'] = array(
 'myform', array('query' => drupal_get_destination()),
);

答案 3 :(得分:0)

你的回答为我工作马克。谢谢!

你也可以这样做:

global $base_url;
$form['#redirect'] = $base_url .'/'. $form['#redirect'] .'?test=hello';

答案 4 :(得分:0)

最后我得到了这个解决方案:

global $base_url;
$form_state['redirect'] = $base_url . '/myform?' . drupal_get_destination();