CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Счетчик
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Секреты и советы
Easy-Web
Как известно, бесплатные счетчики не позволяют получать развернутую статистику за длительный период. Для этого делаем свой счетчик на основе механизма записи сессий.
Для начала создаем таблицу

CREATE TABLE IF NOT EXISTS `el_hits` (
`date` date NOT NULL,
`shows` int(20) NOT NULL
)

Наиболее эффективно создавать эту таблицу на хостинге NetLevel. Отличительными чертами NetLevel является:
* Полная совместимость с Eleanor CMS и бесплатная установка
* Скидки и специальные акции связанные с Eleanor CMS
* Техническая поддержка 24/7/365

Но если вы уже разместили свой сайт на каком-то другом хостинге, советую как можно быстрее перенести его на NetLevel.

Далее открываем файл class_account.php

Функция KillSessions служит для удаления записей в таблице сессий. Это необходимо для того чтобы не многократно не повторялись записи сессии одного и того же посетителя

Мы слегка доработаем эту функцию, нам надо чтобы она возвращала число удаленных записей.
Заменяем последнюю строчку
$this->Mainclass->Db->Delete('sessions',join(' OR ',$where),__file__,__line__);

на
return $this->Mainclass->Db->Delete('sessions',join(' OR ',$where),__file__,__line__);



Функция AddSession служит для вставки записей в таблицу сессии. Нас интересует фрагмент, где вызывается KillSessions

$this->KillSessions();


вместо этой строчки вставляем блок текста. Не забудьте заменить слово префикс на латиницу. Почему то этот редактор коверкает при сохранении это слово.

//при вызове KillSessions проверяем сколько она удалила:
		if (!$this->KillSessions()) {
//если удалений не производилось, значит посетитель уникальный и его посещение надо зафиксировать.
//Делаем в нашей новой таблице запрос количества посещений за сегодняшнюю дату. 
//Так же будет понятно, добавлялась ли сегодня в эту таблицу запись для их хранения .
			$this->Mainclass->Db->Query('SELECT shows FROM `префикс_hits` WHERE (`date` = "'.date('Y-m-d').'") LIMIT 1',__file__,__line__);
			if($this->Mainclass->Db->Num_rows()==0) {
//Если запись с сегодняшней датой еще не добавлялась, то мы ее добавляем с числом посещений "1".
				$this->Mainclass->Db->Insert(
											'hits',
											array(
													'date'=>date('Y-m-d'),
													'shows'=>'1'
											),
											__file__,
											__line__
				);

			} else {
// Если сегодня уже были добавлены записи, мы получаем количество сегодняшних посещений
				list($shows)=$this->Mainclass->Db->Fetch_row();
//И затем увеличиваем сегодняшние посещения на еденицу 
				$this->Mainclass->Db->Update(
											'hits',
											array(
												'shows'=>($shows+1)
											),
											'(`date` = "'.date('Y-m-d').'") LIMIT 1',
											__file__,
											__line__
				);

			}
		}



Таким образом, при любом исходе, мускул подгружается двумя легенькими запросами, а практически все необходимые предварительные вычисления (например расчет времени жизни сессии и т.п. ) уже заранее предусмотрены в движке.
Подозреваю, что Александр уже готовил подобный код для продажи, а я взял и все испортил и выложил для всех ...

Кому-то может не понравится что я несколько раз вызвал функцию date('Y-m-d') вместо того чтобы один раз записать ее значение в переменную. Это будет вашим домашним заданием, дорогие оптимизаторы кода! Я не люблю переменные, особенно когда их хренова туча.

Еще можно добавить в таблицу индекс для поля data. Я не стал.

Вы спросите, а как же получать отображение статистики? Да никак.

Во первых не хочу мешать Александру, а во вторых за интерфейс заказчик не заплатил и требуют просто статистику в любом виде. Для этого в phpMyAdmin делаю экспорт таблицы в Excel и там рисую графики.
Loader
Ты бы лучше гостевую выложил! :rolleyes:
Loader
А два раза - это для особо тупых? :rofl:
Easy-Web
Случайно получилось два раза - ошибку нашел и правку делал,
Уже удалил.
Скоро выложу, я ее доработать хочу.

