Блок со списком TOP 10 пользователей, отсортированный по rank (user karma)

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

Аватар пользователя MITSUFAN MITSUFAN 1 сентября 2008 в 18:01

Нужен блок со списком из TOP 10 пользователей, отсортированный по rank (user karma).
Средствами Views не получается ни собрать список пользователей ни тем более отсортировать их по авторитету.
В пхп и мускуле, как свин в апельсинах, но понимаю, что этот блок можно сделать запросом к базе, выбрав 10 юзеров, у которых самый большой rank на сайте и отсортировать по убыванию. Либо выбрать всех юзверей и отсортировать уже средствами пхп, выбрав тех самых 10 самых самых по значению $user->rank.
RANK - это переменная, которую создает модуль user karma для юзера.
Помогите, человеки. Или модуль подскажите или сниппет.
Спасибо.

Комментарии

Аватар пользователя MITSUFAN MITSUFAN 1 сентября 2008 в 20:47

Views я писал, что нельзя.
User Points - попробую. Я так понимаю, он более продвинутей User Karma. А чем именно?
Спасибо.

Аватар пользователя MITSUFAN MITSUFAN 1 сентября 2008 в 22:36

Я прикинул User Points - сам по себе хорош, но он не вяжется с Extra Voting Forms, точнее это 2 параллельных мира.
Я использую комбинацию Extra Voting Forms + User Karma чтобы помимо начисления за размещение постов и комментариев ещё можно было и голосовать. Хочу сделать блок ТОП 10 юзверей по результатам user karma. Вообще реально в блоке собрать 10-ку отсортированных юзеров с текущим rank от 1 до 10 и вывести их имена и напротив их karma? Подозреваю, что можно сделать это все сниппетом запрос в базу + пхп, но я в этом не шарю, помогите человеки добрые, или хотя бы где и как извлекать эти атрибуты (rank и karma), созданные user karma для $user

Аватар пользователя MITSUFAN MITSUFAN 1 сентября 2008 в 22:49

В общем решение найдено здесь: http://www.drupal.ru/node/17094
С легкими поправками пунктуации и синтаксиса все заработало на УРА:
<?php
$nblimit = 10;
$query = 'SELECT u.name, u.uid, v.value FROM {votingapi_vote} v INNER JOIN {users} u ON v.content_id = u.uid
WHERE v.content_type="%s" AND v.value > %d ORDER BY v.value DESC';

$result = db_query_range($query, array('user', 0), 0, $nblimit);

$list = array();
while ($user = db_fetch_object($result))
{
$list[] = l($user->name,"user/$user->uid")." ($user->value)";
}

$output = theme('item_list', $list, NULL, 'ul', array('id'=>'user_list_', 'class' => 'user_list'));
print($output);
?>

Аватар пользователя bohart@InternetDevels.com bohart@Internet... 2 сентября 2008 в 17:03

"penexe" wrote:
чето мне кажется код странный какой-то, ведь карма храница в таблице votingapi_cache или я неправ?

нет, там лог работы модуля, а в votingapi_vote - сводка всего.

"MITSUFAN" wrote:
Я прикинул User Points - сам по себе хорош, но он не вяжется с Extra Voting Forms, точнее это 2 параллельных мира.

так оно и есть. User Points - сам по себе очень хорош, но он не вяжется с Extra Voting Forms са старта.
лично у меня стоит мной созданный "модуль", который их связывает. для меня это был самый лучший вариант.

Аватар пользователя MITSUFAN MITSUFAN 3 сентября 2008 в 16:23

Совсем понаглею, не бейте ногами.
Хочу чтобы перед никнеймом юзверя в списке была его аватара. Как ни пытался её туда вставить ничего не вышло. Куда, в приведенный выше код, вставить этот самый вывод аватара.
Спасибо.

Аватар пользователя MITSUFAN MITSUFAN 4 сентября 2008 в 14:22

Решение найдено. Просто в строку запроса добавил u.picture и але оп. Осталось шлифануть стили и все будет в шоколаде.
<?php
$nblimit = 10;

$query = 'SELECT u.name, u.uid, u.picture, v.value FROM {votingapi_vote} v INNER JOIN {users} u ON v.content_id = u.uid WHERE v.content_type="%s" AND v.value > %d ORDER BY v.value DESC';
$result = db_query_range($query, array('user', 0), 0, $nblimit);

$list = array();
while ($auser = db_fetch_object($result))
{
$list[] = theme('user_picture',$auser).l($auser->name,"user/$auser->uid")." ($auser->value)";
}

$output = theme('item_list', $list, NULL, 'ul', array('id'=>'user_list_', 'class' => 'user_list'));
echo($output);
?>