IMHOblog.ORG » Веб, сайты, движки » DataLife Engine DLE ДЛЕ модули хаки простой треп » Просмотры страницы (делаем только уникальные)
МЫСЛИ
cms,

php

,
блог
,

веб

,

движки

, женщины, записки инет натуралиста, здоровье,
интернет
, кидалы, мир, модули,

сайтостроение

, сео,
скрипты
, сплетни, феменизм, халява,
юмор
, Яндекс
ВАШЕ МНЕНИИЕ
Почему Вы здесь?

Блог у тебя класный smile
Пришел почитать умные мысли bully
Фиг знает no
Я? Где я? tongue
ПАНЕЛЬ УПРАВЛЕНИЯ
Логин:
Пароль:
 
Новые комментарии
» Есть вопросы? (4)
» Принимаю "заявки" ... (1)
» Просмотры ... (1)
» Кирилические url (2)
» Летнее время ... (5)
Найти на сайте


Точное вхождение
Подписаться на новости сайта
Введите Ваш e-mail:

Вы не робот?
Включите эту картинку для отображения кода безопасности

Отказаться о подписки

  Популярные записи в блоге

Летнее время (перевод часов, ... Сегодня ночью, множество стран мира в очередной раз перевили часы на летнее время, т.е. на один час ...

Есть вопросы? Тут посмотрел статистику посещаемости и подумалось что люди ищут ответы на различные вопросы, чаще ...

Кирилические url Вот как-то так сделал, как видете на блоге появились url в нестандартном зато кириличсеком ...

Просмотры страницы (делаем ... При просмотре новости скрипт DLE считает просмотры (если конечно включено в настройках, вот только ...

Принимаю "заявки" :) Если вам нужно сделать модуль или хак для ДЛЕ, но Вы не знаете как, то вам сюда :) жмем подробнее...

Просмотры страницы (делаем только уникальные)

При просмотре новости скрипт DLE считает просмотры (если конечно включено в настройках, вот только считаются все просмотры, дае одним и тем же посетителем, то делает статистику "кривой" так как посетитель может обновлять страницу в ожидании нового комментария.
Как бы это поправить...

Строки отвечающие за подсчет просмотров новости находятся в файле show.full.php который лежит в папке engine/modules
Вот эти строки:

           if( $config['allow_read_count'] == "yes" ) {
               if( $config['cache_count'] ) $db->query( "INSERT INTO " . PREFIX . "_views (news_id) VALUES ('{$row['id']}')" );
            else $db->query( "UPDATE " . PREFIX . "_post set news_read=news_read+1 where id='{$row['id']}'" );
        }


Все достаточно просто, просто в зависимости от настроек генерируется запрос к БД.
Нам же нужно чтобы в некотрых случаях счетчик не обновлялся.
Что нам нужно
Нам нужно запомнить какой посетитель какую новость смотрел, при этом эту инфу убрать через скажем несколько часов, так как если посетитель вернется на новость через час то уже можно сменло засчитывать этот просмотр, (для подсчета хостов есть другие решения, например тот же http://www.liveinternet.ru/).
Как это сделать
Можно хранить информацию либо в cookie самого посетителя либо в БД, если мы будет все это записывать в cookie то .... словом нереально, разве что у вас на сайте только 10 новостей (почти как у меня сейчас :) )
Тогда нужно записывать инфу в БД, тут то т трабла
В чём трабла
Трабла в том что это один или два лишних запроса к БД, один чтобы посмотреть есть ли запись, второй чтобы эту запись создать (в случае если её там нет).
Нафиг это нужно, словом рекомендую забить и не читать дальше

Почему читаете? Вам сервер не жалко?


Ну фиг с вами, если уж так надо читайте, но я не рекомендую делать так как написано ниже.

Сначала иде м phpmyadmin, там выполняем такой запорос:
ALTER TABLE `dle_views` ADD `ip` VARCHAR( 16 ) NOT NULL;

dle это ваш префикс таблиц, если забыли можно вспомнить заглнув в файл dbconfig.php который в папке data, парметр "PREFIX".

Открываем show.full.php находим там:

           if( $config['allow_read_count'] == "yes" ) {
               if( $config['cache_count'] ) $db->query( "INSERT INTO " . PREFIX . "_views (news_id) VALUES ('{$row['id']}')" );
            else $db->query( "UPDATE " . PREFIX . "_post set news_read=news_read+1 where id='{$row['id']}'" );
        }

Заменяем на

           //Смотрим смотрел ли данный посетиетель эту новость.
    $test_ip = $db->super_query ("SELECT news_id FROM " . PREFIX . "_views WHERE news_id='{$row['id']}' and ip='{$_IP}'");
           //Смотрим смотрел ли данный посетиетель эту новость.

       if($config['allow_read_count'] == "yes") {
           if($config['cache_count']){
               if(!$test_ip['news_id']){
                $db->query("INSERT INTO " . PREFIX . "_views (news_id, ip) VALUES ('{$row['id']}', '{$_IP}')");
            }
        }
        else {
               if(!$test_ip['news_id']){
                $db->query("INSERT INTO " . PREFIX . "_views (news_id, ip) VALUES ('{$row['id']}', '{$_IP}')");//Вот еще один дполнительный запрос
                $db->query("UPDATE " . PREFIX . "_post set news_read=news_read+1 where id='{$row['id']}'");
            }
        }
    }

Видете какой кашмар?
дополнительный запрос к БД, а в случае отключенного дополнительно два запроса к БД, все это лишняя нагрузка на сервер плюс замдление времни генерации страницы.
Ну если вам так нужно то как хотите, идем дальше.
Откройте файл engine/modules/cron.php
там найдите строки:
   if( $config['cache_count'] ) {
    $result = $db->query( "SELECT COUNT(*) as count, news_id FROM " . PREFIX . "_views GROUP BY news_id" );
    
    while ( $row = $db->get_array( $result ) ) {
        
        $db->query( "UPDATE " . PREFIX . "_post set news_read=news_read+{$row['count']} where id='{$row['news_id']}'" );
    
    }
    
    $db->free( $result );
    $db->query( "TRUNCATE TABLE " . PREFIX . "_views" );
    clear_cache( 'news_' );
}

Ниже вставьте (чтобы таблица логов просмотров регулярно чистилась вне зависмиости от того включено ли кеширование просмотров.
   if (!$config['cache_count']) {
   $db->query("TRUNCATE TABLE " . PREFIX . "_views");
}

Это уже третий дополнительный запрос к БД (правда выполнятся он будет относительно редко).
Вот, собсно все, готово :)
p.s.
На этом блоге всеатки поставил, пока посещаемость не очень так что можно ставить, но вам не советую

p.p.s
Перед всеми этими телодвижениями незабывайте делать бакуп того что меняете.

Читайте также: Кирилические url, Ник получателя в рассылке, Не показывать форму голосования тем кто проголосовал, Делаем красивывми leech ссылки, Отправка сообщений об mysql ошибках

Ключевые теги: веб, php, сайтостроение
 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Рейтинг:
  • 85
| 1 | 2 | 3 | 4 | 5 |  (голосов: 4)
Комментарии (1)  Распечатать
html-cсылка на публикацию:
BB-cсылка на публикацию:
Прямая ссылка на публикацию:  

Закладки:
Добавить на News2.ru Google slashdot YahooMyWeb Digg Technorati Delicious Забобрить эту страницу! Добавить на Newsland.ru Добавить на СМИ2 Добавить на RUmarkz Добавить на Ваау! Добавить на rucity.com Добавить в закладки МоёМесто.ru Добавить на Habr Добавить на Moi Novosti Добавить страницу к Mister Wong Добавить на Moikrug Добавить на Myscoop Добавить на 100zakladok Добавить на NewsGrad



Группа: ИМХОкомментатор
Регистрация: 4.04.2009
Отличный хак. Как раз то, чего мне лично очень не хватало на моем проекте. А то после каждого обновления странички опа и новый просмотр, статистика хромает. А теперь порядок. Респект автору :)
     
Информация
 
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.

 
 
© 2009 ИМХО блог
Программирование: Alex
При использваонии материалов указание источника IMHOblog.ORG и гипертекстовая ссылка на http://www.imhoblog.org/ обязательны
Время генерации страницы: 0.33815 секунд
Время компиляции шаблона: 0.00138 секунд
MySQL запросов: 5 (0.00639 секунд)