web-dev-qa-db-ja.com

最初のコメントの後にファイブスターの評価フィールドを非表示にする方法は?

Fivestarを使用するときにユーザーを1票に制限するにはどうすればよいですか? は受け入れられませんが、著者はまだ解決策を提供していないため、これは新しい質問に値する。

私の目標は、上記の記事の目標とまったく同じです。ユーザーがコメントしたときに、コメントフォームのFivestar評価フィールド(field_starsと呼ばれる)を非表示にしたい彼/彼女がすでにコメントしているノード。

別の解決策はありますか(たとえば、RulesおよびFlagsモジュールを使用して)?


編集:サイトにコメントと呼ばれるフラグと、ノードにフラグを付けるルールがあります誰かがコメントしたときのコメンテーターのために(完全に機能します)。私は本当にそれをこの問題を修正するために使いたいです。 こちら で見つけた情報に基づいて、何かを試しました:

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  $flag = flag_get_flag('commented') or die('no "commented" flag defined');
  if ($form_id == "comment_node_stuff_form") {
   if ($form['#node']->uid == $user->uid OR $flag->is_flagged($form['#node']->uid, $user->uid)) { 
      unset($form['field_stars']);
    }
  }
}

残念ながら、それは何も変更しません(エラーも発生しません)。

1
Jeroen

editでほぼ答えが出ました。コードは

function hiderating_form_alter(&$form, &$form_state, $form_id) {
  global $user;
  $flag = flag_get_flag('commented') or die('no "commented" flag defined');
  if ($form_id == "comment_node_stuff_form") {
   if ($form['#node']->uid == $user->uid OR $flag->is_flagged($form['#node']->nid, $user->uid)) { 
      unset($form['field_stars']);
    }
  }
}

したがって、間違っていたのは$flag->is_flagged($form['#node']->uid$flag->is_flagged($form['#node']->nid

Stackoverflow の@jerdiggityに感謝します。

0
Jeroen

あなたのnode.tpl.phpに次のコードが必要です

hide($content['field_fivestar']);
print singlerating_print_rating($node->nid, $content['field_fivestar']);

私はfield_fivestarはfield_fivestar_ratingではなく、あなたが使用している5つ星のフィールドだと思います

0