我创建了一条规则,在用户在节点上添加评论时授予用户点数。但是,我只想给他们这些积分一次。这意味着:当他们在同一个节点上做出第二次或第三次反应时,他们不会获得更多的积分,但是在评论另一个节点后,他们将获得积分。
我该怎么做?
答案 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]
,内容类型:
制品[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'标记