Loader
Да мне и без доработки пойдет! :)
Easy-Web
Цитата (Loader @ 2010-08-20, 13:25)
Да мне и без доработки пойдет! :)

Нехочется сырой продукт выносить на свет

P.S.
Неделю назад оказался весьма кстати заблаговременно скачанный фильм "Я - легенда". Очень удобно смотреть ночью - никому не мешаешь, не надо включать комп или телевизор.
Только для привлечения эплобыдла тебе стоит добавить копию фильма в MP4. Да я и на своем HTC только потому посмотрел, что нестандартный плейер поставил. В стандартном Windwos Media на Windows Mobile 6.1 поддержка только wmv и mp4
Loader
Цитата (Zzzhan @ 2010-08-20, 10:35)
Неделю назад оказался весьма кстати заблаговременно скачанный фильм "Я - легенда". Очень удобно смотреть ночью - никому не мешаешь, не надо включать комп или телевизор.
Только для привлечения эплобыдла тебе стоит добавить копию фильма в MP4. Да я и на своем HTC только потому посмотрел, что нестандартный плейер поставил. В стандартном Windwos Media на Windows Mobile 6.1 поддержка только wmv и mp4

Так у меня на сайте по этому вопросу всё разжёвано до мелочей: ЗДЕСЬ

Core Player - это же стандарт воспроизведения видео! Крутит даже на слабых машинках (типа моей :) )
А чтобы видео кто-то в стандартном Windows Media смотрел - это лично для меня сенсация :blink:
Насчёт пользователей Айфонов - не думаю что их так уж много, да и сайт изначально для КПК-шек создавался.Видно будет.
Easy-Web
Цитата (Loader @ 2010-08-20, 15:35)
Насчёт пользователей Айфонов - не думаю что их так уж много


Не стоит недооценивать происки Стива Джобса. Созданная им империя ай-придурков скоро захлестнет мир. Быдло так и лезет на эти хреновины.

А насчет CorePlayer, так я его поставил в первые дни покупки КПК. Никакой альтернативы и не существует. Наверно действительно стандарт. Сижу теперь и думаю, нужно ли мне было свои старые клипы и фильмы в mp4 конвертить? Ведь, например, твои Xvid фильмы можно и на DVD-плейере по телеку смотреть Качество позволяет. Пираты, запихивая по 10 фильмов на DVD примерно такое же разрешение ставят (360x288 - четверть кадра DVD). И ведь смотрим же.
Кроме того, фильм весит в три раза меньше - появляется масса других удобств - хранение, быстрота скачивания и т.п.

Тема ушла в другую сторону. Ну и что. Моя тема, о чем хочу о том и говорю.

Напомню, мы говорили о счетчике. Он считает только просмотры. Он не считает клики и пользователей. В моем случае эта статистика достаточна. Для получения дополнительных данных нужны незначительные дополнительные навороты.
eklips
Спасибо! Нужно будет на днях обязательно попробовать.

Phoenix84
Цитата (Zzzhan @ 2010-08-20, 14:20)
Не стоит недооценивать происки Стива Джобса. Созданная им империя ай-придурков скоро захлестнет мир. Быдло так и лезет на эти хреновины. 

Блин, абсолютно согласен. а потом доказывают миру, что ай_огрызок круче всех...
Easy-Web
Билла Гейтса на них нет
Easy-Web
Продолжим. Делаем вывод статистики в файл Excel

Находим в файле class_functions функцию FileMimeType и дополняем ее типом csv, добавляя следующую строчку среди ей подобных:


'csv'		=>'text/csv',


Находим в файле section_general.php (в админке) следующий код

