web-dev-qa-db-ja.com

Fivestarを使用する場合、ユーザーを1票に制限するにはどうすればよいですか?

Drupal 7では、fivestarモジュールを有効にして、ユーザーがコメントに投票できるようにしています。結果が集計され、平均投票が行われます。クールなものです。

問題は、人が新しいコメントや返信ごとに何度も投票し続けることができることです。

コメントを使用して、ノードごとに投票を1人に制限するにはどうすればよいですか。言い換えると、いったん投票すると、星が消えるか、他の投票者がデフォルトで編集できないのですか?

ありがとう

4
blue928

これは、次のようなコードを含むカスタムモジュールを使用して簡単に行うことができます。

function YOURMODULENAME_print_rating($nid, $fivestar_widget) {
   $path = drupal_get_path('module', 'fivestar');
   drupal_add_js($path . '/js/fivestar.js');
   drupal_add_css($path . '/css/fivestar.css');
   $voting_message = '';
   $output = '';
   $is_login = user_is_logged_in();
   $rating = votingapi_select_single_result_value(array(
       'entity_id' => $nid,
       'entity_type' => 'node',
       'tag' => 'vote',
       'function' => 'average',
   ));
   if ($is_login) {
     if (isset($rating)) {
       $voting_message = "<div>You have already rated this.</div>";
       $output = theme('fivestar_static', array('rating' => $rating, 'stars' => 5, 'tag' => 'vote')) . $voting_message;
     }
     else {
       $output = render($fivestar_widget);
     }
   }
   else {
     $fivestar_links = l('Login', 'user/login') . ' or ' . l('Register', 'user/register');
     $voting_message = "<div>Only registered user can rate this content type.<br/>$fivestar_links to rate this content type.</div>";
     $output = theme('fivestar_static', array('rating' => $rating, 'stars' => 5, 'tag' => 'vote')) . $voting_message;
   }
   return $output;
 }

ノードテンプレートファイルで以下のスニペットを使用します。

hide($content['field_fivestar_rating']);// This line will hide the stars which are coming from the fivestar module.
print YOURMODULENAME_print_rating($node->nid, $content['field_fivestar_rating']);// This will print the fivestar.
2
Mohammad Anwar