2

Drupal ベースの Web アプリ用に「クイック リンク」ドロップダウン選択ボックスを作成しました。選択ボックスは標準の Drupal フォームとして実装され、サイトのすべてのページに表示されます。ユーザーがオプションを選択してフォームを送信すると、ユーザーを適切なページにリダイレクトしたいのですが、終了したら元のページに戻してもらいます。

たとえば、ユーザーは node/5 にいて、別のフォームに移動するクイック リンクを選択します。彼らがこのフォームに記入したら、node/5 に戻してほしい。

drupal_get_destination を使用して ?destination=node/5 クエリ文字列パラメーターを宛先フォームに追加することで、システムの他の部分でこれを実現しました。これはうまく機能します。ただし、私のクイックリンク フォーム送信ハンドラーでは、ターゲット ページを設定するために form_state['redirect'] を設定しています。フォームが送信されます。

function dh_seo_quick_links_form_submit($form, &$form_state) {
  $form_state['redirect'] = $form['#link_targets'][$link].'?'.drupal_get_destination();
}

私はこれについて完全に間違った方法で行ったことがありますか? このリダイレクトは可能ですか?$_REQUEST 変数を直接使用して何か賢いことはできますか?

4

5 に答える 5

12

これは、相対パスを使用できる Drupal 7 の優れたソリューションです。

$form_state['redirect'] = array(
  'node/[node number]',
  array(
    'query' => array(
      'variable_name' => 'value',
    ),
    'fragment' => 'hash_fragment'
  ),    
);

このコードは、次の URL を作成します。

..?node/[node number]&variable_name=value#hash_fragment

これにより、Drupal フレームワークを活用しながら、多くの柔軟性が得られます。

于 2013-02-20T16:57:17.277 に答える
5

OK - 解決しました。$form_state['redirect'] に相対 URL を設定すると、URL エンコードされますが、絶対 URL はエンコードされないようです:

$form_state['redirect'] = 'myform?'.drupal_get_destination();

myform%3Fdestination%3Dnode%252F5 にリダイレクトします

global $base_url;
$form_state['redirect'] = $base_url.'/myform?'.drupal_get_destination();

私が望んでいた myform?destination=node/5 にリダイレクトします。

于 2010-11-10T16:07:48.633 に答える
3

配列を$form_state['redirect']指定して、宛先クエリを 2 番目のパラメーターとして指定できます。例えば:

$form_state['redirect'] = array(
 'myform', array('query' => drupal_get_destination()),
);
于 2012-05-01T16:54:11.253 に答える
0

あなたは私のために働いた答えですマーク。ありがとう!

この方法でも実行できます。

global $base_url;
$form['#redirect'] = $base_url .'/'. $form['#redirect'] .'?test=hello';
于 2011-05-10T06:56:18.663 に答える
0

最後に、私はこの解決策を得ました:

global $base_url;
$form_state['redirect'] = $base_url . '/myform?' . drupal_get_destination();
于 2012-10-05T12:33:56.607 に答える