При установке 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) { // .. тут выполняются все необходимые действия // по созданию изображения ... } }
Далее этот код будет вставляться без комментариев.
Счетчик №1 - стандартный
<? 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); } }
* 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 - хитов всего, хитов сегодня, пользователей сегодня и сейчас на сайте
Как вы видите из изображения счетчика, здесь мы использовали другое базовое изображение, для того что бы уместить цифру "сейчас на сайте". (красным цветом)
<? 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); } }
Счетчик №3 - использование True-Type шрифтов при генерации счетчиков
К сожалению, из-за того, что поддержка 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:WindowsFonts 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);
В этом примере, помимо роботов мы немного изменим внешний вид счетчика - добавим тени, и с помощью отступов сделаем числа более удобочитаемыми.
<? 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:WindowsFonts define(FONT_TAHOMA, tahoma.ttf);
// Внимание ! Изображение должно быть True-Color (24 бита) $im=ImageCreateFromPng(button-tt.png);
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);
Этот большой счетчик является суммой всех предыдущих.
<? 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:WindowsFonts define(FONT_TAHOMA, tahoma.ttf);
// Внимание ! Изображение должно быть True-Color (24 бита) $im=ImageCreateFromPng(button-big.png);