Подскажите с рейтингом для материалов

Главные вкладки

Аватар пользователя 88a88 88a88 14 октября 2016 в 4:41

Не могу придумать, как сделать следующий рейтинг:

Есть определённый вид материала, есть комментарии к постам в нём. Хочу сделать, чтобы когда пишешь комментарий - можно было поставить оценку посту - хорошо, плохо, средне(выбрать можно только что-то одно). А в самом посте, выводить значения всех этих трёх значений.

Т.е. например выводить так:

Хорошо - 35
Плохо - 2
Средне - 5

Никак не могу придумать, как это реализовать. Есть Fivestar, но там если и делать, то получается 3 поля и за каждое можно голосовать, а мне нужно только чтобы за какое-то одно. Есть Rate - там вообще мне показалось никакой гибкости в нём.

Вот например хороший рецепт http://xandeadx.ru/blog/drupal/790 - но мне нужно, чтобы выбрать можно было только что-то одно. Подскажите, плиз.

Комментарии

Аватар пользователя 88a88 88a88 19 октября 2016 в 5:00

Не подходит. Мне нужно в комменте сделать возможность выбора и выбрать можно только что-то одно, т.е. например - хорошо или плохо. Если выбрать "хорошо", то "плохо" уже нельзя будет выбрать. Допустим в посте было "хорошо - 4", а станет "хорошо - 5".

Я не нашёл, как такое можно создать в Star Rating, там практически тоже самое, что и Fivestar, только ещё менее гибкое.

Аватар пользователя Carrot Carrot 25 ноября 2016 в 20:04

А чем fivestar на три звезды не устраивает в виде поля к комментарию? А затем в шаблоне отображения node можно уже отдельно считать:

<?php

    $query_rating 

db_select('field_data_field_rating''r')
    ->
fields('r', array('entity_id'field_rating_rating'));

    $subquery_comments = db_select('

comment', 'c')
    ->condition('
c.nid', $node->$nid)
    ->condition('
c.status', 1)
    ->fields('
c', array('cid'));

    $result = $query_rating
    ->condition('

r.entity_id', $subquery_comments, 'IN')
    ->execute()
    ->fetchAll();

    $count = count($result);
    
    foreach($result as $item) {
       if($item->field_rating == 10) $rating1 ++;
       if($item->field_rating == 20) $rating2 ++;
       if($item->field_rating == 20) $rating3 ++;
    }
?>

$rating1,2,3 отображайте самостоятельно без fivestar. Правильнее и удобнее будет вести обновление оценок при добавлении/удалении комментария — hook_node_insert/delete. Под каждое значение плохо, хорошо, отлично — отдельные поля, которые и будут обновляться при добавлении/удалении комментария.

Возможно, подойдет )