2009-08-26 4 views
1

Пользователи на моем сайте могут добавлять узлы нестандартного типа (назовем его «Player»), но не можем их публиковать. Эффективно им нужно модерировать перед публикацией. Когда администратор/модератор опубликовал их, я хочу, чтобы владелец/издатель был изменен на соответствующий администратор/модератор. Это так, что пользователь не может их редактировать, а также можно отслеживать, кто их одобрил и т. Д.Изменить владельца на узел публикации в Drupal

Как это сделать? Я думал, что это может включать в себя Actions/Rules/Workflow/Workflow-ng и т. Д., Но я посмотрел на каждого и не могу понять, как заставить его работать!

+0

Я думаю, что мне нужно, это обычай Trigger (для того, когда Узел проигрывателя идет от неопубликованного до опубликованного), а затем я могу вызвать действие, чтобы изменить владельца. Мне просто нужно выяснить, как сделать этот триггер! – x3ja

ответ

3

Другой вариант - написать короткий модуль, который включает ссылку «одобрить», используя hook_link(). Направьте эту ссылку на обратный вызов меню, который изменит право владельца узла от текущего пользователя на пользователя, который нажал ссылку «Утвердить».

Это может быть хороший, чистый способ решить эту проблему, но требует немного знаний о Drupal. Однако, если вы спросите кого-то в #drupal IRC-канале на irc.freenode.net, они могут показать вам, как начать работу, или даже запрограммировать его как дополнительный модуль для вас.

1

Вы можете сделать это вручную, когда вы редактируете узлы Игрока. В конце есть группа из двух настроек, где вы можете изменить создателя узла и время создания.

В качестве альтернативы вы можете предоставить пользователям, не имеющим права администратора, создавать узлы, но удалять их разрешение для редактирования этих узлов. Может работать, но может быть болезненным для этих пользователей.

+1

Конечно, для этого требуется, чтобы пользовательские разрешения «администрировать контент» меняли эти параметры. Это может быть неприменимо, так как может быть другой контент на сайте x3ja не обязательно требует, чтобы его администратор/модераторы имели бесплатный прогон. – BrianV

+0

dave - Спасибо, но это не совсем то, что я хочу. Я бы хотел, чтобы пользователи могли сохранять и возвращаться к своим материалам, пока они не опубликованы, поэтому я не думаю, что второй вариант будет работать. Первый вариант слишком ручной для моих администраторов/модераторов :) – x3ja

1

Просто чтобы добавить дополнительную информацию - BrainV помог мне разработать следующий код для настраиваемого модуля - здесь называются publishtrigger. Я хотел кнопку, чтобы опубликовать узел игрока, а затем назначить его на «contentadmin» пользователь, который имеет идентификатор 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); 
} 
Смежные вопросы