我网站上的用户可以添加自定义类型的节点(让我们称之为“播放器”)但不能发布它们。实际上,他们需要在发布前进行审核。管理员/管理员发布后,我希望将所有者/发布者更改为相关的管理员/管理员。这是因为用户无法编辑它们,因此可以跟踪谁批准了它们等。
我该如何解决这个问题?我认为它可能涉及动作/规则/工作流程/工作流程等,但我看了每一个,似乎无法弄清楚如何使它工作!
答案 0 :(得分:3)
另一种方法是使用hook_link()编写一个包含'approve'链接的短模块。指向链接到菜单回调,该菜单回调将节点的所有权从当前用户更改为单击“批准”链接的用户。
解决这个问题可能是一个很好,干净的方法,但需要一点Drupal知识。但是,如果您在irc.freenode.net上的#drupal IRC频道中询问某人,他们可以向您展示如何开始,或者甚至将其编码为您的贡献模块。
答案 1 :(得分:1)
您可以在编辑播放器节点时手动执行此操作。最后有一组两个设置,您可以更改节点创建者和创建时间。
或者,您是否可以授予非管理员用户创建节点的权限,但删除他们编辑这些节点的权限。可能会工作,但对这些用户来说可能会很痛苦。
答案 2 :(得分:1)
只是添加更多信息 - BrainV帮助我为自定义模块开发了以下代码 - 在这里称为publishtrigger。我希望批准按钮发布播放器节点,然后将其分配给“contentadmin”用户,在我的情况下ID为6 ...
<?php
/**
* Implementation of hook_perm().
*/
function publishtrigger_perm() {
return array('approve nodes');
}
/**
* Implementation of hook_menu().
*/
function publishtrigger_menu() {
$items['approve/%'] = array(
'title' => 'Approve',
'page callback' => 'publishtrigger_approve_node',
'page arguments' => array(1),
'access arguments' => array('approve nodes'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implementation of hook_link().
*/
function publishtrigger_link($type, $object, $teaser = FALSE) {
// Show this link at the bottom of nodes of the Player type which are not yet
// owned by contentadmin (UID 6).
if ($type == 'node' && $object->type == 'player') {
// Make sure user has permission to approve nodes.
if (user_access('approve nodes')) {
$links = array();
if ($object->uid != 6 || $object->status == 0) {
// Node is not owned by contentadmin (UID 6), and therefore not approved.
$links['approve_link'] = array(
'title' => 'Approve',
'href' => 'approve/' . $object->nid,
);
}
else {
// Node is already approved
$links['approve_link'] = array('title' => 'Already approved');
}
return $links;
}
}
}
/**
* When this code is run, adjust the owner of the indicated node to 'contentadmin',
* UID 6.
*
* @param $nid
* The node id of the node we want to change the owner of.
*/
function publishtrigger_approve_node($nid) {
// Load the node.
$node = node_load($nid);
// Set the UID to 6 (for contentadmin).
$node->uid = 6;
// Publish the node
$node->status = 1;
// Save the node again.
node_save($node);
// Go back to the node page
drupal_goto($node->path);
}