Ryan

V2020-05-05

Typecho 免插件统计浏览次数,输出热门文章

前提

好几年前我在打造SimpX主题的时候撸了下面的浏览次数统计代码。

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

需求

这次在整poRebuild主题的时候发现原来的调用方式不太合适我这次的输出需求,改造成在themeInit函数里自动增加浏览次数,无论页面是否展示都能自动统计。当然了,还是利用自定义字段,不动数据库结构。

同时我新弄的主题还需要热门文章输出的功能,一并把代码撸了。

代码

此处内容已隐藏,回复后(需要填写邮箱)可见

最后

当然,别忘了你的主题或者插件新增了 views 字段,删掉

ALTER TABLE `typecho_contents` DROP `views`;
您的大名:
万水千山总是情,给个打赏行不行。 打赏
文章出自:虾米皮皮乐 https://xiamp.net/archives/typecho-views-hotspots.html,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
318
Typecho 免插件统计浏览次数,输出热门文章
05/05
date('Y'); ?>
前提好几年前我在打造SimpX主题的时候撸了下面的浏览次数统计代码。/* * 获取浏览次数(...
扫描右侧二维码阅读全文

发表评论

;-) :| :smile: :sad: :razz: :oops: :sup: :lol: :grin: :cry: :cool: :???:

已有 5 条评论

  1. 木灵鱼儿 Lv.1     Win 10 /    FireFox 2020-06-26 16:40

    :cry:表情太少了

  2. HelloWorld Lv.0     Win 10 /    Chrome 2020-07-05 11:43

    表情太少了:oops:

  3. 木灵鱼儿 Lv.1     Win 10 /    FireFox 2020-08-10 18:25

    再来看看啊啊啊

  4. 木灵鱼儿 Lv.1     Win 10 /    FireFox 2020-08-10 21:49

    做个笔记,统计函数里面的Stat::这个关键字需要删除,有两处,一处在函数本身内,一处在调用的那段代码里,然后获取热门文章,hotspots();这个函数支持两个参数,第一个是需要输出的文章数量,第二个不清楚,然后在while循环里面,博主漏写了变量符号,使用会报错,所有数据都要基于$widget这个变量,比如标题:$widget->title(); 链接:$widget->permalink()

    1. Ryan Lv.4     Win 10 /    FireFox 2020-08-11 06:57

      第二个参数是操作字段名,比如我想用 llcs 这个字段来存储浏览次数,调用形式就类似viewsCounter($archive, 'llcs'),views($this, 'llcs')