1

私のサイトのユーザーは、カスタムタイプのノード(「プレーヤー」と呼びましょう)を追加できますが、公開することはできません。事実上、投稿する前にモデレートする必要があります。管理者/モデレーターがそれらを公開したら、所有者/発行者を関連する管理者/モデレーターに変更してほしい。これは、ユーザーがそれらを編集できないようにするためであり、また、誰がそれらを承認したかなどを追跡することができるようにするためです。

どうすればこれを行うことができますか?アクション/ルール/ワークフロー/ワークフロー-ngなどが含まれる可能性があると思いましたが、それぞれを見て、それを機能させる方法がわからないようです!

4

3 に答える 3

3

もう1つの方法は、hook_link()を使用して「承認」リンクを含む短いモジュールを作成することです。そのリンクをメニューコールバックにポイントして、ノードの所有権を現在のユーザーから[承認]リンクをクリックしたユーザーに変更します。

これを解決するための優れたクリーンな方法かもしれませんが、Drupalのノウハウが少し必要です。ただし、irc.freenode.netの#drupal IRCチャネルの誰かに質問すると、開始方法を示したり、寄稿モジュールとしてコーディングしたりすることができます。

于 2009-08-26T13:23:20.217 に答える
1

プレーヤーノードを編集しているときに手動で行うことができます。最後に、ノードの作成者と作成時間を変更できる2つの設定のグループがあります。

または、管理者以外のユーザーにノードを作成する権限を与え、これらのノードを編集する権限を削除することもできます。動作する可能性がありますが、これらのユーザーにとっては苦痛になる可能性があります。

于 2009-08-26T12:45:19.160 に答える
1

さらに情報を追加するだけです-BrainVは、カスタムモジュール用の次のコードを開発するのに役立ちました-ここではpublishtriggerと呼ばれます。承認ボタンでPlayerノードを公開し、それを「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);
}
于 2009-08-28T14:50:19.503 に答える