Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение внешнего вида счетчика в CNStats

Источник: www.cnstats.com

Требования: CNStats 2.7 и выше. GD 1.0 и выше

При установке CNStats в разделе "Конфигурация - Код счетчика" Вам предлагается для размещения на сайте два типа кода:

  • обязательный код сбора статистики сайта - именно он считает посетителей сайта;
  • опциональный код отображения счетчика - этот код просто рисует картинку с цифрами посещений - графический счетчик.

Внешний вид счетчика который отображает текущие посещения сайта можно изменять. В данной статье рассматриваются варианты графического счетчика CNStats.

По умолчанию, счетчик CNStats выглядит следующим образом:

счетчик CNStats

На нем отображаются три цифры. Самая верхняя - хитов всего, средняя - хитов сегодня, нижняя - хостов сегодня. В этой заметке мы рассмотрим способы изменения внешнего вида счетчика и способы отображения на нем другой, не менее полезной информации.

В конце заметки Вы можете посмотреть все виды рассматриваемых счетчиков и скачать их для использования.


Исходные данные

CNStats может предоставить следующую информацию для отображения на счетчике:

  • Хитов сегодня, вчера и всего;
  • Хостов сегодня, вчера и всего;
  • Пользователей сегодня, вчера и всего;
  • Пользователей сейчас на сайте.

Так как CNStats может учитывает посещения роботов, то можно вывести информацию и по ним:

  • Роботов сегодня, вчера и всего;
  • Процентное отношения роботы/пользователи.

Кроме того, можно сделать разнообразные счетчики графически отображающие динамику изменения посещаемости сайта.


Отображение счетчиков в CNStats

По умолчанию, скрипт, отображающий картинку счетчика находится в корневом каталоге CNStats и называется cnts.php (от англ. Counter-Show). Я рекомендую называть файлы ваших счетчиков подобным образом, например cnts-big.php, cnts-ttf.php и т.п.

Начнем написание кода с некоторой, стандартной "рыбы", которую должен содержать код любого счетчика CNStats:

<?
error_reporting(E_ALL & ~E_NOTICE);

// Подключаемся к конфигурационному файлу.
include "config.php";

// Создаем изображения, из заранее заданного шаблона.
$im=ImageCreateFromPng("button.png");

// Соединяемся с MySql сервером.
$CONN=@mysql_connect($STATS_CONF["sqlhost"],
                     $STATS_CONF["sqluser"],
                     $STATS_CONF["sqlpassword"]);
if (mysql_errno()==0) {

    // Выбираем базу данных
    @mysql_select_db($STATS_CONF["dbname"]);

    if (mysql_errno()==0) {
        // .. тут выполняются все необходимые действия
        // по созданию изображения ...    
        }
    }

// Отправляем HTTP заголовок Content-Type
Header("Content-type: image/png");

// Генерируем изображения
ImagePng($im);

// Очищаем память
ImageDestroy($im);
?>

Далее этот код будет вставляться без комментариев.


Счетчик №1 - стандартный


счетчик CNStats

<?
error_reporting(E_ALL & ~E_NOTICE);
include "config.php";

$im=ImageCreateFromPng("button.png");
$CONN=@mysql_connect($STATS_CONF["sqlhost"],
                     $STATS_CONF["sqluser"],
                     $STATS_CONF["sqlpassword"]);
if (mysql_errno()==0) {
    @mysql_select_db($STATS_CONF["dbname"]);

    if (mysql_errno()==0) {

        // Выбираем данные 
        // t_hits - хитов всего
        // hits - хитов сегодня
        // hosts - хостов сегодня
        $r=@mysql_query("SELECT t_hits,hits,hosts FROM cns_counter");

        // Переносим единственную выбранную запись в ассоциативный массив
        $res=@mysql_fetch_array($r,MYSQL_ASSOC);

        // Освобождаем память
        @mysql_free_result($r);

        // Выделям необходимые цвета
        $black=ImageColorAllocate($im,0,0,0);
        $color=ImageColorAllocate($im,$COUNTER["inkR"],
                                      $COUNTER["inkG"],
                                      $COUNTER["inkB"]);

        // Выводим числа
        ImageString($im,2,86-6*strlen($res["t_hits"]),1,$res["t_hits"],$color);
        ImageString($im,1,85-5*strlen($res["hits"]),13,$res["hits"],$color);
        ImageString($im,1,85-5*strlen($res["hosts"]),20,$res["hosts"],$color);
        }
    }

