|
|
|
| Здравствуйте! Пересмотрел кучу счетчиков, ничего подходящего найти не удалось, остается надеяться на вашу помощь. Помогите, пожалуйста, с такого плана счетчиком страниц (страниц всего сейчас ок. 5000):
Запись информации:
1. Полный URL страницы
2. Полный TITLE страницы
3. дата установки счетчика на данной странице (или дата первого срабатывания).
4. текущее значение счетчика +1.
- Не считать Refresh F5, остальное - хиты, хосты, вчера, сегодня, завтра - неважно
======
Код внизу страницы для отображения значения счетчика.
======
Вывод на экран статистики в виде:
<URL>TITLE</URL>, дата установки, значение.
Возможность сортировки по любому значению.
ПРИМЕР:
000120 -- Римское авгуральное право. (12.02.05)
и т.д.
======
Возможно ли также сделать сортировку по популярности страницы, а не по текущему значению? Т.е., количество посетителей поделить на количество дней, прошедшее со дня установки счетчика на странице.
ПРИМЕР:
120/((12.03.05)-(12.02.05))=4 - в среднем, 4 человека в день - и сортировать по этой цифре. | |
|
|
|
|
|
|
|
для: SS
(13.03.2005 в 03:28)
| | Это так сложно или просто осталось без внимания? | |
|
|
|
|
|
|
|
для: SS
(14.03.2005 в 00:09)
| | Я почему-то подумал при первом просмотре темы что, вы готовый ищете. Постараюсь завтра отписаться по поводу такого счётчика, помоему где-то на форуме начало его валялось, поищу. | |
|
|
|
|
|
|
|
для: cheops
(14.03.2005 в 01:58)
| | Это я формулировал, что меня от счетчика интересует. На самом деле не так важно, какой там браузер, какая ОС, какой IP, во сколько минут и секунд посещали последний раз страницу и т.п. - это все информационный мусор какой-то. Важно, что людей интересует больше, а что меньше, чтобы свое свободное время, тратящееся на сайт, соответственно и расходовать, по возможности, рациональнее - у каждого человека есть ограниченный лимит времени на творчество. Вот и все. :) | |
|
|
|
|
|
|
|
для: SS
(14.03.2005 в 00:09)
| | А база данных MySQL вам не доступна? Это бы здорово облегчило бы жизнь и повысило надёжность Web-приложения. | |
|
|
|
|
|
|
|
для: cheops
(14.03.2005 в 02:02)
| | Да, доступна. | |
|
|
|
|
|
|
|
для: SS
(14.03.2005 в 02:57)
| | Т.е. в своей работе счётчик вполне может использовать таблицу MySQL? | |
|
|
|
|
|
|
|
для: cheops
(14.03.2005 в 09:23)
| | Да. | |
|
|
|
|
 1.7 Кб |
