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

Mar*_*k B 1 drupal drupal-forms

我已经建立了一个"快速链接"下拉选择框为我的基于Drupal的Web应用程序.该选择框被实现为标准Drupal的形式,出现在网站中的所有网页.当用户选择一个选项,并提交表单,我想将用户重定向到相应的页面,而是让他们回到原来的页面时,他们已经完成.

例如,用户是在节点/ 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();
}
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*ley 11

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

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

此代码创建以下URL:

..?node/[node number]&variable_name=value#hash_fragment
Run Code Online (Sandbox Code Playgroud)

这使您可以在利用Drupal框架的同时获得很大的灵活性.


Mar*_*k B 5

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

$form_state['redirect'] = 'myform?'.drupal_get_destination();
Run Code Online (Sandbox Code Playgroud)

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

global $base_url;
$form_state['redirect'] = $base_url.'/myform?'.drupal_get_destination();
Run Code Online (Sandbox Code Playgroud)

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