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

如何在Drupal 7.2中实现表单内容审核发布逻辑?

在Drupal 7.2中实现表单审核逻辑

嘿,针对你需要给包含name、mail、comment字段的表单添加审核流程的需求,我给你两种实用方案——优先推荐用现成模块(少写代码更省心),如果是自定义表单的话再用代码实现:

方案一:用现成模块快速实现(推荐)

如果你的表单是基于Drupal内容类型创建的(比如新建一个“用户反馈”内容类型,添加name、mail、comment字段),用Workflow+Rules模块就能搞定:

1. 安装并配置Workflow模块

Workflow模块可以给内容添加状态流转,完美实现“待审核→已发布”的流程:

  • 下载Drupal 7兼容的Workflow模块,上传到sites/all/modules目录,在后台模块列表启用它。
  • 进入admin/config/workflow/workflows,点击「Add workflow」创建一个流程(比如叫“内容审核流”),添加三个状态:待审核(设为默认状态)、已发布、已拒绝。
  • 给状态设置权限:只有「管理员」角色能把内容从“待审核”转到“已发布”或“已拒绝”,普通用户只能提交内容,不能修改状态。
  • 把这个工作流关联到你的内容类型:进入内容类型编辑页(比如admin/structure/types/manage/feedback)的「Workflow」标签,选择刚才创建的流程并保存。这样用户提交的内容默认处于“待审核”状态,不会直接在前端显示。

2. 配置内容访问权限

  • 进入admin/people/permissions,给普通用户/匿名用户开「创建[你的内容类型]内容」的权限,但不要给「编辑自己的内容」权限(避免用户修改待审核内容)。
  • 在Workflow的权限区域,设置普通用户只能查看已发布状态的内容,管理员能查看所有状态的内容。

3. 邮件通知(可选)

如果需要提交后通知管理员,或者审核后通知用户,搭配Rules模块:

  • 安装Rules模块,启用后创建两条规则:
    • 触发条件:「当节点被创建且状态为待审核」,执行动作:发送邮件给管理员,包含内容的审核链接。
    • 触发条件:「当节点状态变为已发布/已拒绝」,执行动作:发送邮件给提交用户(用表单里的mail字段值)。

方案二:自定义代码实现(针对自定义Form API表单)

如果你的表单是自己用Form API写的自定义表单,就需要写点代码来处理审核逻辑:

1. 保存表单数据并标记待审核

在表单的submit回调里,把数据存到自定义数据库表,标记为待审核状态(比如status=0),同时给管理员发通知邮件:

function mymodule_feedback_submit($form, &$form_state) {
  // 获取表单提交的数据
  $submission = array(
    'name' => $form_state['values']['name'],
    'mail' => $form_state['values']['mail'],
    'comment' => $form_state['values']['comment'],
    'status' => 0, // 0=待审核,1=已发布
    'created' => REQUEST_TIME,
  );

  // 插入自定义数据表(记得先在hook_install()里创建这个表)
  db_insert('mymodule_feedback')->fields($submission)->execute();

  // 给管理员发审核通知邮件
  $admin_mail = variable_get('site_mail', 'admin@example.com');
  $subject = '新的用户反馈需要审核';
  $body = "用户 {$submission['name']} 提交了反馈:\n\n{$submission['comment']}\n\n点击审核:" . url('admin/content/feedback', array('absolute' => TRUE));
  drupal_mail('mymodule', 'feedback_pending', $admin_mail, language_default(), array('body' => $body), $admin_mail);

  drupal_set_message('你的反馈已提交,等待管理员审核~');
}

2. 创建管理员审核页面

添加菜单路径,让管理员查看待审核内容并操作:

function mymodule_menu() {
  $items = array();

  // 待审核列表页
  $items['admin/content/feedback'] = array(
    'title' => '待审核反馈',
    'page callback' => 'mymodule_feedback_admin_list',
    'access arguments' => array('administer site configuration'), // 仅管理员可访问
    'type' => MENU_NORMAL_ITEM,
  );

  // 审核通过回调
  $items['admin/content/feedback/%/approve'] = array(
    'title' => '审核通过',
    'page callback' => 'mymodule_feedback_approve',
    'page arguments' => array(2),
    'access arguments' => array('administer site configuration'),
    'type' => MENU_CALLBACK,
  );

  // 拒绝回调
  $items['admin/content/feedback/%/reject'] = array(
    'title' => '拒绝',
    'page callback' => 'mymodule_feedback_reject',
    'page arguments' => array(2),
    'access arguments' => array('administer site configuration'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

// 渲染待审核列表
function mymodule_feedback_admin_list() {
  $header = array('姓名', '邮箱', '反馈内容', '提交时间', '操作');
  $rows = array();

  $result = db_select('mymodule_feedback', 'f')
    ->fields('f')
    ->condition('status', 0)
    ->execute();

  foreach ($result as $row) {
    $rows[] = array(
      $row->name,
      $row->mail,
      truncate_utf8($row->comment, 100),
      format_date($row->created),
      l('通过', "admin/content/feedback/{$row->id}/approve") . ' | ' . l('拒绝', "admin/content/feedback/{$row->id}/reject"),
    );
  }

  return empty($rows) ? '<p>暂无待审核反馈</p>' : theme('table', array('header' => $header, 'rows' => $rows));
}

// 审核通过处理
function mymodule_feedback_approve($id) {
  // 更新状态为已发布
  db_update('mymodule_feedback')
    ->fields(array('status' => 1))
    ->condition('id', $id)
    ->execute();

  // 给用户发通过通知
  $feedback = db_select('mymodule_feedback', 'f')
    ->fields('f')
    ->condition('id', $id)
    ->execute()
    ->fetchObject();

  $subject = '你的反馈已通过审核';
  $body = "你提交的反馈已发布,内容如下:\n\n{$feedback->comment}";
  drupal_mail('mymodule', 'feedback_approved', $feedback->mail, language_default(), array('body' => $body), variable_get('site_mail'));

  drupal_set_message('反馈已通过审核');
  drupal_goto('admin/content/feedback');
}

// 拒绝处理
function mymodule_feedback_reject($id) {
  db_delete('mymodule_feedback')->condition('id', $id)->execute();
  // 可选:给用户发拒绝通知邮件
  drupal_set_message('反馈已被拒绝');
  drupal_goto('admin/content/feedback');
}

3. 前端显示已审核内容

在前端页面查询状态为1的内容并渲染:

function mymodule_feedback_public_page() {
  $header = array('姓名', '反馈内容', '提交时间');
  $rows = array();

  $result = db_select('mymodule_feedback', 'f')
    ->fields('f')
    ->condition('status', 1)
    ->orderBy('created', 'DESC')
    ->execute();

  foreach ($result as $row) {
    $rows[] = array(
      $row->name,
      $row->comment,
      format_date($row->created),
    );
  }

  return empty($rows) ? '<p>暂无已发布的反馈</p>' : theme('table', array('header' => $header, 'rows' => $rows));
}

注意事项

  • 记得给自定义模块创建.info文件,确保Drupal能识别它:
name = 用户反馈审核模块
description = 处理用户反馈的提交与审核流程
core = 7.x
package = 自定义模块
  • Drupal 7.2版本比较老旧,确保使用的模块都兼容这个版本,避免出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:23