TYPECHO WIKI
每一个作品都值得被记录

Typecho 组装数据库请求以获取任意数据

Typecho维基君Typecho教程 • 1168次浏览 • 发布 2022-04-17 • 更新 2022-04-17

前言

  • 制作 Typecho 主题时,经常用到一些没有现成获取方法的数据,需要自己组装数据库请求来获取
  • 本文借助 “获取 Typecho 站点全站文章总数” 这个例子,描述这一过程

第一步:了解 Typecho 的数据库结构

  • 参见官方文档:《Typecho数据库设计》
  • 设计很简洁,这里不赘述,官方文档年久失修,建议参考着看一下自己的数据库

    • 比如 metas 表中的 parent 字段就没有出现在官方文档中
  • 我们要统计全站文章总数,要关注的是表 contents

第二步:写一个函数

统计全站的文章总数,就是要统计 contents 表中 type = post 的记录数,代码如下

function countPosts() {
    $db = Typecho_Db::get();
    $count = $db->fetchRow(
        $db->select('COUNT(1)')->from('table.contents')->where('type = ?', 'post')
    );
    return $count['COUNT(1)'];
}

我们可以自由增加其他条件,有 SQL 基础的一看就明白了

比如只想获取已经公开发布的文章,可以增加 status 条件

$count = $db->fetchRow(
    $db->select('COUNT(1)')
       ->from('table.contents')
       ->where('type = ?', 'post')
       ->where('status = ?', 'publish')
);

Typecho 的文档比较简陋,有些字段的取值范围在文档中并没有列出,可以自行去数据库中查看

第三步:在主题中使用

  • 将上述代码添加到主题的 functions.php 文件
  • 在需要显示数量的地方,使用 <?php countPosts() ?> 调用

第四步:举一反三

  • 获取 Typecho 站点分类的数量
function countCategories() {
    $db = Typecho_Db::get();
    $count = $db->fetchRow(
        $db->select('COUNT(1)')
           ->from('table.metas')
           ->where('type = ?', 'category')
    );
    return $count['COUNT(1)'];
}
  • 获取 Typecho 站点全部一级分类的数量
function countCategories() {
    $db = Typecho_Db::get();
    $count = $db->fetchRow(
        $db->select('COUNT(1)')
           ->from('table.metas')
           ->where('type = ?', 'category')
           ->where('parent = ?', '0')
    );
    return $count['COUNT(1)'];
}
  • 获取 Typecho 站点全部评论的数量
function countComments() {
    $db = Typecho_Db::get();
    $count = $db->fetchRow(
        $db->select('COUNT(1)')
           ->from('table.comments')
           ->where('status = ?', 'approved'));
    return $count['COUNT(1)'];
}
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,Typecho.Wiki所有文章均包含本声明。
厂商投放

【腾讯云】🎉五一云上盛惠!云服务器99元/月续费同价!

腾讯云五一劳动节海量产品 · 轻松上云!云服务器首年1.8折起,买1年送3个月!超值优惠,性能稳定,让您的云端之旅更加畅享。快来腾讯云选购吧!

广告
添加新评论 »