我为基于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变量做一些聪明的事吗?
答案 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();