2009-08-26 9 views
1

私のサイトのユーザーはカスタムタイプのノードを追加することができますが、それを公開することはできません。効果的に彼らは投稿する前にモデレートする必要があります。管理者/モデレータが公開したら、オーナー/パブリッシャーを関連する管理者/モデレーターに変更します。これは、ユーザーがそれらを編集することができないようにするためであり、承認された人を追跡することも可能です。Drupalのパブリッシュノードのオーナーを変更してください

どうすればよいですか?私は、それがアクション/ルール/ワークフロー/ワークフローなどを含むかもしれないと思ったが、私はそれぞれを見てきて、それを動作させる方法を理解できないようだ。

+0

私は必要なのはカスタムトリガーですプレイヤーノードは公開されていない状態から公開される状態になります)、所有者を変更するアクションを呼び出すことができます。私はそのトリガーを作る方法を理解する必要があります! – x3ja

答えて

3

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

これを解決するうえでクリーンな方法かもしれませんが、Drupalのノウハウが少し必要です。しかし、irc.freenode.netの#drupal IRCチャンネルで誰かに尋ねると、どのように起動するのか、または寄付されたモジュールとしてコード化することができます。ただ、いくつかのより多くの情報を追加する

1

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

また、管理者以外のユーザーにノードの作成権限を与えることはできますが、これらのノードの編集権限を削除することはできますか。うまくいくかもしれませんが、これらのユーザーにとっては痛いかもしれません。

+1

もちろん、これらの設定を変更するには、ユーザーに「コンテンツの管理」権限が必要です。サイトに他のコンテンツが存在する可能性があるため、x3jaは彼の管理者/司会者にフリーランが欲しいとは限りません。 – BrianV

+0

dave - ありがとうございます。でも、私が欲しいものではありません。私は、ユーザーが保存&それらが公表されているまでは、提出に戻ってきてできるようにしたいと思いますので、私は目のオプションが働くだろうとは思いません。最初のオプションは、私の管理者/モデレータのために少しもマニュアルです:) – x3ja

1

- ここpublishtriggerと呼ばれる - BrainVは、私は、カスタムモジュールの次のコードの開発を支援しました。私はPlayerボタンを公開し、それを私のケースではID 6の「contentadmin」ユーザーに割り当てたいと思っていました...

<?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); 
} 
関連する問題