方案说明
目前代码有两种类型,分为不包含cookie验证和包含cookie验证的两段。
不包含cookie验证
一般修改这种代码,我们选择修改Typecho的主题文件中的function.php文件,而实现这一功能,我们需要在function.php文件中加入下面这段代码:
function get_post_view($archive)
{
$cid = $archive->cid;
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) {
$db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) DEFAULT 0;'); echo 0;
return;
}
$row = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid));
if ($archive->is('single')) {
$db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
}
echo $row['views'];
加入上述的代码文件之后,我们再在想要显示浏览次数的位置加入下面这段代码即可:
<?php get_post_view($this) ?>
包含cookie验证
上面的统计代码只是机械的统计点击次数,如果一个人反复点击多次都会被算上,队友有些要求比较高的博主体验不会很好,所以下面给一段加了cookie验证的代码,同样是放在function.php文件就可以了:
function get_post_view($archive)
{
$cid = $archive->cid;
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) {
$db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) DEFAULT 0;');
echo 0;
return;
}
$row = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid));
if ($archive->is('single')) {
$views = Typecho_Cookie::get('extend_contents_views');
if(empty($views)){
$views = array();
}else{
$views = explode(',', $views);
}
if(!in_array($cid,$views)){
$db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
array_push($views, $cid);
$views = implode(',', $views);
Typecho_Cookie::set('extend_contents_views', $views); //记录查看cookie
}
}
echo $row['views'];
}
展示同样只用把下面的代码放在你想要在Blog展示的位置即可:
<?php get_post_view($this) ?>
end!
© 著作权归作者所有
本文由 Hello BTU 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。