Typecho 发布一篇文章,然后只勾选子分类,然后发布,父分类输出分类的文章数量,并没有包含这个新发布的文章。
那么如果我们希望调用父分类时获取显示的所有子分类和父分类下文章的总数怎么实现呢?直接上代码,在主题目录下的 functions.php 文件新增如下函数:
function cateNum($id){
$db = Typecho_Db::get();
$po=$db->select('table.metas.count')->from ('table.metas')->where ('parent = ?', $id)->orWhere('mid = ? ', $id);
$pom = $db->fetchAll($po);
$num = count($pom);
$shu = 0;
for ($x=0; $x<$num; $x++) {
$shu=$pom[$x]['count']+$shu;
}
echo $shu;
}
前台调用,可以在分类列表循环中输入下面代码,分类mid需要根据自己的代码自填
<?php cateNum(分类mid); ?>
讲一下原理,首先上一张数据库截图如下:
parent等于0的分类就是父分类,为x(x代表非零整数)的为mid等于x的分类的子分类,count列则是分类的文章总数量。知道原理后这样我们就可以根据规律进行查询计算了,例如:我们要查询mid=1的分类文章数量包含当前分类及旗下的子分类?
处理:搜索查询parent等于1的行和mid等于1的行,然后读取每行count的值,最后通过for循环将搜索到的行的count值想加,输出。
上面方法可能不太文雅,用数据库语句将查询结果列相加比较好,但是博主不会,只好用for循环啦。
以上文章转摘自:typecho统计当前分类和子分类文章总数