2013-10-11 1 views
0

Я создал правило для предоставления пользователям пользовательских точек, когда они добавили комментарий к узлу. Тем не менее, я хотел бы предоставить им эти баллы только один раз. Это означает: они не получают больше очков, когда они реагируют второй или третий раз на одном и том же узле, но тем не менее им будут предоставлены очки после комментирования другого узла.Как предоставить пользователям пользовательские баллы после добавления комментариев один раз?

Как я могу это сделать?

ответ

0

Я решил проблему с модулем Flags: я создал флаги под названием «Комментарий к этому узлу» & «Первая реакция» * и правило «Комментарий к узлу». Это настройки моего правила по:

СОБЫТИЕ: После сохранения нового комментария

УСЛОВИЯ:

  • Содержимое имеет типа параметр: Содержание: [comment:node], типы контента: Статьи
  • NOT Node помечен Параметр: Флаг: Комментирует этот узел, узел: [comment:node], Пользователь, от имени которого необходимо проверить:

ДЕЙСТВИЯ:

  • Грант указывает на пользователя Параметр: Пользователь: [comment:author], Очки: 2, Очки категории: Реакция, Entity: [comment:node], Описание: Новая реакция, Operation: Добавить, Дисплей: ложный, умеренный: автоматически одобрен
  • Флаг узла Параметр: Флаг: Комментирует узел, Узел: [comment:node], Пользователь на w шланг от имени к флагу: [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

Jeroen, я ответил вам в моем посте .. – QArea

 Смежные вопросы

  • Нет связанных вопросов^_^