Typecho免插件实现文章浏览次数统计(Cookie Enabled) - 爱萝莉的Ryan

Ryan

Typecho免插件实现文章浏览次数统计(Cookie Enabled)
最近在打造新主题,想给主题增加统计功能,为了不使用Views插件,撸了下面的代码,使用自定义字段保存数据,不会改动...
扫描右侧二维码阅读全文
04
2017/09

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

最近在打造新主题,想给主题增加统计功能,为了不使用Views插件,撸了下面的代码,使用自定义字段保存数据,不会改动数据库结构

/*
 * 获取浏览次数
 */
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);
}

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

搬瓦工年付$187机房套餐补货了,电信联通优化,512M内存/500G流量/1G带宽,建站稳定,优惠码:BWH1ZBPVK,【点击购买】!
搬瓦工年付$28CN2高速线路,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快,建站稳定,优惠码同上,【点击购买】!
Last modification:September 4th, 2017 at 12:51 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

13 comments

  1. francis

    感谢博主,已应用

  2. Rowingbohe

    已应用在Weibo主题里~index.php和functions.php里面都写了出处~|´・ω・)ノ

  3. ppx

    楼主,
    这段代码放哪?

  4. 阿呆

    请问博主,如何在网站底部加上页面加载时间?

    1. Ryan
      @阿呆

      插件 MyTypechoTheme

  5. 晓波

    谢谢楼主,已经用上啦~· :roll: :roll: :roll: :roll:

  6. 晓波

    不对啊,为啥你这个文章到现在只有2个VIews??

    1. Ryan
      @晓波

      这个主题不是这么统计的,通过缓存保存数据,而且有页面缓存,不发新文章不会刷新的

      1. 晓波
        @Ryan

        你们都用的啥缓存插件,缓存以后评论会被缓存给下个用户么。不会开发搞cho很迷茫啊,wp太慢了。而且自己还喜欢受虐,折腾。

      2. 晓波
        @Ryan

        好吧

  7. ClayMore

    转载到官方论坛

  8. 烟花易冷

    挺不错的,表示支持

    1. Ryan
      @烟花易冷

      谢谢支持