在Drupal中更改发布节点上的所有者

时间:2009-08-26 12:25:36

标签: drupal drupal-6

我网站上的用户可以添加自定义类型的节点(让我们称之为“播放器”)但不能发布它们。实际上,他们需要在发布前进行审核。管理员/管理员发布后,我希望将所有者/发布者更改为相关的管理员/管理员。这是因为用户无法编辑它们,因此可以跟踪谁批准了它们等。

我该如何解决这个问题?我认为它可能涉及动作/规则/工作流程/工作流程等,但我看了每一个,似乎无法弄清楚如何使它工作!

3 个答案:

答案 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);
}