0

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

我怎样才能做到这一点?

4

2 回答 2

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;
}
}
于 2013-10-16T10:45:22.963 回答
0

我用标志模块解决了我的问题:我创建了名为“已在此节点上评论”和“第一反应”* 的标志和名为“已在节点上评论”的规则。这些是我的规则设置:

事件:保存新评论后

条件:

  • 内容的类型参数:内容:[comment:node],内容类型:文章
  • NOT Node is flagged 参数:Flag:在这个节点上评论,节点: [comment:node],代表其检查的用户:[comment:author]

行动:

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

因此,每次用户第一次向某个节点添加评论时,该节点都会被标记为“在某个节点上评论”,反应被标记为“第一次反应”,并且添加评论的用户将获得 2 分奖励.

**我在相关问题中使用“第一条评论”标志。*

于 2013-10-26T13:39:54.247 回答