Typecho 免插件实现文章浏览次数统计(Cookie Enabled)

09/11/201717:35:00
评论
140

最近在打造新主题,想给主题增加统计功能,为了不使用Views插件,撸了下面的代码,使用自定义字段保存数据,不会改动数据库结构,其实统计文章浏览次数还有另外一个方法,请参考另外一篇:Typecho 免插件实现文章浏览次数统计

/*
 * 获取浏览次数
 */
function getViewsStr($widget, $format = "{views} 次浏览") {
    $fields = unserialize($widget->fields);
    if (array_key_exists('views',$fields))
        $views = (!empty($fields['views'])) ? intval($fields['views']) : 0;
    else
        $views = 0;
    
    //增加浏览次数
    if ($widget->is('single')) {
        $views = $views + 1;
        $widget->setField('views', 'str', strval($views), $widget->cid);
    }
    return str_replace("{views}", $views, $format);
}

把以上代码放到functions.php最后,然后就可以在各个页面通过

<?php _e(getViewsStr($this)); /* $this 是 Widget_Archive 对象 */ ?>

输出统计次数。
应用到主题后发现不太好,每刷新一次都会重复统计浏览次数,数字大了没什么用。
所以我就通过Cookies“记住”浏览过的文章,下次再访问就部统计了,以下的代码也是放到functions.php最后

/*
 * 获取浏览次数(改进版)
 */
function getViewsStr($widget, $format = "{views} 次浏览") {
    $fields = unserialize($widget->fields);
    if (array_key_exists('views', $fields))
        $views = (!empty($fields['views'])) ? intval($fields['views']) : 0;
    else
        $views = 0;
    
    //增加浏览次数
    if ($widget->is('single')) {
        $vieweds = Typecho_Cookie::get('contents_viewed');
        if (empty($vieweds))
            $vieweds = array();
        else
            $vieweds = explode(',', $vieweds);
        if (!in_array($widget->cid, $vieweds)) {
            $views = $views + 1;
            $widget->setField('views', 'str', strval($views), $widget->cid);
            $vieweds[] = $widget->cid;
            $vieweds = implode(',', $vieweds);
            Typecho_Cookie::set("contents_viewed",$vieweds);
        }
    }
    return str_replace("{views}", $views, $format);
}

好了,完美。又省下一个插件了。

Typecho 响应式博客主题 Echo 未分类

Typecho 响应式博客主题 Echo

Echo主题简介一套基于layui框架的Typecho主题Echo,主题名取自博客域名(www.echo.so)。主题极简美观,并进行了响应式布局,使博客在手机和平板电脑上也有更好的浏览阅读体验。主题...
Typecho 漂亮的单栏主题 Aria 未分类

Typecho 漂亮的单栏主题 Aria

主题简介书写属于自己的篇章,一款简洁漂亮的单栏Typecho博客主题Aria,具体样式大家可以看底部下载部分的作者演示站,总的来说算是一个功能比较完整的主题了,最主要是作者更新的相对来说比较勤。主题预...
Typecho 简约大图封面主题 Cola 未分类

Typecho 简约大图封面主题 Cola

主题简介这是由网友@可乐投稿的作品,主题采用了大图封面的单栏设计,整体看上去比较干净,不过该主题可以优化的细节之处还有很多,比如:1.评论样式有点粗糙 2.配色有点不够统一,特别是按钮触发的部分 3....
Typecho程序伪静态规则大全 开发日志

Typecho程序伪静态规则大全

Typecho程序的伪静态规则不同于wp直接默认可用,需要我们手工加载到空间中才可以生效。这里TypechoTips整理了一些不同的主机环境中的伪静态规则,希望对大家有所帮助!1、Linux Apac...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: