最近在打造新主题,想给主题增加统计功能,为了不使用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);
}
好了,完美。又省下一个插件了。
Thanks! ::aru:pouting::
感谢博主,已应用
已应用在Weibo主题里~index.php和functions.php里面都写了出处~|´・ω・)ノ
楼主,<?php _e(getViewsStr($this)); /* $this 是 Widget_Archive 对象 */ ?>
这段代码放哪?
请问博主,如何在网站底部加上页面加载时间?
插件 MyTypechoTheme
谢谢楼主,已经用上啦~·
不对啊,为啥你这个文章到现在只有2个VIews??
这个主题不是这么统计的,通过缓存保存数据,而且有页面缓存,不发新文章不会刷新的
你们都用的啥缓存插件,缓存以后评论会被缓存给下个用户么。不会开发搞cho很迷茫啊,wp太慢了。而且自己还喜欢受虐,折腾。
好吧
转载到官方论坛
挺不错的,表示支持
谢谢支持