我的首页底部有一个投票块,我想在提交后将投票表单重定向到块。我使用Drupal 6.x.
像往常一样,我使用form_alter
。
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'poll_view_voting':
// not worked also
//$form['#redirect'] = url('', array('fragment' => 'poll-block'));
$form['#redirect'] = '#poll-block';
break;
}
}
提交后,我被重定向到/%2523poll_block
(这是一个404页)。
在preprocess_page
函数中,我使用$_REQUEST['q']
编写了drupal_set_message()
,它显示了良好的重定向(#poll-block),但浏览器中的URL已经过编码。
有人能帮助我吗?
提前致谢。
答案 0 :(得分:2)
根据FAPI reference,您可以输入要传递给drupal_goto()的数组。最终这会经过url()所以请在这里使用你的url()函数的忍者技巧。
基本上,您可以在此处拥有3种类型的数据。 字符串,布尔值FALSE或数组。 如果它是一个字符串,它将在url编码后重定向到正确的位置(在你的情况下会发生什么)。 FALSE将禁用重定向,如果输入数组,它将传递给drupal_goto()。
因此,对于您的情况,它将是:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'poll_view_voting':
// not worked also
//$form['#redirect'] = url('', array('fragment' => 'poll-block'));
//$form['#redirect'] = array('node/54', array('page' => '2'), 'poll-block'); // No "#" in fragment. This will work.
$form['#redirect'] = array('', array(), 'poll-block');
break;
}
}
然而,drupal_goto()通常使用绝对URL,所以除非你使用javascript,否则你的努力可能会毫无用处。