rate module をインストールし、感情ウィジェットを設定しました。このモジュールは好きですが、投票に成功したら、もう一度[投票]ボタンをクリックできます。代わりに、「あなたは投票しました。再度投票しないでください」というウィンドウをポップアップして、人々が複数回投票するのを防ぎます。
レートモジュールはこれをサポートしていません。これを実行したい場合、あなたの最良のオプションは
rate_vote_alter
_フックを使用できます。この方法で行うと、投票を変更できなくなります。rate_vote_alter
_を使用して、評価モジュールが投票を保存しないようにし、_votingapi_set_votes
_を使用して自分で行う方法です。これにより、(古い)投票を削除する基準を設定できるようになります。レートモジュールがより柔軟に構築されていれば、これはもっと簡単にできたでしょう。他のユーザーが使用できるようにこの機能を追加するには、レートモジュールの問題とパッチを作成することを検討できます。
更新:
alterフックはどこにも定義されていませんが、drupal_alter('rate_vote', $votes, $context)
で定義されています。つまり、次のことができるはずです。
_function my_module_rate_vote_alter(&$votes, $context) {
..
}
_
人々のための作業コード:
/**
* Implements hook_rate_vote_alter().
*/
function mymodule_rate_vote_alter(&$votes, &$context) {
$cookie = $votes['tag'] . '_' . $votes['entity_type'] . '_' . $votes['entity_id'];
// If the cookie is already set.
if (isset($_COOKIE["$cookie"])) {
// Indicating not to accept this vote.
$context['save'] = FALSE;
}
else {
// Set cookie and make sure that its valid for next 30 days.
// This will populate the $_COOKIE["$cookie"] and make sure to block the
// vote if user is trying to vote it more than once.
setcookie("$cookie", 'ratevote', time() + (60 * 60 * 24 * 30), '/');
}
}
hook_rate_vote_alter()は rate.hooks.inc で利用できます
これは、投票をデータベースに保存しない例です。
function my_module_rate_vote_alter(&$votes, $context) {
// Check the database.
$context['save'] = FALSE;
}