分享typecho阅读次数统计代码,并对此进行优化加入了cookie验证,重复刷新页面也只会增加一次阅读次数。
将下面这段代码加到functions.php中
/**
* 阅读统计
* 调用
*/
function get_post_view($archive)
{
$cid = $archive->cid;
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) {
$db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) DEFAULT 0;');
echo 0;
return;
}
$row = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid));
if ($archive->is('single')) {
$db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
}
echo $row['views'];
}
然后将下面这段代码加入到需要显示阅读次数的地方
<?php get_post_view($this) ?>
这样就实现了不用插件来显示文章的阅读次数统计。
怎么优化,使重复刷新不增加浏览次数呢?最简单的就是加入cookie验证,将文章的第一段代码用下面的代码替换即可:
/**
* 阅读统计
* cookie防止重复刷新版
*/
function get_post_view($archive)
{
$cid = $archive->cid;
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
if (!array_key_exists('viewsNum', $db->fetchRow($db->select()->from('table.contents')))) {
$db->query('ALTER TABLE `' . $prefix . 'contents` ADD `viewsNum` INT(10) DEFAULT 0;');
echo 0;
return;
}
$row = $db->fetchRow($db->select('viewsNum')->from('table.contents')->where('cid = ?', $cid));
if ($archive->is('single')) {
$viewsNum = Typecho_Cookie::get('extend_contents_viewsNum');
if(empty($viewsNum)){
$viewsNum = array();
}else{
$viewsNum = explode(',', $viewsNum);
}
if(!in_array($cid,$viewsNum)){
$db->query($db->update('table.contents')->rows(array('viewsNum' => (int) $row['viewsNum'] + 1))->where('cid = ?', $cid));
array_push($viewsNum, $cid);
$viewsNum = implode(',', $viewsNum);
Typecho_Cookie::set('extend_contents_viewsNum', $viewsNum); //记录查看cookie
}
}
echo $row['viewsNum'];
}
本文属原创,转载请注明原文:https://pangsuan.com/p/count_views.html
评论 (0)