在Drupal 7中保存节点上关闭覆盖并重定向到自定义URL?

时间:2012-01-25 23:18:26

标签: drupal

当我的节点表单保存时,我想关闭管理覆盖并重定向到随节点存储的自定义URL。 hook_form_alter()正在设置$ form ['#redirect'],但我认为这只适用于没有管理覆盖。

4 个答案:

答案 0 :(得分:1)

我以前从未使用过它,但我认为你可以从hook_submit中调用overlay_close_dialog(...)函数

有关详细信息,请参阅http://api.drupal.org/api/drupal/modules--overlay--overlay.module/function/overlay_close_dialog/7

答案 1 :(得分:1)

保持谷歌搜索我的方式,并希望在Drupal 7上发布一个适合我的最终解决方案(由于jakraska的建议而来到这里)。首先使用hook_form_FORM_ID_alter()挂钩您要更改的特定表单

/**
* Implementation of hook_form_FORM_ID_alter()
* 
**/
function mymodule_form_FORM_ID_alter(&$form, &$form_state) {
  $form['#submit'][] = 'mymodule_callback';
}

然后编写将呈现页面的回调。在我的情况下,我只想关闭叠加层,这就是为什么我使用$ form_state ['redirect'] = FALSE;

function mymodule_callback(&$form, &$form_state) {
  // Form API will re-render the current page and pass the redirect information to the overlay JavaScript 
  overlay_close_dialog();
  // stay on the same page after all submit callbacks have been processed.
  $form_state['redirect'] = FALSE;
}

如果要重定向到其他路径, 见https://api.acquia.com/api/drupal/modules!overlay!overlay.module/function/overlay_form_submit/7 - 我相信应该让你到那儿。

答案 2 :(得分:1)

保持谷歌搜索我的方式..这是工作的解决方案:

在表单中:

$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;
  }
}

答案 3 :(得分:0)

请确保在$form_state['rebuild'] = TRUE;功能中使用hook_submit,否则在提交表单后不会关闭叠加层。