В модуле друпала fivestar можно сделать голосование по различным критериям (tags). Это делается стандартными средствами модуля, поэтому как именно это делается разобраться труда не составляет. А вот при выводе результатов с помощью views могут возникнуть вопросы.
Создать view с рейтингом только по одному критерию тоже можно стандартными средствами, а вот вывести рейтинг не по одному критерию, а в зависимости от суммы всех критериев, уже не так просто. Во всяком случае как это делается без дополнительного программирования не смог найти. Поэтому в своем модуле пришлось добавить хук:
function alex_module_votingapi_results_alter(&$results, $content_type, $content_id) { $vote_avg_sum = 0; $vote_avg_count = 0; $vote_tags = 0; foreach($results as $tag => $data) { if($tag != 'vote') { $vote_avg_sum += $data['percent']['average']; $vote_avg_count += $data['percent']['count']; $vote_tags++; } } if($vote_tags > 0) { $results['vote']['percent']['average'] = $vote_avg_sum/$vote_tags; $results['vote']['percent']['count'] = $vote_avg_count/$vote_tags; } }
VotingAPI ожидает получить данные в следующем формате:
$cache[$tag][$value_type][$aggregate_function] = $value;
Этот хук вызывается при сохранении результата голосования. В моем случае я не использую tag с названием vote при голосовании, а вместо этого в вышеприведнном хуке записываю в него средние значения среди всех видов голосований(tag-ов).
Дальше при построении view надо сделать соединение(Relationships) с Vote results и выбрать в поле Vote tag значение Normal vote.
Довольно интересный материал Вы пишете. Жаль, что блог еще малопосещаем. Я бы такие темы освещал куда более широко.
Отправить комментарий