typecho文章阅读次数/浏览量统计设置

发布 | 2021-03-31 | 默认分类 | 467 浏览

方案说明
目前代码有两种类型,分为不包含cookie验证和包含cookie验证的两段。
不包含cookie验证
一般修改这种代码,我们选择修改Typecho的主题文件中的function.php文件,而实现这一功能,我们需要在function.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.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')) {
 $views = Typecho_Cookie::get('extend_contents_views');
        if(empty($views)){
            $views = array();
        }else{
            $views = explode(',', $views);
        }
if(!in_array($cid,$views)){
       $db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
array_push($views, $cid);
            $views = implode(',', $views);
            Typecho_Cookie::set('extend_contents_views', $views); //记录查看cookie
        }
    }
    echo $row['views'];
}

展示同样只用把下面的代码放在你想要在Blog展示的位置即可:

<?php get_post_view($this) ?>

end!

标签
PHP,typecho

© 著作权归作者所有

本文由 Hello BTU 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。

吐槽一下吧

*选项为必填