Header("Content-type: image/png");
ImagePng($im);
ImageDestroy($im);
?>

Самая интересная часть этого кода - это SQL запрос, которые выбирает отображаемые данные из таблицы:

SELECT t_hits,hits,hosts FROM cns_counter

Рассмотрим, что еще мы можем "вытащить" из таблиц CNStats, так, чтобы это практически не нагружало сервер.

SELECT hits, hosts, users,
       t_hits, t_hosts, t_users,
       u_hits, u_hosts,
       u_t_hits, u_t_hosts
FROM cns_counter;

Здесь:

  • hits - хитов сегодня
  • hosts - хостов сегодня
  • users - пользователей сегодня
  • t_hits - хитов всего
  • t_hosts - хостов всего
  • t_users - пользователей всего
  • u_hits - хитов от посетителей за сегодня (исключены роботы)
  • u_hosts - хостов от посетителей за сегодня (исключены роботы)
  • u_t_hits - хитов от посетителей всего (исключены роботы)
  • u_t_hosts - хостов от посетителей всего (исключены роботы)
  • u_hits-hits - хитов от роботов за сегодня
  • u_hosts-hosts - хостов от роботов за сегодня
  • u_t_hits-t_hits - хитов от роботов всего
  • u_t_hosts-t_hosts - хостов от роботов всего

Помните! Роботы учитываются только при использовании "PHP-Include" и "комбинированного" счетчиков.

Ниже приведен запрос, который получает количество посетителей в данные момент находящихся на сайте (условно).

SELECT count(DISTINCT hid) as online
   FROM cns_log
   WHERE date>NOW() - INTERVAL 3 MINUTE;

Счетчик №2 - хитов всего, хитов сегодня, пользователей сегодня и сейчас на сайте


счетчик CNStatsсчетчик CNStats

Как вы видите из изображения счетчика, здесь мы использовали другое базовое изображение, для того что бы уместить цифру "сейчас на сайте". (красным цветом)

<?
error_reporting(E_ALL & ~E_NOTICE);
include "config.php";

$im=ImageCreateFromPng("button-tt.png");
$CONN=@mysql_connect($STATS_CONF["sqlhost"],
                     $STATS_CONF["sqluser"],
                     $STATS_CONF["sqlpassword"]);
