不使用插件,不改动数据库结构,利用typecho自定义字段实现文章浏览次数统计。
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));?>
输出统计次数。
应用到主题后,发现刷新会重复统计浏览次数,所以,又稍加改动,通过记录Cookies浏览过的文章,下次访问就不再统计了。
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);
}
至此,Typecho免插件使用自定义字段完美实现文章浏览次数统计。
评论(0)