Правильный счетчик просмотра новостей

Правильный счетчик просмотра новостей

1.Будто правило,при просмотре новости счетчик всякий один прибавляет плюс один-одинехонек к просмотру. И это не подвластно от того кто взирает новинка. Таковским образом, один-одинехонек пользователь может беспрерывно обновлять страницу и век счетчик будет ползти ввысь. В настоящем случае хак выправляет и ладит просмотры новости 1 просмотр с одного IP.

2.Таки образом мы снижаем нагрузку на БД — обновка БД происходит, всего тогда когда пользователь просматривает новинка всего в начальный раз
Автор: keiZ
Проверен: Dle 9.0

Правильный счетчик просмотра новостей

1.Будто правило,при просмотре новости счетчик всякий один прибавляет плюс один-одинехонек к просмотру. И это не подвластно от того кто взирает новинка. Таковским образом, один-одинехонек пользователь может беспрерывно обновлять страницу и век счетчик будет ползти ввысь. В настоящем случае хак выправляет и ладит просмотры новости 1 просмотр с одного IP.

2.Таки образом мы снижаем нагрузку на БД — обновка БД происходит, всего тогда когда пользователь просматривает новинка всего в начальный раз

Установка
1) Через phpmyadmin делаем запрос

ALTER TABLE `*ПРЕФИКС*_post` ADD `ip_views` TEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NOT NULL;

где *ПРЕФИКС* — ваш префикс таблиц базы данных. (БД)

2) Находим в engine/engine.php

if (! $newsid) $sql_news = «SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle FROM » . PREFIX . «_post WHERE alt_name =’$news_name’ AND date >= ‘{$year}-{$month}-{$day}’ AND date < ‘{$year}-{$month}-{$day}’ + INTERVAL 24 HOUR LIMIT 0,1»;
                else $sql_news = «SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle FROM » . PREFIX . «_post where  id = ‘$newsid'»;

меняем на:

if (! $newsid) $sql_news = «SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle, ip_views FROM » . PREFIX . «_post WHERE alt_name =’$news_name’ AND date >= ‘{$year}-{$month}-{$day}’ AND date < ‘{$year}-{$month}-{$day}’ + INTERVAL 24 HOUR LIMIT 0,1»;
                else $sql_news = «SELECT id, autor, date, short_story, full_story, xfields, title, category, descr, keywords, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, approve, votes, access, flag, editdate, editor, reason, view_edit, tags, metatitle, ip_views FROM » . PREFIX . «_post where  id = ‘$newsid'»;

3) Находим в engine/modules/show.full.php

$db->query( «UPDATE » . PREFIX . «_post set news_read=news_read+1 where id='{$row[’id’]}'» );

меняем на:

{
                $_IP = $db->safesql( $_SERVER[‘REMOTE_ADDR’] );
                $ips=explode(«,», $row[‘ip_views’]);
                if(!in_array($_IP,$ips)){
                    if($row[‘ip_views’]==»»)
                        $ip_views=$_IP;
                    else
                        $ip_views=$row[‘ip_views’].»,».$_IP;
                $db->query( «UPDATE » . PREFIX . «_post set news_read=news_read+1 , ip_views=’$ip_views’ where id='{$row[‘id’]}'» );
            }
            
            }

Без рубрики