if (mysql_errno()==0) {
    @mysql_select_db($STATS_CONF["dbname"]);

    if (mysql_errno()==0) {

        // Выбираем данные 
        // t_hits - хитов всего
        // hits - хитов сегодня
        // users - пользователей сегодня
        $r=@mysql_query("SELECT t_hits,hits,users FROM cns_counter");

        // Переносим единственную выбранную запись в ассоциативный массив
        $res=@mysql_fetch_array($r,MYSQL_ASSOC);

        // Освобождаем память
        @mysql_free_result($r);

        // Выделяем необходимые цвета
        $black=ImageColorAllocate($im,0,0,0);
        $red=ImageColorAllocate($im,255,0,0);

        // Выводим числа
        ImageString($im,2,3,1,$res["t_hits"],$black);
        ImageString($im,1,3,13,$res["hits"],$black);
        ImageString($im,1,3,20,$res["users"],$black);

        // Выбираем "сейчас на сайте"
        $r=@mysql_query("SELECT count(DISTINCT hid) as online
                         FROM cns_log
                         WHERE date>NOW() - INTERVAL 3 MINUTE;");

        $text=@mysql_result($r,0,0);
        @mysql_free_result($r);
        // Выводим "сейчас на сайте"
        ImageString($im,1,80-5*strlen($text),4,$text,$red);
        }
    }

Header("Content-type: image/png");
ImagePng($im);
ImageDestroy($im);
?>

Счетчик №3 - использование True-Type шрифтов при генерации счетчиков


счетчик CNStats

К сожалению, из-за того, что поддержка TrueType шрифтов установлена далеко не на всех серверах, такой счетчик не включается в дистрибутив. Жаль, очень красивый счетчик

На этом счетчике, для разнообразия, мы вывели хитов сегодня, хостов сегодня и пользователей сегодня.

<?
error_reporting(E_ALL & ~E_NOTICE);
include "config.php";

// Эта функция позволяет определить длину строки в пикселях
function width($text) {
    $box=imagettfbbox(7, 0, FONT_TAHOMA, $text);
    return($box[2]-$box[1]);
    }

// Шрифт, который мы используем для вывода счетчика.
// Можно взять из C:\Windows\Fonts
define('FONT_TAHOMA', 'tahoma.ttf');

// Внимание ! Изображение должно быть True-Color (24 бита)
$im=ImageCreateFromPng("button-tt.png");
$CONN=@mysql_connect($STATS_CONF["sqlhost"],
                     $STATS_CONF["sqluser"],
                     $STATS_CONF["sqlpassword"]);

if (mysql_errno()==0) {
    @mysql_select_db($STATS_CONF["dbname"]);

    if (mysql_errno()==0) {

        // Выбираем данные 
        // hits - хитов сегодня
        // hosts - хостов сегодня
        // users - пользователей сегодня
        $r=@mysql_query("SELECT hits,hosts,users FROM cns_counter");

        // Переносим единственную выбранную запись в ассоциативный массив
        $res=@mysql_fetch_array($r,MYSQL_ASSOC);

        // Освобождаем память
        @mysql_free_result($r);

        // Выводим текст
        $text = $res["hits"];
        Imagettftext($im,7, 0, 4, 10, 0x03314A, FONT_TAHOMA, $text);

        $text = $res["hosts"];
        Imagettftext($im,7, 0, 4, 19, 0x03314A, FONT_TAHOMA, $text);

        $text = $res["users"];
        Imagettftext($im,7, 0, 4, 28, 0x03814A, FONT_TAHOMA, $text);

        $r=mysql_query("SELECT count(DISTINCT hid) as online
                        FROM cns_log
                        WHERE date>NOW() - INTERVAL 10 MINUTE;");
        $text = mysql_result($r,0,0);
        Imagettftext($im,7, 0, 80-width($text), 12, 0xC0314A, FONT_TAHOMA, $text);
        }
    }

ImagePng($im);
ImageDestroy($im);
?>

Счетчик №4 - хитов всего, хитов сегодня, пользователей сегодня, процент роботов


счетчик CNStats

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

<?
error_reporting(E_ALL & ~E_NOTICE);
include "config.php";

// Эта функция позволяет определить длину строки в пикселях
function width($text) {
    $box=imagettfbbox(7, 0, FONT_TAHOMA, $text);
    return($box[2]-$box[1]);
    }

// Шрифт, который мы используем для вывода счетчика.
// Можно взять из C:\Windows\Fonts
define('FONT_TAHOMA', 'tahoma.ttf');

// Внимание ! Изображение должно быть True-Color (24 бита)
$im=ImageCreateFromPng("button-tt.png");

$CONN=@mysql_connect($STATS_CONF["sqlhost"],
                     $STATS_CONF["sqluser"],
                     $STATS_CONF["sqlpassword"]);

if (mysql_errno()==0) {
    @mysql_select_db($STATS_CONF["dbname"]);

    if (mysql_errno()==0) {

        // Выбираем данные 
        // t_hits - хитов всего
        // hits - хитов сегодня
        // users - пользователей сегодня
        // u_hits - хитов от посетителей
        $r=@mysql_query("SELECT t_hits,hits,users, u_hits FROM cns_counter");

        // Переносим единственную выбранную запись в ассоциативный массив
        $res=@mysql_fetch_array($r,MYSQL_ASSOC);

        // Освобождаем память
        @mysql_free_result($r);

        // Выводим текст
        $text = number_format($res["t_hits"],0,","," ");
        Imagettftext($im,7, 0, 5, 11, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 4, 10, 0x03314A, FONT_TAHOMA, $text);

        $text = number_format($res["hits"],0,","," ");
        Imagettftext($im,7, 0, 5, 20, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 4, 19, 0x04476C, FONT_TAHOMA, $text);

        $text = number_format($res["users"],0,","," ");
        Imagettftext($im,7, 0, 5, 29, 0xcccccc, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 4, 28, 0x04876C, FONT_TAHOMA, $text);

        // Рассчитываем процентное отношение роботов
        if ($res["hits"]!=0)
            $text = intval((1-$res["u_hits"]/$res["hits"])*100)."%";
        else
            $text="0";

        // Выводим текст
        Imagettftext($im,7, 0, 80-width($text), 12, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 79-width($text), 11, 0x03804A, FONT_TAHOMA, $text);
        }
    }

ImagePng($im);
ImageDestroy($im);
?>

Счетчик №5 - все вместе


счетчик CNStatsсчетчик CNStats

Этот большой счетчик является суммой всех предыдущих.

<?
error_reporting(E_ALL & ~E_NOTICE);
include "config.php";

// Эта функция позволяет определить длину строки в пикселях
function width($text) {
    $box=imagettfbbox(7, 0, FONT_TAHOMA, $text);
    return($box[2]-$box[1]);
    }

// Шрифт, который мы используем для вывода счетчика.
// Можно взять из C:\Windows\Fonts
define('FONT_TAHOMA', 'tahoma.ttf');

// Внимание ! Изображение должно быть True-Color (24 бита)
$im=ImageCreateFromPng("button-big.png");

$CONN=@mysql_connect($STATS_CONF["sqlhost"],
                     $STATS_CONF["sqluser"],
                     $STATS_CONFs["sqlpassword"]);

if (mysql_errno()==0) {
    @mysql_select_db($STATS_CONF["dbname"]);

    if (mysql_errno()==0) {

        $r=@mysql_query("SELECT t_hits,t_hosts,t_users,hits,hosts,
                         users,u_hits FROM cns_counter");
        $res=@mysql_fetch_array($r,MYSQL_ASSOC);
        @mysql_free_result($r);

        $text = number_format($res["t_hits"],0,","," ");
        Imagettftext($im,7, 0, 86-width($text), 11, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 10, 0x03314A, FONT_TAHOMA, $text);

        $text = number_format($res["hits"],0,","," ");
        Imagettftext($im,7, 0, 86-width($text), 20, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 19, 0x0331FF, FONT_TAHOMA, $text);

        $text = number_format($res["t_hosts"],0,","," ");
        Imagettftext($im,7, 0, 86-width($text), 31, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 30, 0x03314A, FONT_TAHOMA, $text);

        $text = number_format($res["hosts"],0,","," ");
        Imagettftext($im,7, 0, 86-width($text), 40, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 39, 0x0331FF, FONT_TAHOMA, $text);

        $text = number_format($res["t_users"],0,","," ");
        Imagettftext($im,7, 0, 86-width($text), 51, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 50, 0x03314A, FONT_TAHOMA, $text);

        $text = number_format($res["users"],0,","," ");
        Imagettftext($im,7, 0, 86-width($text), 60, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 59, 0x0331FF, FONT_TAHOMA, $text);

        $r=mysql_query("SELECT count(DISTINCT hid) as online
                        FROM cns_log
                        WHERE date>NOW() - INTERVAL 3 MINUTE;");
        $text = mysql_result($r,0,0);
        Imagettftext($im,7, 0, 86-width($text), 70, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 69, 0xC0314A, FONT_TAHOMA, $text);

        $text = sprintf("%.2f%%",(1-$res["u_hits"]/$res["hits"])*100);
        Imagettftext($im,7, 0, 86-width($text), 82, 0xCCCCCC, FONT_TAHOMA, $text);
        Imagettftext($im,7, 0, 85-width($text), 81, 0x03804A, FONT_TAHOMA, $text);
        }
    }
ImagePng($im);
ImageDestroy($im);
?>

Скачать

ПримерСсылкаСистемные требования
счетчик CNStats Скачать GD, поддержка PNG
счетчик CNStats Скачать GD, поддержка PNG
счетчик CNStats Скачать GD 2.0+, поддержка PNG, поддержка TrueType
счетчик CNStats Скачать GD 2.0+, поддержка PNG, поддержка TrueType
счетчик CNStats Скачать GD 2.0+, поддержка PNG, поддержка TrueType

Если Вы в чем-то не разобрались, или хотите поделится интересным советом - пишите. Мы будем рады ответить на любые ваши вопросы.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
58K
19 февраля 2010 года
dmbltro
0 / / 19.02.2010
Мне нравитсяМне не нравится
19 февраля 2010, 20:49:29
Мне такая статья пригодилась. Только читал на другом сайте. Но ошибки везде одинаковые:
1. В счётчиках 3, 4 и 5 не хватает строки
Код:
Header("Content-type: image/png");

перед
Код:
ImagePng($im);

ImageDestroy($im);

?>


2. В счётчике 5 в строке
Код:
$STATS_CONFs["sqlpassword"]);

лишняя буква s
2.
Аноним
Мне нравитсяМне не нравится
17 ноября 2005, 14:43:36
Какая то дико рекламная акция счетчика СНС, а не статьи... :(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог