You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 7自定义表单按钮重定向异常技术求助

解决Drupal表单"保存并重载当前页面"按钮的重定向问题

我看你在给registration_form添加自定义提交按钮时遇到了重定向失效的问题,这是因为代码里有几处不符合Drupal表单API的写法,我来帮你修正并解释原因:

原代码的问题点

  • 提交函数绑定错误:你用了$form['actions']['#save_reload'][] = 'custom_form_submit';,这不是Drupal绑定表单提交函数的正确方式,应该给按钮元素本身添加#submit属性
  • 未保留原表单保存逻辑:你的自定义提交函数只处理了重定向,但原表单的条目保存逻辑没有被触发,可能导致条目没保存就跳转了
  • 路径获取不准确:current_path()在表单提交场景下可能返回的是表单处理的后台路径(比如system/ajax),而非用户实际访问的页面路径

修正后的完整代码

1. 表单修改函数(form alter)

function custom_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'registration_form') {
    // 添加"保存并重载"按钮
    $form['actions']['save_reload'] = array(
      '#type' => 'submit',
      '#value' => t('Save and Reload'),
      '#weight' => 0,
      // 合并原表单的提交函数和自定义函数,确保先执行保存逻辑
      '#submit' => array_merge($form['actions']['submit']['#submit'], array('custom_form_submit_reload')),
    );
  }
}

2. 自定义提交处理函数

function custom_form_submit_reload($form, &$form_state) {
  // 使用request_uri()获取用户当前访问的完整路径,避免路径错误
  $current_page = request_uri();
  $form_state['redirect'] = $current_page;
  drupal_set_message(t('条目已成功保存,页面正在重载'));
}

关键说明

  • 合并提交函数:用array_merge把原表单的提交函数(比如registration_form_submit)和自定义函数合并,这样会先执行原表单的保存逻辑,再执行你的重定向逻辑,确保条目被正确保存
  • 传引用修改form_state:提交函数的第二个参数$form_state必须传引用(&$form_state),这样你对$form_state['redirect']的修改才能生效
  • 准确获取当前路径:request_uri()能获取用户浏览器地址栏的完整路径,比current_path()更适合这种重定向到当前页面的场景

这样修改后,点击"Save and Reload"按钮时,会先保存表单条目,然后重定向回当前页面,同时显示成功提示。

内容的提问来源于stack exchange,提问作者davidvera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:52:42