在文章标题底下的 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,表示文章的存档信息。

  1. 首先,通过 Typecho_Db::get() 获取数据库连接实例。
  2. 然后,从 $archive 对象中获取文章的唯一标识符 cid
  3. 检查数据库的 contents 表中是否存在 views 字段,如果不存在,则通过 ALTER TABLE 语句添加一个名为 views 的整型字段,默认值为0。
  4. 使用 SELECT 查询从 contents 表中获取当前文章的阅读量 views
  5. 如果文章是单篇文章 ($archive->is("single") 为真),则:

    • 从 cookie 中获取已记录的阅读文章 ID 列表。
    • 如果当前文章 ID 不在 cookie 列表中,则表示用户尚未阅读过此文章:

      • 更新数据库中该文章的阅读量,将其加 1。
      • 将文章 ID 添加到 cookie 列表中,并更新 cookie。
  6. 最后,输出当前文章的阅读量。如果阅读量为 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 · 转载请保留原文链接及作者

标签: typecho

添加新评论

已有 2 条评论

  1. 我是来看目录的,没看到哇?

    1. z z

      可以看这篇:https://logs.do/logs/install-wordpress-on-debian-12-with-lemp.html

      因为设置了如果文章没有目录,或者只有最多两个同级目录时,不显示目录,所以这一篇没有显示