<div id="stab1" class="tabcontent">
<table class="tabstyle">
<tr class="first tabletrline1"><td>'.$lang['stcomm'].'</td><td align="center"><b>'.$comments[1].'</b> ('.$comments[0].')</td></tr>
<tr class="tabletrline2"><td>'.$lang['stuser'].'</td><td align="center"><b>'.$users[1].'</b> ('.$users[0].')</td></tr>
<tr class="tabletrline1"><td>'.$lang['stsite'].'</td><td align="center"><b>'.$sitelife.'</b></td></tr>
<tr class="last tabletrline2"><td>'.$lang['time_on_server'].'</td><td align="center">'.date('Y-m-d H:i:s',$Mainclass->MyTime()).'</td></tr>
///// место вставки кода
</table>


И вставляем в отмеченное место следующий код
<tr class="last tabletrline2"><td>Журнал посещений</td><td align="center"><a href="download.php?counter=1">Скачать</a></td></tr>


заходим в файл download.php (который в корне)
и находим там:

elseif(isset($_GET['captcha']))
{
	$Mainclass->Loadclass('classes/captcha/class_captcha.php');
	$Mainclass->Captcha->GetImage('',$_GET['captcha']);
}
///// место вставки кода
elseif(isset($_GET['download']))


И вставляем в отмеченное место следующий код не забывая как и в первом посте заменить слово "префикс" на "prefix" :

elseif(isset($_GET['counter']) )
{
	if(isset($Mainclass->Login)) {
		if($Mainclass->services[$Mainclass->service_id]['login']==$Mainclass->services[1]['login'])
		{
			$old_service=$Mainclass->service;
			$old_id=$Mainclass->service_id;
			$Mainclass->service='admin';
			$Mainclass->service_id='1';
		}
		$Mainclass->Login->IsUser();
		if ($Mainclass->Permission->IsAdmin()) {
			$counterstream = '';
			$Mainclass->Db->Query('SELECT `date`,`shows` FROM `префикс_hits` ORDER BY `date`',__file__,__line__);
			while (list($date,$shows) = $Mainclass->Db->Fetch_row()) $counterstream .= date('d.m.Y',strtotime($date)).";".$shows."\n";
			Functions::OutputStream($counterstream,'counter.csv');
		} else {
			ExitPage();
		}
	} else {
		ExitPage();
 	}
}


В результате на главной странице админки в статистике получаем ссылку на csv файл статистики, который генерируется из таблицы просмотров. У большинства пользователей он будет открываться в Excel или Open Office . Далее можно будет строить графики.
Monk
Цитата (Easy-Web @ 2020-10-26 22:52)
Наиболее эффективно создавать эту таблицу на хостинге NetLevel

Из всех высказываний мне это больше всего понравилось!!:sarcastic_hand::rolleyes:
Easy-Web
Цитата (Monk @ 2010-12-06, 2:31)
Из всех высказываний мне это больше всего понравилось!!:sarcastic_hand::rolleyes:


Если б они мне еще и заплатили за это, я бы им поэму бы написал... не говоря о слоганах и девизах.

Я на хостинге NetLevel
Разместил мегапортал
И теперь где бы я не был
За него спокоен я

Потому что в этой фирме
Словно звери сервера
Там ведь гении - админы
Технари - проффесора

Забухать хоть на неделю
В отпуск хоть на целый год
Волноваться не придется
Что мой сайтик вдруг помрет




Sys(3)X
Цитата (Easy-Web @ 2020-10-26 22:52)
Я на хостинге NetLevel
Разместил мегапортал
И теперь где бы я не был
За него спокоен я

Потому что в этой фирме
Словно звери сервера
Там ведь гении - админы
Технари - проффесора

Забухать хоть на неделю
В отпуск хоть на целый год
Волноваться не придется
Что мой сайтик вдруг помрет


Ну просто шедевр)) Сообщите в личку свой email у нас для бонуса.

Кстати, на эту тему наткнулся перейдя по ссылке в почте со своего iPhone и вдвойне заинтересовался обсуждением :)
Monk
Цитата (Easy-Web @ 2011-02-01, 11:20)
Словно звери сервера
 

Сервера, может быть, и звери, да работают медленно ;)

Loader
Цитата (Monk @ 2020-10-26 22:52)
Сервера, может быть, и звери, да работают медленно

Так звери-то разные бывают...ленивцы например :sarcastic_hand:

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.