it-swarm-korea.com

rate 모듈의 투표에서 다중 투표를 방지하는 방법은 무엇입니까?

rate module 을 설치하고 감정 위젯을 설정했습니다. 이 모듈이 마음에 들지만 성공적으로 투표 한 후 다시 투표 버튼을 클릭 할 수 있습니다. 대신 사람들이 여러 번 투표하는 것을 방지하기 위해 "투표했습니다. 다시 투표하지 마십시오"라는 팝업 창을 표시하고 싶습니다.

2
enjoylife

요율 모듈은 이에 대한 지원을 구축하지 않았습니다. 이렇게하려면 가장 좋은 방법은

  • 중복 투표 거부, 방법은 사용자가 결정하지만 투표 한 모든 사람의 IP 주소를 저장하는 투표 API 테이블을 확인한 다음 rate_vote_alter 후크를 사용할 수 있습니다. 이렇게하면 투표를 변경할 수 없게됩니다.
  • 다른 옵션은 rate_vote_alter를 사용하여 비율 모듈이 투표를 저장하지 못하도록하고 votingapi_set_votes로 직접 수행하는 것입니다. 그러면 (이전) 투표를 삭제해야하는 기준을 설정할 수 있습니다.

요금 모듈이 더 유연하게 구축 되었으면 더 쉽게 수행 할 수 있습니다. 다른 사람들이 사용할 수 있도록이 기능을 추가하기 위해 rate 모듈에 대한 문제와 패치를 만드는 것을 고려할 수 있습니다.

업데이트 :
변경 후크는 어디에도 정의되어 있지 않지만 drupal_alter('rate_vote', $votes, $context)으로 수행됩니다. 즉, 다음을 수행 할 수 있어야합니다.

function my_module_rate_vote_alter(&$votes, $context) {
  ..
}
4
googletorp

사람들을위한 작업 코드 :

/**
 * 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 에서 사용할 수 있습니다.

0

이것은 데이터베이스에 투표를 저장하지 않는 방법에 대한 예입니다.

function my_module_rate_vote_alter(&$votes, $context) {
  // Check the database.

  $context['save'] = FALSE;
}
0
user2515