php - Drupal 表单重定向到片段

标签 php forms drupal redirect drupal-6

我的首页底部有一个投票区 block ,我想在提交后将投票表单重定向到该区 block 。我使用 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 reference , 你可以输入一个数组传递给 drupal_goto() .最终这会经历 url()所以在这里使用你的 url() 函数的忍者技巧。

基本上,您可以在此处拥有 3 种类型的数据。 字符串、 bool 值 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,否则您的努力可能毫无用处。

关于php - Drupal 表单重定向到片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11801975/

相关文章:

php - Gettext 占位符

jquery - 使用 jQuery 对文本输入数组索引重新编号

javascript - 如何清除 angular.js 中的 html 表单?

drupal - 我应该学习哪个版本的 drupal,6 还是 7?

php - 在没有 Web 界面的情况下在 Drupal 中切换主题

php - WordPress http站点登录后一直切换到https

php - 如何组织PHP代码?

Php simplexml 循环将简单元素放入数组中。我该如何摆脱它?

php - codeigniter 表单验证和数组作为字段名称

performance - Drupal 7 在 "first load"上太慢