|
|
для: SS
(13.03.2005 в 03:28)
| | Этот счётчик написан на PHP, т.е. страница должна интерпертироваться как PHP-страница. Потребуется таблица MySQL (counter)
CREATE TABLE counter (
id_counter int(11) NOT NULL auto_increment,
url text NOT NULL,
title text NOT NULL,
puttime datetime NOT NULL default '0000-00-00 00:00:00',
total bigint(20) NOT NULL default '0',
PRIMARY KEY (id_counter)
) TYPE=MyISAM;
|
Сам счётчик представляет собой два файла config.php и count.php. Пример оформления страницы, участвующей в подсчёте приведён в index.php
<?php
// Название страницы необходимо поместить
// в переменную $title
$title = "Римское право";
// Подключаем счётчик
include "count.php";
?>
Здесь расположено основное содержимое страницы<br>
<?php
// Выводим результат на страницу, значение $id_counter
// определяется в файле count.php
$query = "SELECT total, DATE_FORMAT(puttime,'%d.%m.%Y') AS puttime FROM counter WHERE id_counter = $id_counter";
$ctn = mysql_query($query);
if($ctn)
{
$total = mysql_fetch_array($ctn);
echo sprintf("%06d",$total['total'])." - $title (".$total['puttime'].")";
}
?>
|
В первом блоке указывается путь к count.php, который при первом обращении вносит запись для страницы в таблицу counter, а при последующих увеличивает значение счётчика на единицу.
Во втором блоке происходит вывод числа посещений на странице. | |
|
|
|
|
|
|
|
для: cheops
(15.03.2005 в 11:30)
| | Спасибо огромное, все работает!
Как теперь вывести список страниц на отдельной странице в виде:
значение <URL>TITLE</URL>, дата установки
с возможностью сортировки (хотя бы по значению и по названию страницы)? | |
|
|
|
|
|
|
|
для: SS
(15.03.2005 в 17:03)
| | Это можно осуществить при помощи следующего кода
<?php
// Устанавливаем соединение с базой данных
inlude "config.php";
// Выводим страницы с сортировкой по названию страниц
$query = "SELECT url,
title,
total,
DATE_FORMAT(puttime,'%d.%m.%Y') AS puttime
FROM counter
ORDER BY title";
$ctn = mysql_query($query);
if(!$ctn) exit(mysql_error());
// В цикле выводим результаты
while($total = mysql_fetch_array($ctn))
{
echo "<a href=http://".$_SERVER['SERVER_NAME'].$total['url'].">".$total['title']."</a> дата установки - ".$total['puttime']." (".sprintf("%06d",$total['total']).")<br>";
}
// Выводим страницы с сортировкой по числу счётчика
$query = "SELECT url,
title,
total,
DATE_FORMAT(puttime,'%d.%m.%Y') AS puttime
FROM counter
ORDER BY total";
// Выводим страницы с сортировкой по дате установки и названию страницы
$query = "SELECT url,
title,
total,
DATE_FORMAT(puttime,'%d.%m.%Y') AS puttime
FROM counter
ORDER BY puttime, title";
?>
|
В конце приведены ещё два возможных запроса с различными вариантами сортировки - для их задействования следует подставить их вместо первого запроса $query. Следует обратить внимание на то, что config.php в данном случае отличается от того, что использовался в предыдущем счётчике, он прилагается в архиве. | |
|
|
|
|
|
|
|
для: cheops
(15.03.2005 в 11:30)
| | Да, есть еще одно пожелание:
допустим, есть 10 разделов (напр., 01, 02, 03 и т.д.), статистика по которым интересует, разумеется, поотдельности. Сейчас этого реализовать нельзя, насколько я понимаю? | |
|
|
|
|
|
|
|
для: SS
(15.03.2005 в 18:37)
| | Здесь есть два пути
- добавить ещё одно поле под номер раздела в таблице count с исправлением всего того, что сейчас есть. Так же придётся задавать явно номер раздела на странице счётчика или вычислять его исходя из URL страницы. Этот самый быстрый вариант, так как потом будет очень просто и быстро запросить все записи, чей номер раздела равен запрашиваемому
- второй вариант не предполгает изменения существующего кода и основан на вычислении номера раздела по полю URL, так как URL будут различаться - можно будет найти записи чей URL соответсвует запрашиваемому разделу. Этот медленнее, так как работа с числовыми полями протекает во много раз быстрее, чем с текстовыми. | |
|
|
|
|
|
|
|
для: cheops
(16.03.2005 в 12:48)
| | Да, конечно, лучше первый вариант. | |
|
|
|
|
|
|
|
для: SS
(16.03.2005 в 14:29)
| | А вы бы не могли бы тогда эти разделы перечислить и указать так же чем отличаются URL этих разделов друг от друга? | |
|
|
|
|
|
|
|
для: cheops
(16.03.2005 в 14:41)
| | Ну, наверное, лучше оставить 01, 02, 03, а там уже конкретно этот раздел вызывать на html-страницу, соответственно оформленную: название раздела, формат и т.д.
Тем не менее, например:
Раздел ПУБЛИКАЦИИ (http://ancientrome.ru/publik/)
Раздел АНТИЧНАЯ ЛИТЕРАТУРА (http://ancientrome.ru/antlitr/)
Раздел НОВОСТИ АРХЕОЛОГИИ (http://ancientrome.ru/archaeol/)
Раздел КАРТЫ (http://ancientrome.ru/map/)
и т.д., все не перечисляю.
Или, например, раздел и в нем подразделы:
Раздел АНТИЧНАЯ СКУЛЬПТУРА (http://ancientrome.ru/art/artwork/sculp/)
подраздел РИМСКИЕ ИМПЕРАТОРЫ (http://ancientrome.ru/art/artwork/sculp/rom/imp)
подраздел ГРЕЧЕСКАЯ МИФОЛОГИЯ (http://ancientrome.ru/art/artwork/sculp/mythology/gr/)
и т.д.
Т.е., понятно, - чтобы не мешалась мифология с императорами, новости археологии с античной литературой, и т.д., - поскольку разные совершенно вещи.
Но подраздел можно оформить и как самостоятельный раздел, главное вытащить по нему отдельную статистику. | |
|
|
|
|
 1.7 Кб |
|
|
для: SS
(16.03.2005 в 19:29)
| | Хорошо... просто номер раздела удобно вычислять автоматически из URL страницы, при подключении счётчика к 5000 страницам могут быть ошибки, если его вручную прописывать на каждой странице... Таблица counter теперь будет содержать дополнительное целочисленное поле под раздел - part
CREATE TABLE counter (
id_counter int(11) NOT NULL auto_increment,
url text NOT NULL,
title text NOT NULL,
puttime datetime NOT NULL default '0000-00-00 00:00:00',
total bigint(20) NOT NULL default '0',
part int(11) NOT NULL default '0',
PRIMARY KEY (id_counter),
KEY part (part)
) TYPE=MyISAM;
|
В аттаче исправленный вариант счётчика, выборка с сортировкой остаётся неизменной. Для выборки статистики определённого раздела в инструкцию WHERE SQL-запроса выборки необходи добавить дополнительное условие
где 1 - номер выбираемого раздела. | |
|
|
|
|
|
|
|
для: cheops
(16.03.2005 в 19:47)
| | 1.
>Для выборки статистики
>определённого раздела в инструкцию WHERE SQL-запроса выборки
>необходи добавить дополнительное условие
>
>где 1 - номер выбираемого раздела.
Извиняюсь, но не совсем понял, где это должно быть.
2. Как показания счетчика сортировать по убыванию?
3. Не сортирует по названию страницы. Правда, чтобы не прописывать все названия вручную, вместо
$title = "Римское право";
|
было прописано
$title=$_SERVER['PHP_SELF'];
$handle = fopen($_SERVER['SCRIPT_FILENAME'], "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
preg_match("/<title>(.*)<\/title>/i",$buffer,$find);
if ( $find[1] != "" ) {
$title=$find[1];
break;
}
}
fclose($handle);
|
, с чем, видимо и связана проблема. Как сортировать в данном случае? | |
|
|
|
|
|
|
|
для: SS
(16.03.2005 в 21:11)
| | 1) Извиняюсь, мне показалось что конструкция WHERE у нас уже имеется, запрос следует модифицировать следующим образом
<?php
$query = "SELECT url,
title,
total,
DATE_FORMAT(puttime,'%d.%m.%Y') AS puttime
FROM counter
WHERE part = 1
ORDER BY title";
?>
|
где 1 - номер раздела.
2) За сортировку значений несёт ответственность конструкция ORDER BY, для сортировки в обратном направлении следует добавить ключевое слово DESC
<?php
$query = "SELECT url,
title,
total,
DATE_FORMAT(puttime,'%d.%m.%Y') AS puttime
FROM counter
WHERE part = 1
ORDER BY title DESC";
?>
|
3) Посмотрите в таблице правильно ли добавляются значения в поле title, для этого необходимо воспользоваться панелью администрирования MySQL - phpMyAdmin, которая с высокой долей вероятности доступна у вас на хостинге. | |
|
|
|
|
|
|
|
для: cheops
(17.03.2005 в 00:46)
| | Отлично, все работает. Спасибо!
С сортировкой - проблема была в кодировке KOI8-R. | |
|
|
|
|
|
|
|
для: cheops
(17.03.2005 в 00:46)
| | Еще небольшой нюанс:
www.adres.ru
и
adres.ru/index.htm
и
adres.ru/
для него разные вещи и считает он их раздельно. Весь смысл счетчика убивается. Как быть? | |
|
|
|
|
|
|
|
для: SS
(17.03.2005 в 18:56)
| | Хм... вообще говоря строка
<?php
$title=$_SERVER['PHP_SELF'];
?>
|
Возвращает только часть URL, которая следует за доменом, т.е. в базе данных строки www.adres.ru и adres.ru не должны появляться, а появляться должны только /index.htm и /, тогда задача состоит в том, что если
<?php
if($_SERVER['PHP_SELF'] == "/") $_SERVER['PHP_SELF'] .= "index.html";
?>
|
Но я в полне допускаю, что у вас на сервере это не так и $_SERVER['PHP_SELF'] возвращает полный URL, тогда следует либо при помощи функции phpinfo() поискать аналог, либо отрезать доменную часть... | |
|
|
|
|
|
|
|
для: cheops
(17.03.2005 в 23:16)
| | А что прописать в случае, если код прежний (где-то удобнее ставить его, где-то - тот, что выше)?
<?php
$part =1;
$title="Римское право";
include ('count.php');
?> | |
|
|
|
|
|
|
|
для: SS
(18.03.2005 в 15:16)
| | Я если честно, не очень понял вопрос... :((( | |
|
|
|
|
|
|
|
для: cheops
(18.03.2005 в 19:35)
| | Это, наверное, я не совсем понял - где должен быть код?
<?php
if($_SERVER['PHP_SELF'] == "/") $_SERVER['PHP_SELF'] .= "index.html";
?>
|
| |
|
|
|
|
|
|
|
для: SS
(19.03.2005 в 01:28)
| | А у нас же $_SERVER['REQUEST_URI'], а не $_SERVER['PHP_SELF']... данный код должен быть размещён в файле count.php. Но я перестраховался и использовал $_SERVER['REQUEST_URI']... В этом случае следует применить другой подход - подумаю и отпишусь позже. | |
|
|
|
|
|
|
|
для: cheops
(19.03.2005 в 11:08)
| | Не забудьте про меня :) | |
|
|
|
|
|
|
|
для: SS
(20.03.2005 в 20:46)
| | Спасибо, что напомнили :))) Попробуйте заменить count.php на файл прикреплённый в архиве, попробуем составить строку с адресом файла самостоятельно
<?php
$url = $_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
?>
|
Мне кажется, что подстраховка
<?php
if(substr($_SERVER['PHP_SELF'],strlen($_SERVER['PHP_SELF'])-1) == "/") $_SERVER['PHP_SELF'] .= "index.html";
?>
|
теперь уже лишняя, но я не совсем в этом уверен, так как значения серверных переменных отличаются на различных серверах. | |
|
|
|
|
|
|
|
для: cheops
(20.03.2005 в 21:42)
| | Отлично! Спасибо! Только убрал вопросительный знак:
<?php
$url = $_SERVER['PHP_SELF']."".$_SERVER['QUERY_STRING'];
?>
|
| |
|
|
|
|
|
|
|
для: SS
(22.03.2005 в 01:20)
| | В принципе можно и убрать и записать ещё проще
<?php
$url = $_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING'];
?>
|
| |
|
|
|