Подсчет комментариев....

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

Аватар пользователя Eretica Eretica 26 ноября 2007 в 13:27

С рангами видимо пролетаю, другой вопрос, есть ли модуль который подсчитывает общее кол-во сообщений от каждого пользователя и выводит это число скажем под той же аватаркой и в профиле? И вообще есть хоть какой-то модуль который информацию выводит под/над аватаром но не на форуме, а в разделах типа запись в блоге?

Комментарии

Аватар пользователя Dart Dart 26 ноября 2007 в 13:41

%post_count выводит общее кол-во сообщений, но необходимо загруззить модуль user_stats. Правда эта статистика будет видна только для админов. Есть идеи, как сделать её общедоступной, но пока это только теория...

Аватар пользователя chup chup 26 ноября 2007 в 18:34

Зачем модуль? можно очень просто в template.php написать функцию для подсчета - там максимум 5 строк получится.

Аватар пользователя LionUFOS LionUFOS 24 октября 2008 в 8:19

"chup" wrote:
Зачем модуль? можно очень просто в template.php написать функцию для подсчета - там максимум 5 строк получится.

А можно увидеть функцию про которую вы говорили?

Аватар пользователя olk olk 24 октября 2008 в 11:59

ну например такая (пример приведен для D6)
данную функцию надо поместить в файл template.php

<?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)

<?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 и вывести их в соответствующих шаблонах