如何:在为作者分配角色时,按作者取消发布节点

时间:2013-09-09 16:23:40

标签: drupal drupal-7 drupal-rules

我正在使用Drupal 7 + Rules。我想创建一个规则,取消发布用户在被赋予特定角色时创作的所有节点。

  • EVENT - 更新现有用户帐户后
  • 条件 - 用户有角色: SelectedRole
  • 行动 - ???

BONUS:如果这可能仅限于某种类型的节点,那就更好了。

如果有更好的方法来执行此操作,我会接受其他想法。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以创建自定义规则集以循环遍历节点或“视图批量操作”操作。

最简单的选择是在规则上添加自定义PHP函数( PHP>执行自定义PHP代码)。当然你必须启用php过滤器核心模块,如果你还没有。

在PHP操作中,您必须获取当前用户的已发布节点的所有nids并循环遍历它们以取消发布它们。我将使用EntityFieldQuery API类,但您也可以使用database functions

// Get updated user id    
$uid = $account -> uid;

// Get all nodes from user that are of NODE_TYPE and are published
$query = new EntityFieldQuery();
$query
  ->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'NODE_TYPE')
  ->propertyCondition('status', 1)
  ->propertyCondition('uid', $uid);

$result = $query->execute();
$nids = array_keys($result['node']);

// Load all nodes in one go for better performance.
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
  // set status property to 0 (unpublished)
  $node->status = 0;
  // re-save the node
  node_save($node);
}

我还建议为用户添加一个条件之前用户有角色:(不)SelectedRole 以便操作不会每次更新用户配置文件时运行。

参考文献: