文章目录:
看过前面教程的同学都知道,一般主题对于阅读计数也是基于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最后,原则就是
这个是根据cookie来统计的吗,还是刷新一下就+1
cookie实现的
Guest源有点东西,可以分享一下吗
教程不完整
插件启用即可
修复阅读次数这个不完整
这个是跟主题相关的