Daily Views 1.1
Хак позволит вывести самые популярные по просмотрам новости за прошедший день, неделю, месяц и т.д. Для вывода используется стандартный тег custom с дополнительными параметрами.
Установка:
1. Выполнить базу данных MySQL запрос:
CREATE TABLE IF NOT EXISTS `dle_views_daily` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`news_id` int(11) NOT NULL DEFAULT '0',
`date` date DEFAULT NULL,
`views` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `news_id` (`news_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;
2. Открыть engine/modules/functions.php и найти:
if ($match[1] == "rand" ) { $fixed = ""; $news_msort = ""; } else $news_msort = "DESC";
if ($match[1] == "title" ) $news_msort = "ASC";
}
Добавить ниже:
#****** Daily View *** by MSW ******#
if( preg_match( "#days_views=['\"](.+?)['\"]#i", $param_str, $match ) ) {
$sql_select .= " LEFT JOIN " . PREFIX . "_views_daily v ON (p.id=v.news_id)";
$views_day = date( "Y-m-d", $_TIME );
$days = intval(trim($match[1]));
if($days==15) {
$day_s = date("Y-m-d", strtotime( "last Monday" )-60*60*24*6 );
$day_e = date("Y-m-d", strtotime( "last Sunday" ) );
$where[] = "v.date >= '{$day_s}' AND v.date <= '{$day_e}' DAY GROUP BY v.news_id";
} elseif($days==16) {
if(date("N")==1) $day_s = $views_day;
else $day_s = date("Y-m-d", strtotime( "last Monday" ) );
$where[] = "v.date >= '{$day_s}' GROUP BY v.news_id";
} else {
// $where[] = "v.date >= '{$views_day}' - INTERVAL {$days} DAY GROUP BY v.news_id";
$where[] = "v.date = '{$views_day}' - INTERVAL {$days} DAY GROUP BY v.news_id";
}
$news_sort = "SUM(v.views)";
}
#****** Daily View *** by MSW ******#
Найти далее:
$where[] = "date
Заменить на:
$where[] = "p.date
Найти далее:
'date' => 'date'
Заменить на:
'date' => 'p.date'
3. Открыть engine/modules/show.full.php и найти:
else $db->query( "UPDATE " . PREFIX . "_post_extras SET news_read=news_read+1 where news_id='{$row['id']}'" );
Добавить ниже:
#****** Daily View *** by MSW ******#
$views_day = date( "Y-m-d", $_TIME );
$db->query( "INSERT INTO " . PREFIX . "_views_daily (news_id, date, views) VALUES ('{$row['id']}', '{$views_day}', '1') ON DUPLICATE KEY UPDATE views=views+1;");
#****** Daily View *** by MSW ******#
4. Открыть cron.php и найти:
} elseif($cronmode == "antivirus") {
Добавить выше:
#****** Daily View *** by MSW ******#
} elseif($cronmode == "daily_views") {
$_TIME = time () + ($config['date_adjust'] * 60);
$views_day = date( "Y-m-d", $_TIME );
$db->query("DELETE FROM " . PREFIX . "_views_daily WHERE `date` < '{$views_day}' - INTERVAL 14 DAY");
die("done");
#****** Daily View *** by MSW ******#
5. Поставить на крон запрос раз в день:
/cron.php?cronmode=daily_views
или
php -f cron.php daily_views
Готово!
Теперь можно использовать стандартный тег {custom} с дополнительными параметрами:
days_views=ХХХ - выведет новости по просмотрам за день смещённый на указанное число от текущей даты, напрмиер 0 - только текущий день, 1 - только за вчера, 2 только за позавчера и т.д.
days_views=15 - за прошедшую неделю
days_views=16 - за текущую неделю
Модификация от DarkLane:
• Кодировка: utf-8
• Автор: MSW
Примечание от Oxigen: Добавлена модификация от DarkLane
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.
Комментариев 1