Typecho 是国人开发的一款轻量的 Blog 系统,非常的受技术党的欢迎,我自己也用 Typecho 搭建了一个自认为不错的基于 Typecho 的 Blog。
在 Typecho 中,很多功能可以用过插件实现,不过有些功能依赖插件总会导致 Blog 逐渐臃肿,所以简单的改改代码是不错的选择,比如实现文章阅读次数统计的功能。

方案说明

目前代码有两种类型,分为不包含 cookie 验证和包含 cookie 验证的两段。

不包含 cookie 验证

一般修改这种代码,我们选择修改 Typecho 的主题文件中的 function.php 文件,而实现这一功能,我们需要在 function.php 文件中加入下面这段代码:

//get_post_view($this)
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) ?>

注:
本文代码来自Typecho 爱好者博客四六笔记修改发布。

文章目录