Drupal表单重定向到片段

3

我在我的首页底部有一个投票块,我希望在提交后将投票表单重定向到该块。我使用的是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函数中,我使用drupal_set_message()写了$_REQUEST['q'],它显示了良好的重定向(#poll-block),但浏览器中的URL被编码了。
有谁能帮助我吗?
提前致谢。
1个回答

1
根据FAPI参考文档,您可以输入一个数组来传递给drupal_goto()。最终会通过url()进行处理,因此在这里使用url()函数的技巧。
基本上,您可以在这里有三种类型的数据。字符串、布尔值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,否则您的努力可能是无用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接