Стоит модуль Fivestar, пользователи голосуют за материалы.
Как можно считать рейтинг пользователя на основании оценок которые выставляются материалам этого пользователя?
Есть ли какие-то стандартные решения для этого?
Например получить среднее значение рейтинга для всех материалов одного пользователя.
Комментарии
Может кто-то возьмется за написание подобного модуля?
Есть таблица votingapi_vote - каждый голос, и votingapi_cache - кеш, в ней, как минимум, есть среднее значение и количество голосов за ноду. Используй.
Я вот использовал votingapi_cache (не знаю насколько это правильно, у кеша могут быть разные настройки обновления). SQL-код в phpMyAdmin работал, за php не ручаюсь.
<?php
$query = "
SELECT AVG(votingapi_cache.value) as rating
FROM {node}
INNER JOIN votingapi_cache ON node.nid = votingapi_cache.content_id
WHERE node.uid = %d AND node.type = '%s' votingapi_cache.content_type = 'node'
AND votingapi_cache.function = 'average'";
$result = db_result(db_query($query, $user->uid, $your_node_type_name));
print_r(db_fetch_array($result));
?>
А может есть готовая функция Voting API, которая все мелочи уже учитывает, изучай.
Такой запрос в phpMyAdmin выдает NULL.
Что-то не получается самому разобраться с этим вопросом
userkarma? userpoints пробовали?
Упс, я несколько ошибся с кодом. В SQL-запросе один AND удалил случайно. PHP тоже не точный... Вот правильный код, проверил - вроде работает.
<?php
global $user;
$query = "
SELECT AVG({votingapi_cache}.value) as rating
FROM {node}
INNER JOIN {votingapi_cache} ON {node}.nid = {votingapi_cache}.content_id
WHERE {node}.uid = %d AND {node}.type = '%s'
AND {votingapi_cache}.content_type = 'node' AND {votingapi_cache}.function = 'average'";
$result = db_result(db_query($query, $user->uid, $your_profile_name));
print_r($result);
?>
$your_profile_name - название типа материала, для которого считают среднее. Если надо по всем материалам, то нужно немного исправить.
И да, в phpMyAdmin напрямую этот SQL-код работать не будет. Чтобы работало - над убрать фигурные скобки (они нужны, когда несколько сайтов на одной БД висят) и заменить %d и %s на выбранный uid и название типа материала.
Спасибо работает
Сейчас буду думать как бы из этого сделать рейтинг пользователей.
Если сделали подскажите пожалуйста.
Не сделал только рейтинг в профиле показываю, вот бы еще кто-нибудь подсказал как к views его прикрутить
Как прикрутить Fivestar к Views
А вы тему читали?
К views надо прикрутить рейтинг который считается запросом который написал [user=Kail@drupal.org]
Да, внимательность не самое мое сильное качество Извините, что не так понял.
Еще есть ссылка - http://drupal.org/handbook/modules/fivestar . Вот там, насколько я понял, рекомендуется не использовать запрос в чистом виде, а воспользоваться функциями из votingapi .
Как в views прикрутить запрос - не знаю.