当我的节点表单保存时,我想关闭管理覆盖并重定向到随节点存储的自定义URL。 hook_form_alter()正在设置$ form ['#redirect'],但我认为这只适用于没有管理覆盖。
答案 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
,否则在提交表单后不会关闭叠加层。