TYPECHO WIKI
每一个作品都值得被记录

Typecho 文章浏览数显示Js版支持全静态调用

Typecho维基君Typecho教程 • 897次浏览 • 发布 2021-11-03 • 更新 2021-11-03

一般主题对于阅读计数也是基于php cookie 实现的,然后全局缓存之后,执行不到那一步,所以这里还是通过js调用的方法来实现js版本的阅读计数。

[line]正文[/line]
首先,搜一下你的主题里 themeInit 函数在哪里,一般在functions.php里,joe主题的在core.php里。找到这个函数后,在函数里最后面加一段:

if ($archive->request->isPost()){    
    if ($archive->request->postview){        
        addPostView($archive,$archive->request->postview);        
        exit;    
    }
}

在themeInit函数外面新增加一个函数:

/* js版本阅读统计 */
function addPostView($obj,$post_id){
    $db = Typecho_Db::get();
    if (!$post_id) $obj->response->throwJson([
            'code'=> 0,
            'msg' => '缺少参数',
    ]);
    $cid = intval($post_id);
    $exist = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid))['views'];
    $cookie = Typecho_Cookie::get('contents_views');
    $cookie = $cookie ? explode(',', $cookie) : array();
    if (!in_array($cid, $cookie)) {
        $db->query($db->update('table.contents')
            ->rows(array('views' => (int)$exist + 1))
            ->where('cid = ?', $cid));
        $exist = (int)$exist + 1;
        array_push($cookie, $cid);
        $cookie = implode(',', $cookie);
        Typecho_Cookie::set('contents_views', $cookie);
    }
    $obj->response->throwJson([
        'code'=> 1,
        'msg' => '获取成功',
        'data' => number_format($exist)
    ]);
}

这样第一步的接口就写完了。

第二步,在post.php里加上:

<script>PCID=<?php $this->is('post')?_e($this->cid):_e('');?></script>

第三步,在footer.php,joe主题可以加在config.php最后,原则就是标签前面。

<?php try{$tpOptions = Helper::options()->plugin('TpCache');}catch (Typecho_Plugin_Exception $e){$tpOptions=NULL;};if ($tpOptions->enable_gcache =='1'){?>
    <script>function addPostView(){if (typeof PCID != 'undefined' && PCID) $.post('/',{postview:PCID},function (res) {PCID=''})}$(function(){addPostView()})</script>
<?php } ?>

当然启用了 pjax 的小伙伴记得,pjax加回调函数addPostView()
然后清空缓存刷新生效。
当然,启用了全局缓存,阅读数不会马上刷新,一般会等到缓存失效之后刷新,但计数是不影响的。

广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,Typecho.Wiki所有文章均包含本声明。
厂商投放

【腾讯云】🎉五一云上盛惠!云服务器99元/月续费同价!

腾讯云五一劳动节海量产品 · 轻松上云!云服务器首年1.8折起,买1年送3个月!超值优惠,性能稳定,让您的云端之旅更加畅享。快来腾讯云选购吧!

广告
添加新评论 »