CMS Drupal

В модуле друпала 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.

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Довольно интересный материал Вы пишете. Жаль, что блог еще малопосещаем. Я бы такие темы освещал куда более широко.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".