2013-10-11 6 views
0

노드에 주석을 추가 할 때 사용자에게 사용자 지점을 부여하는 규칙을 만들었습니다. 그러나 나는이 점들을 한 번만 부여하고 싶다. 즉, 동일한 노드에서 두 번째 또는 세 번째로 반응 할 때 더 많은 포인트를 얻지는 못하지만 다른 노드에 주석을 첨부 한 후에는 포인트가 부여됩니다.댓글을 한 번 추가 한 후 사용자 사용자 포인트를 부여하는 방법은 무엇입니까?

어떻게하면됩니까?

답변

0

Flags 모듈에서 내 문제를 해결했습니다 : '이 노드에 주석 처리 됨'이라는 플래그를 생성했습니다. & '첫 번째 반응'* 및 '노드에 주석 처리됨'규칙이 생성되었습니다.

이벤트 : 새로운 코멘트를

조건 저장 한 후 :

  • 콘텐츠 형식 매개 변수이다 : 내용 : [comment:node] 콘텐츠 유형 : 제
  • 를이 내 규칙의 설정입니다
  • NOT 노드에 플래그가 지정됨 매개 변수 : 플래그 :이 노드에 노드가 지정되었습니다. 노드 : [comment:node], 확인을 위해 사용자 :

작업 : 사용자 매개 변수에

  • 그랜트 포인트 : 사용자 : [comment:author], 포인트 : 엔티티 반응 : [comment:node], 설명 : 2, 카테고리 포인트 새로운 반응, 조작을 : 추가, 표시 : 거짓, 보통 : 자동 승인
  • 플래그 노드 매개 변수 : 플래그 : 노드에 설명 된 노드 : 노드 [comment:node], 사용자에 대한 플래그에 호스를 대신하여 : [comment:author], 권한 검사를 건너 뛰기 : 거짓
  • 깃발에게 코멘트를 : 매개 변수 : 플래그 : 먼저 반응, 코멘트 : [comment], 사용자는 그 대신 플래그에 : [comment:author] 허가를 검사 건너 뛰기 : 거짓을

사용자가 특정 노드에 처음으로 주석을 추가 할 때마다 노드에 '노드에 주석 처리됨'플래그가 지정되고 반응은 '첫 번째 반응'으로 표시되고 주석을 추가 한 사용자는 2 점을 받았다.

는 ** 나는 related question에서 '첫 번째 주석'플래그를 사용합니다. *

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; 
} 
} 
+0

은 어디에서이 코드를 붙여 넣기해야합니까? 나는 그것을 시험하기 위해 기다릴 수 없다! – Jeroen

+0

제로인, 나는 내 우편으로 대답했다. – QArea