Блок с топ пользователями.

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

Аватар пользователя Stalker4uk Stalker4uk 1 октября 2012 в 19:38

Доброго времени суток. Пытаюсь сделать блок, в котором будет выводиться 10 пользователей по количеству созданных блогов. Выглядеть это должно примерно так:
пользователь: | созданных блогов:
пользователь 1 | 74
пользователь 2 | 36
пользователь 3 | 19
пользователь 4 | 14
пользователь 5 | 6
...

Пытался сделать как показано тут, но выдает ошибки. Хотелось узнать можно ли и если можно, то как сделать это с помощью вьюс.
Еще интересует можно ли добавить в профиль количество созданных блогов (стоит модуль profile2).
Буду благодарен любой помощи.

Комментарии

Аватар пользователя Stalker4uk Stalker4uk 3 октября 2012 в 12:24

"divined" wrote:
1. Свой запрос к БД + вывод в блок

Пробовал этот код, но не работает. Самому написать код не хватает знаний, может можно сделать как нибудь иначе, не через бд?

Аватар пользователя divined divined 3 октября 2012 в 12:29

Все данные хранятся именно в БД, так что его обойти не получится.

Давайте тогда попробуем решить по другому. Напишите ошибку, которую выдает код, который вы ввели, а мы попробуем исправить.

Аватар пользователя Stalker4uk Stalker4uk 3 октября 2012 в 12:35

Recoverable fatal error: Argument 4 passed to db_query_range() must be an array, integer given, called in Z:\home\site\www\modules\php\php.module(80) : eval()'d code on line 8 and defined в функции db_query_range() (строка 2345 в файле Z:\home\site\www\includes\database\database.inc).

Как я понял-ругается на "db_query_range()"

Аватар пользователя divined divined 3 октября 2012 в 12:44

Не правильно поняли. Ругается что переданный на обработку аргумент не является массивом, а должен бы. А вместо этого передано целое число.

Покажите за одно весь код.

Аватар пользователя divined divined 3 октября 2012 в 12:56

Попробуйте этот:

<?php
$query 
db_select('votingapi_vote''v');
$query->innerJoin('users','u','u.uid = v.content_id');
$query->condition('v.content_type''user');
$query->condition('v.value'0'>');
$query->fields('u',array('name','uid'));
$query->fields('v',array('value'));
$query->range(010);

$results $query->execute();

$list = array();

foreach (

$result as $user) {
    
$list[] = l($user->name,"user/$user->uid"). "( $user->value)";
}
$output theme('item_list'$listNULL'ul', array('id'=>'user_list_''class' => 'user_list'));
print(
$output);
?>
Аватар пользователя Stalker4uk Stalker4uk 3 октября 2012 в 13:00

Пока пытался сделать наткнулся на эту статью. Как я понял будет это выглядеть как показано на картинке, но при установке модуля он просто не выводит блок. Очень хотелось бы разобраться чтобы блок выводился и все выглядело как на картинке.

Все равно выдает ошибку:
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'v.content_type' in 'where clause': SELECT u.name AS name, u.uid AS uid, v.value AS value FROM {votingapi_vote} v INNER JOIN {users} u ON u.uid = v.content_id WHERE (v.content_type = :db_condition_placeholder_0) AND (v.value > :db_condition_placeholder_1) LIMIT 10 OFFSET 0; Array ( [:db_condition_placeholder_0] => user [:db_condition_placeholder_1] => 0 ) в функции eval() (строка 10 в файле Z:\home\site\www\modules\php\php.module(80) : eval()'d code).

Аватар пользователя divined divined 3 октября 2012 в 13:01

Ну дык я не вижу перед собой базу, если бы вы зашли в phpmyadmin и скопировали бы структуру таблицы votingapi_vote, было бы легче.

попробуйте закомментить строчку:

<?php
$query
->condition('v.content_type''user');
?>
Аватар пользователя divined divined 3 октября 2012 в 13:03

Так а еще я просмотрел что у вас совсем другая задача.

"количеству созданных блогов", а вы привели код "топ по голосам".

эх, без доступа к базе, наверное не помогу.

Аватар пользователя divined divined 3 октября 2012 в 13:05

Второй пример что вы привели, это просто подсчет по созданным материалам.

Если вас это устроит, можете использовать его.

Аватар пользователя Stalker4uk Stalker4uk 3 октября 2012 в 13:08

"divined" wrote:
Ну дык я не вижу перед собой базу, если бы вы зашли в phpmyadmin и скопировали бы структуру таблицы votingapi_vote, было бы легче.

Надо сделать экспорт этой таблицы?
"divined" wrote:
А вы блок установили где выводить?

Да

Аватар пользователя divined divined 3 октября 2012 в 14:01
<?php
$query 
db_select('node''n');
$query->innerJoin('users','u','u.uid = n.uid');
$query->condition('n.type''blog');
$query->fields('u',array('name','uid'));
$query->addExpression('count(n.nid)''count');
$query->range(010);

$result $query->execute();

$list = array();

foreach (

$result as $user) {
    
$list[] = l($user->name,"user/$user->uid"). " ($user->count)";
}
return 
theme('item_list', array('items' => $list));
?>

Создал у себя на сайте блоги и написал код, держите.
Вам останется допилить строчку: return theme('item_list', array('items' => $list));
Добавив классы для темизации. И потом написать CSS ко всему.
Или можете изменить массив $list, как на втором примере, решать вам.

Аватар пользователя Stalker4uk Stalker4uk 3 октября 2012 в 14:06

Почему то выводит только админа и присваивает ему все созданные блоги, даже те, которые создали другие пользователи.

Аватар пользователя divined divined 3 октября 2012 в 14:34

Вот правильный запрос:

<?php
$query 
db_select('node''n');
$query->innerJoin('users','u','u.uid = n.uid');
$query->condition('n.type''blog');
$query->fields('u',array('name','uid'));
$query->addExpression('count(n.nid)''count');
$query->groupby('u.name');
$query->orderby('count','DESC');
$query->range(010);
?>
Аватар пользователя Stalker4uk Stalker4uk 3 октября 2012 в 14:46

Все работает! Спасибо вам огромное.
По поводу темизации профиля, это надо создать файл user-profile.tpl.php в папке с темой (templates)и там уже писать код, на отображение количество созданных блогов пользователем?

Аватар пользователя divined divined 3 октября 2012 в 14:54

Само собой, информация об этом только там, кстати это можно сделать и с помощью views

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

Думаю справитесь.