dede如何统计当前栏目文章数?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 DEDE建站 正文

使用 GetOneTypeArc() 函数 (最推荐)

这是最常用且最灵活的方法,因为它不仅获取文章数,还获取了当前栏目的其他信息,方便后续扩展。

dede 统计当前栏目文章数
(图片来源网络,侵删)

适用场景: 在列表页 (list_article.htm页 (article_article.htm) 以及任何需要调用当前栏目信息的地方。

代码示例:

在需要显示文章数的地方,直接插入以下 PHP 代码:

<?php
    // 获取当前栏目ID
    $typeid = $GLOBALS['typeid'];
    // 调用函数获取栏目信息
    $typeinfo = GetOneTypeArc($typeid);
    // 输出文章数量
    // $typeinfo['ispart'] 为 1 表示是外部链接,没有文章
    if($typeinfo['ispart'] == 0) {
        echo $typeinfo['totalcount'];
    } else {
        echo "0"; // 或者显示其他提示,如 "链接"
    }
?>

代码解析:

dede 统计当前栏目文章数
(图片来源网络,侵删)
  1. $GLOBALS['typeid']:这是 DedeCMS 的一个全局变量,在列表页和内容页中,它自动保存了当前栏目的 ID。
  2. GetOneTypeArc($typeid):这是一个核心函数,用于根据栏目ID查询该栏目的详细信息,它会返回一个包含所有栏目信息的数组。
  3. $typeinfo['totalcount']:这是 GetOneTypeArc() 返回的数组中的一个键,其值就是该栏目下的文章总数(包括子栏目,如果开启了“包含子栏目”)。
  4. $typeinfo['ispart']:这是一个判断,如果当前栏目是一个外部链接(链接到其他网站或自定义页面),它的 ispart 值会是 1,这种情况下它本身没有文章,totalcount 可能为空或不准确,增加这个判断可以让代码更健壮。

使用 SQL 查询 (灵活且高效)

如果你只需要文章数,或者需要更复杂的查询条件,直接执行 SQL 语句是最高效的方式。

适用场景:GetOneTypeArc() 无法满足需求时,例如需要根据特定条件(如仅统计审核通过的文章)来计算数量。

代码示例:

<?php
    // 获取当前栏目ID
    $typeid = $GLOBALS['typeid'];
    // 查询当前栏目(及其子栏目)的文章数
    // 注意:如果你的栏目没有开启“包含子栏目”,需要去掉 AND tp.reid = '$typeid' 这部分
    $dsql->SetQuery("SELECT COUNT(*) AS count FROM `#@__archives` ar LEFT JOIN `#@__arctype` tp ON ar.typeid = tp.id WHERE tp.reid = '$typeid' OR tp.id = '$typeid'");
    $dsql->Execute();
    $row = $dsql->GetObject();
    // 输出文章数量
    echo $row->count;
?>

代码解析:

dede 统计当前栏目文章数
(图片来源网络,侵删)
  1. $dsql:这是 DedeCMS 的数据库连接对象,通过它可以执行任何 SQL 语句。
  2. SetQuery():设置要执行的 SQL 查询语句。
  3. #@__:这是 DedeCMS 的表前缀占位符,在最终执行时会替换为你后台设置的表前缀(如 dede_)。
  4. WHERE tp.reid = '$typeid' OR tp.id = '$typeid':这个条件是关键。
    • tp.id = '$typeid':统计当前栏目ID下的文章。
    • tp.reid = '$typeid':统计当前栏目ID作为父栏目的所有子栏目下的文章。
    • 两者结合,就实现了“包含子栏目”的统计效果。如果不想包含子栏目,请只保留 tp.id = '$typeid'
  5. Execute() / GetObject():执行查询并获取结果。GetObject() 将结果集的第一行作为一个对象返回,我们可以通过 ->count 来访问 count 字段的值。

修改模板文件 (针对列表页标题)

如果你想在列表页旁边直接显示文章数,并且希望它对所有列表页都生效,可以修改列表页模板文件。

适用场景: 希望在所有列表页的标题旁统一显示文章数,且不需要复杂的判断。

操作步骤:

  1. 打开你的列表页模板文件,通常是 /templets/default/list_article.htm
  2. 找到显示栏目标题的地方,代码通常是这样的:
    <h1>{dede:field name='typename'/}</h1>
  3. 将其修改为:
    <h1>
        {dede:field name='typename'/}
        <span class="article-count">([field:totalcount/])</span>
    </h1>
  4. 保存文件并上传到服务器。

代码解析:

  • {dede:field name='typename'/}:这是 DedeCMS 的模板标签,用于输出当前栏目的名称。
  • [field:totalcount/]:这是另一个模板标签,它会在列表页被解析时,自动被当前栏目的文章总数所替代,这个标签是 DedeCMS 在列表页环境内置好的,无需调用 PHP 函数即可使用。

总结与对比

方法 优点 缺点 适用场景
GetOneTypeArc() 最推荐,代码简洁,获取信息全面,兼容性好。 需要一点 PHP 基础。 绝大多数情况,尤其是在内容页、列表页或自定义页面中需要显示数量时。
SQL 查询 性能最高,灵活性最强,可以添加任何 WHERE 条件。 代码稍复杂,需要了解 SQL 语句。 需要特殊统计逻辑(如按状态、按时间筛选)时。
修改模板 简单直接,对所有列表页生效,维护方便。 仅适用于列表页,功能单一。 希望在所有列表页标题旁统一显示文章数时。

对于绝大多数用户来说,方法一 (GetOneTypeArc) 是首选,因为它既简单又强大。

-- 展开阅读全文 --
头像
typedef在C语言中到底该怎么用?
« 上一篇 昨天
dede为何不显示指定栏目内容?
下一篇 » 昨天
取消
微信二维码
支付宝二维码

目录[+]