繁体   English   中英

Drupal表单重定向到片段

[英]Drupal form redirect to fragment

我的首页底部有一个投票块,我想在提交后将投票表单重定向到块。 我使用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已经过编码。

有谁能够帮助我?

提前致谢。

根据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,否则你的努力可能会毫无用处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM