添加评论一次后如何授予用户用户点数?

时间:2013-10-11 09:27:50

标签: drupal-7 comments userpoints

我创建了一条规则,在用户在节点上添加评论时授予用户点数。但是,我只想给他们这些积分一次。这意味着:当他们在同一个节点上做出第二次或第三次反应时,他们不会获得更多的积分,但是在评论另一个节点后,他们将获得积分。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

规则必须具备: 事件:保存评论之前

Conditions: this code

global $user;
$node  =array();
$query = db_select('comment', 'c');
$query->fields('c', array('nid'));
$query->condition('c.uid', $user->uid);
$result = $query->execute();
while ($res = $result->fetchAll()) {
foreach ($res AS $re) {
$node[] = $re->nid;
}
}

if(!in_array($comment->nid, $node)){
return TRUE;
}

操作:授予用户用户点

=============================

条件:执行自定义PHP代码 或创建自定义条件

/**
 * Implements hook_rules_condition_info().
 */
function MYMODULE_rules_condition_info() {
  $conditions = array();
  $conditions['MYCONDITION'] = array(
    'label' => t('lable'),
    'parameter' => array(
      'user' => array(
        'type' => 'user',
        'label' => t('User'),
      ),
    ),
    'group' => t('Custom'),
    'callbacks' => array(
      'execute' => 'MYMODULE_rules_condition_MYCONDITION',
    ),
  );
  return $conditions;
}
function MYMODULE_rules_condition_MYCONDITION($user) {
$node  =array();
$query = db_select('comment', 'c');
$query->fields('c', array('nid'));
$query->condition('c.uid', $user->uid);
$result = $query->execute();
while ($res = $result->fetchAll()) {
foreach ($res AS $re) {
$node[] = $re->nid;
}
}

if(!in_array($comment->nid, $node)){
return TRUE;
}
}

答案 1 :(得分:0)

我用Flags模块解决了我的问题:我创建了名为'在此节点上注释'的标记& '第一反应'*和规则称为'在节点上评论'。这些是我的规则设置:

活动:保存新评论后

条件:

  • 内容的类型为参数:内容:[comment:node],内容类型: 制品
  • NOT节点已标记参数:标志:在此节点上发表评论,节点: [comment:node],代表其检查的用户:[comment:author]

行动:

  • 向用户授予参数参数:用户:[comment:author], 积分:2,积分类别:反应,实体:[comment:node], 描述:新反应,操作:添加, 显示:false,中等:自动批准
  • 标记节点参数:标记:节点上的注释,节点: [comment:node],代表其标记的用户:[comment:author],跳过 权限检查:false
  • 举报评论:参数:标记:第一反应,评论:[comment], 标记为[comment:author]的用户,跳过权限 check:false

因此,每当用户第一次向某个节点添加评论时,该节点被标记为“在节点上评论”,该反应被标记为“第一反应”,添加评论的用户是奖励2分。

**我使用related question。*

中的'First comment'标记