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関数でusing$_REQUEST['q']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 に答える