どうすればいいのかわかりません。 Drupal 7の serpoints モジュールを使用して、ノードを作成するユーザーにポイントを割り当てます(「レビュー」)。また、ポイントを獲得できるようにしたいです。既存のノードを置き換えるか変更します...ただし、前の作成/変更が20日以上前に行われた場合に限ります。
Rules でこれを行うにはどうすればよいですか?それ以外の場合、手動でコーディングするにはどうすればよいですか?
申し訳ありませんが、前の回答にはいくつかの課題があります。
After saving new content
は適切なイベントではありません。これがあなたが求めていることをするルール( ルール エクスポート形式)です:
{ "rules_grant_userpoints_after_updating_old_content" : {
"LABEL" : "Grant userpoints after updating old content",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "userpoints_rules" ],
"ON" : { "node_update" : [] },
"IF" : [
{ "data_is" : {
"data" : [ "node-unchanged:changed" ],
"op" : "\u003C",
"value" : "-20 days"
}
}
],
"DO" : [
{ "userpoints_action_grant_points" : {
"user" : [ "site:current-user" ],
"points" : "123",
"tid" : "0",
"entity" : [ "" ],
"description" : "Modify existing node (nid=[node:nid]) that was not updated in the last 20 days.",
"operation" : "Grant points",
"display" : "1",
"moderate" : "default"
}
},
{ "userpoints_rules_get_current_points" : {
"USING" : { "user" : [ "site:current-user" ], "tid" : "all" },
"PROVIDE" : { "loaded_points" : { "total_points" : "Number of points in all categories together" } }
}
},
{ "drupal_message" : { "message" : "You now have [total-points:value] points" } }
]
}
}
上記のルールに関する詳細:
[node-unchanged:changed]
は少なくとも20日前のものです。123
ユーザーポイント(必要に応じて数やその他のオプションを調整します)。ルールUIを有効にしている場合(および ユーザーポイントルール モジュールの場合は、上記のルールを自分のサイトにインポートできるはずです。
PS:ルールが希望どおりに機能することを確認したら、ユーザーポイントが付与された後にユーザーに表示されるメッセージに関する最後の2つのルールアクションを削除することをお勧めします。
新しいルールを作成します。イベント:_After saving new content
_ +タイプによる制限:Review
。
アクション:_Grant points to a user
_。
注:_Userpoints rules integration
_をインストールする必要があります。
hook_rules_condition_info()
を使用して新しいルール条件を作成するカスタムモジュールが必要になります。
この条件は、前のノードリビジョンがXX日(この場合は20日)より古いかどうかをチェックします。
次に例を示します。
_function YOUR_MODULE_rules_condition_info() {
return array(
'YOUR_MODULE_condition_compare_revision' => array(
'label' => t('Compare date of last revision'),
'parameter' => array(
'node' => array(
'label' => t('Node'),
'type' => 'node',
),
),
),
);
}
function YOUR_MODULE_condition_compare_revision($node) {
$revision = db_select('node_revision', 'r')
->fields('r', array('nid'))
->condition('nid', $node->nid)
// Make sure this is not the last revision.
->condition('vid', $node->vid, '!=')
// Make sure this revision is older than your desired period of time.
->condition('timestamp', REQUEST_TIME - 20 * 24 * 60 * 60, '<=')
->execute()
->fetchObject();
return $revision;
}
_
これは_YOUR_MODULE.rules.inc
_に行く可能性があります。
注:私はこれをテストせずにすばやく書きました。ただし、正常に動作しているはずです。