为 Typecho 博客添加文章阅读量统计
在文章标题底下的 Metadata 栏中给 Typecho 博客添加一个文章阅读量统计。
文章阅读量统计
把以下代码添加到对应模块,我用的 Memoo 基于 Typecho 默认主题微调优化,目录比较简单,就在 functions.php
文件中添加:
/**
* 获取阅读量
* @param $archive
* @return void
*/
function getPostviews($archive)
{
$db = Typecho_Db::get();
$cid = $archive->cid;
if (!array_key_exists("views", $db->fetchRow($db->select()->from("table.contents")))) {
$db->query("ALTER TABLE `" . $db->getPrefix() . "contents` ADD `views` INT(10) DEFAULT 0;");
}
$exist = $db->fetchRow(
$db
->select("views")
->from("table.contents")
->where("cid = ?", $cid)
)["views"];
if ($archive->is("single")) {
$cookie = Typecho_Cookie::get("contents_views");
$cookie = $cookie ? explode(",", $cookie) : [];
if (!in_array($cid, $cookie)) {
$db->query(
$db
->update("table.contents")
->rows(["views" => (int) $exist + 1])
->where("cid = ?", $cid)
);
$exist = (int) $exist + 1;
array_push($cookie, $cid);
$cookie = implode(",", $cookie);
Typecho_Cookie::set("contents_views", $cookie);
}
}
// echo $exist == 0 ? " 暂无浏览" : "" . $exist . " 人浏览";
echo $exist == 0 ? "0 view" : ($exist == 1 ? $exist . " view" : $exist . " views");
}
AI 帮忙解释一下:
这是一个 PHP 函数,用于获取和更新文章的阅读量。函数名为
getPostviews
,接收一个参数$archive
,表示文章的存档信息。
- 首先,通过
Typecho_Db::get()
获取数据库连接实例。- 然后,从
$archive
对象中获取文章的唯一标识符cid
。- 检查数据库的
contents
表中是否存在views
字段,如果不存在,则通过ALTER TABLE
语句添加一个名为views
的整型字段,默认值为0。- 使用
SELECT
查询从contents
表中获取当前文章的阅读量views
。如果文章是单篇文章 (
$archive->is("single")
为真),则:
- 从 cookie 中获取已记录的阅读文章 ID 列表。
如果当前文章 ID 不在 cookie 列表中,则表示用户尚未阅读过此文章:
- 更新数据库中该文章的阅读量,将其加 1。
- 将文章 ID 添加到 cookie 列表中,并更新 cookie。
- 最后,输出当前文章的阅读量。如果阅读量为 0 或者 1 时,使用单数 "view",否则使用复数 "views"。
添加到页面
添加后找到要展示的位置,如文章页面标题底下的 Metadata 栏,位置在主题中文件夹中的 post.php
文件:
<ul class="post-meta">
<li><?php echo getPostviews($this); ?></li>
</ul>
阅读统计根据英语单复数语法有调整,当没有人浏览时,显示等于 0 view
,有浏览数后 $exist == 1
时用单数 view
,大于 1
时复数用 views
。
以上。
标题:为 Typecho 博客添加文章阅读量统计
日期:2025-02-13
链接:https://logs.do/logs/add-post-views-statistics-to-typecho-blog.html
许可:© CC BY 4.0 · 转载请保留原文链接及作者
我是来看目录的,没看到哇?
可以看这篇:https://logs.do/logs/install-wordpress-on-debian-12-with-lemp.html
因为设置了如果文章没有目录,或者只有最多两个同级目录时,不显示目录,所以这一篇没有显示