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']);
}
}
}
残念ながら、それは何も変更しません(エラーも発生しません)。
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に感謝します。
あなたのnode.tpl.phpに次のコードが必要です
hide($content['field_fivestar']);
print singlerating_print_rating($node->nid, $content['field_fivestar']);
私はfield_fivestarはfield_fivestar_ratingではなく、あなたが使用している5つ星のフィールドだと思います