web-dev-qa-db-ja.com

フォームの送信後にユーザーを前のページにリダイレクトする方法は?

ノードを別のページに追加した後にユーザーをリダイレクトできますが、リンク元の前のページにリダイレクトしたいと思います。今、私は次のコードを使用します:

function user_add_node_form_foto_node_form_alter(&$form, &$form_state, $form_id) {
  $form['actions']['submit']['#submit'][] = 'user_add_node_foto_node_form_submit'; 
}

function user_add_node_foto_node_form_submit($form, &$form_state) {
  $form_state['redirect'] = 'node/add/foto';
}

フォームの送信後にユーザーを前のページにリダイレクトするようにコードを変更するにはどうすればよいですか?

[〜#〜] edit [〜#〜]:すべてのfotoノードタイプには、ノード参照フィールド「field_relate_to_gallery」があります。これを使用して、ビューにギャラリーを作成し、ノードフォームを追加するためのリンクをギャラリーページに追加します。ノード「写真」を追加した後、ユーザーをギャラリーに戻したいのですが。つまり、IDが異なる多数のギャラリーがあり、このフォームを特定の1つのギャラリーにのみリダイレクトすることはできません。

私の解決策誰かが興味を持っている場合。urlモジュールからのノード参照を使用してそれを行いました。これで、ユーザーはギャラリーページから画像を追加でき(ノードフォームを追加するためのリンクがあります)、送信後、ギャラリーページに戻ります。

4
moto

drupal_get_destination() が必要です。この関数は、フォームの送信後にユーザーを元のページにリダイレクトする l() での使用に適した「宛先」クエリパラメータを作成します。したがって、新しいノードを追加するリンクを作成するときは、l()とともにdrupal_get_destination()関数を使用します。例えば...

l('Add new foto', 'path/to/add/a/foto', array('query' => drupal_get_destination()))

それでうまくいくはずです。

7
Chaulky

2つの可能性があります。

  1. $ _SERVER ['HTTP_REFERER']を使用
  2. 現在のページのURL(「from = XYZ」など)に何かを追加して使用します。

一部のブラウザーは$ _SERVER ['HTTP_REFERER']を設定せず、ユーザーがページを直接参照した場合、リファラーヘッダーは存在しないことに注意してください。そのため、戻るリンクを表示しない、デフォルトのスタートページなどにリンクするなど、フォールバックを設定してください。

2
ZioBudda

以前のURLをどこかに保存(変数、セッション、静的変数など)し、送信関数でそれをリダイレクトする方法について、これがあなたに理解をもたらすことを願っています。

 function user_add_node_form_foto_node_form_alter(&$form, &$form_state, $form_id) {
    global $user;
    variable_set('perUrl'.$user->uid,$_SERVER['HTTP_REFERER']);
    $form['actions']['submit']['#submit'][] = 'user_add_node_foto_node_form_submit'; 

    }
function user_add_node_foto_node_form_submit($form, &$form_state) {
global $user;
$form_state['rebuild'] = TRUE;
$form_state['redirect'] = variable_get('perUrl'.$user->uid);
}
0
Yusef