С рангами видимо пролетаю, другой вопрос, есть ли модуль который подсчитывает общее кол-во сообщений от каждого пользователя и выводит это число скажем под той же аватаркой и в профиле? И вообще есть хоть какой-то модуль который информацию выводит под/над аватаром но не на форуме, а в разделах типа запись в блоге?
Комментарии
%post_count выводит общее кол-во сообщений, но необходимо загруззить модуль user_stats. Правда эта статистика будет видна только для админов. Есть идеи, как сделать её общедоступной, но пока это только теория...
Модуль Flatforum
Зачем модуль? можно очень просто в template.php написать функцию для подсчета - там максимум 5 строк получится.
chup, функцию в студию!
Было бы неплохо еще и эти 5ть строк
А можно увидеть функцию про которую вы говорили?
ну например такая (пример приведен для D6)
данную функцию надо поместить в файл template.php
function _user_statistics($user) {
global $_SESSION;
$stat = array();
if (is_object($user) && isset($user->uid)) {
if($user->uid > 0 ) { // для анонимов статистику не выводим
// проверим нет ли нужных данных в кэше и не закончилось ли время хранения данных (в нашем случае 10 мин.)
if ( ! isset($_SESSION['user_stat_'.$user->uid]) || $_SESSION['user_stat_'.$user->uid]['expired'] < time() - 60*10) {
$sql = db_query(db_rewrite_sql(
'SELECT COUNT(nid) AS cnt,MAX(created) AS last_time FROM {node} WHERE uid=%d'),$user->uid);
$us = db_fetch_object($sql);
$_SESSION['user_stat_'.$user->uid]['message_count'] = $us->cnt;
$_SESSION['user_stat_'.$user->uid]['message_last'] = $us->last_time;
if(module_exists('comment')) {
$sql = db_query(db_rewrite_sql(
'SELECT COUNT(cid) AS cnt,MAX(timestamp) AS last_time FROM {comments} WHERE uid=%d'),$user->uid);
$us = db_fetch_object($sql);
$_SESSION['user_stat_'.$user->uid]['comment_count'] = $us->cnt;
$_SESSION['user_stat_'.$user->uid]['comment_last'] = $us->last_time;
}
$_SESSION['user_stat_'.$user->uid]['expired'] = time();
//drupal_set_message('<pre>'.print_r($_SESSION['user_stat_'.$user->uid],1).'<pre>');
}
// если данные есть и они не устарели возьмем просто из кэша, что бы лишний раз не дергать базу
$stat = $_SESSION['user_stat_'.$user->uid];
}
}
return $stat;
}
?>
Как ее дальше использовать ? ну например как вариант изменить theme_username (поместить функции в template.php)
function phptemplate_username($object) {
if ($object->uid && $object->name) {
/*
* Обрезаем длинные имена до 15 символов
*/
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) . '...';
}
else {
$name = $object->name;
}
if (user_access('access user profiles')) {
$output = l($name, 'user/' . $object->uid, array('attributes' => array('title' => t('View user profile.'))));
}
else {
$output = check_plain($name);
}
}
else if ($object->name) {
/*
* Для анонимоусов ставим атрибут для ссылки на homeoage rel=nofollow
*/
if (!empty($object->homepage)) {
$output = l($object->name, $object->homepage, array('attributes' => array('rel' => 'nofollow')));
}
else {
$output = check_plain($object->name);
}
$output = '<span class="ccfilter tooltip" title="Не зарегистрированный пользователь">'.$output.'</span>' ;
}
else {
$output = variable_get('anonymous', t('Anonymous'));
}
$stat = _user_statistics($object);
if(count($stat)) {
$output .= '<br />Всего сообщений : '.$stat['message_count'].'<br />';
$output .= 'Последнее сообщение : '.format_date($stat['message_last']).'<br />';
if(isset($stat['comment_count'])) {
$output .= 'Всего комментариев : '.$stat['comment_count'].'<br />';
$output .= 'Последний комментарий : '.format_date($stat['comment_last']).'<br />';
}
}
return $output;
}
?>
Еще как варианты, использовать полученные данные для определения своих переменных в функциях phptemplate_preprocess_node phptemplate_preprocess_comment и вывести их в соответствующих шаблонах
что-то не работает код. где должно все появляться???