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我编写$_REQUEST['q']using的函数中drupal_set_message(),它显示了良好的重定向(#poll-block),但浏览器中的 URL 已编码。

有谁能够帮助我?

提前致谢。

4

1 回答 1

1

根据FAPI 参考,您可以输入要传递给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,否则您的努力可能毫无用处。

于 2012-08-03T20:30:58.757 回答