web-dev-qa-db-ja.com

オーバーレイモードでフォームを送信した後にユーザーをリダイレクトする方法

次のコードは、ユーザーをnode/add/articleにリダイレクトしますが、オーバーレイを使用しません。

$form_state['redirect'] = 'node/add/article'

node/add/articleをオーバーレイモードで開くにはどうすればよいですか?

3
NPK

あなたはこれを試すことができます、

global $base_url;
$custom_url =  (urldecode(url($base_url, array('query' => array('destination' => '#overlay=node/add/article')))));
$form_state['redirect'] = $custom_url;
0
Abubakar Shams

これは実用的な解決策のようです:

フォーム内:

$form['somebutton']['#submit'] = array('your_custom_callback');

カスタムコールバックを追加する

function your_custom_callback($form, &$form_state) {
  //redirect users to Drupal.org
  $url = "http://drupal.org";

  if (module_exists('overlay') && overlay_get_mode() == 'child') {
    unset($_GET['destination']);
    overlay_close_dialog($url, array('external' => TRUE));
    $form_state['redirect'] = FALSE;
  } else {
    $form_state['redirect'] = $url;
  }
}
1
user16676

上記のコードは私にとってはうまくいきませんでした-カスタムコールバックのoverlay句内に$ form_state ['rebuild'] = TRUE;を含める必要がありました。以下のコードは私のために働きます:-

// the URL of the view I want to redirect to...
$redirect_to = 'manager/dashboard';

if(!empty($redirect_to)) {
    if (module_exists('overlay') && overlay_get_mode()=='child') {
        $form_state['rebuild'] = TRUE;
        unset($_GET['destination']);
        overlay_close_dialog($redirect_to);
        $form_state['redirect'] = FALSE;
    }
    else {
        $form_state['redirect'] = $redirect_to;
    }
}
0
Rod