- drupal如何给内容添加审核功能
- drupal默认安装,当你添加内容时,默认的状态是发布状态.也就是说,只要你有权限发布,你发布的内容无需要管理员审核.
drupal对于page和forum是通过节点来管理的,如果有administer node的权限,就能够对所有节点进行管理.对于一个企业的网站,我们希望普通用户能够发布内容,但希望管理员审核之后才可以发布.
现在我就将介绍如何修改代码使其支持管理员审核的这一功能.
1 修改默认的状态为0,也就是未发布.
修改modules/node/node.install 335L,使默认状态为0
2 查看node_object_prepare这个函数.发现有段代码很奇怪.
修改modules/node/node.pages.inc L606,强制添加$node->status = 0
3 为了保证上述修改生效,你必须禁用Trigger功能.因为这个功能将调用这个函数.
文件modules/node/node.module.函数node_publish_action将会修改未发布状态为发布状态,很烦人.
ps:此修改限制没有administer nodes权限的用户, 发布内容必须管理员审核.
- 'status' => array(
- 'description' => t('Boolean indicating whether the node is published (visible to non-administrators).'),
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0),
-
- function node_object_prepare(&$node) {
// Set up default values, if required.
//$node_options = variable_get('node_options_'. $node->type, array('status', 'promote'));
$node_options = variable_get('node_options_'. $node->type, array('promote'));
- if (!isset($node->nid)) {
- foreach (array('status', 'promote', 'sticky') as $key) {
- $node->$key = in_array($key, $node_options);
- }
- global $user;
- $node->uid = $user->uid;
- $node->created = time();
-
- $node->status = 0;
- }
- else {
- $node->date = format_date($node->created, 'custom', 'Y-m-d H:i:s O');
- }
-
- $node->revision = in_array('revision', $node_options);
-
- node_invoke($node, 'prepare');
- node_invoke_nodeapi($node, 'prepare');
- }
- function node_publish_action(&$node, $context = array()) {
- $node->status = 1;
- ....
- }
此修改限制没有administer nodes权限的用户, 发布内容必须管理员审核.