私のWebサイトでは、ユーザーはコメントを追加しながら、Fivestarモジュールでノードを評価できます。つまり、評価フィールド(「スター」と呼ばれます)はコメントの一部です。ここで、ユーザーが自分のノードにコメントするとき(または以前にコメントしたことがあるとき)のユーザーの評価フィールドを非表示にしたいと思います-参照: 最初にFivestar評価フィールドを非表示にする方法コメント? )。
どうやってやるの?
編集1:私が適用した このパッチ (パッチ97 https://drupal.org/node/ 189527 )、しかし私の問題はまだ解決されていません。 アドミニストレーション>構造>コンテンツタイプ> MyArticle>コメントフィールドに次のオプションがあります。
しかし、キャッシュをクリアして新しいコンテンツを作成した後も、新しいコメントを追加すると評価フィールドが表示されます。
編集2:私はパッチの作者に電子メールを送り、彼はこれに答えました:
私が作成したパッチの目的は、ユーザーが自分のノードを評価できないようにすることです。このパッチで発生している問題は、fivestarフィールドがコメントにあるため、ノードではなくコメント自体(エンティティIDとして)を参照することです-自由に投票できます。
編集3: 'hiderating'というカスタムモジュールを使用して問題を解決しようとしました。これは私が使用しているコードです:
function hiderating_form_alter(&$form, &$form_state, $form_id) {
global $user;
if ($form_id == "comment_node_stuff_form") {
if ($form['#node']->uid == $user->uid) {
$form['field_stars']['#access'] = 0;
}
else {
$form['field_stars']['#required'] = 1;
}
}
}
インターフェースから「スター」フィールドを不要にしました。コードはほぼ機能しています。「スター」フィールドは、自分のノードにコメントを付けた場合は表示されませんが、他のユーザーのノードにコメントを付けた場合は「必須」になりません。つまり、私のコードのelse
部分が適切に機能しません。
どうすれば修正できますか?
_$form['field_stars']['#access'] = 0;
_の代わりにunset($form['field_stars']);
を使用する必要があります
必要に応じてフィールドを保持し、else条件を削除することもできます。
したがって、最終的なコードは次のようになります
_function hiderating_form_alter(&$form, &$form_state, $form_id) {
global $user;
if ($form_id == "comment_node_stuff_form") {
if ($form['#node']->uid == $user->uid) {
unset($form['field_stars']);
}
}
}
_