dede5.7如何统计当前栏目及下级内容数?

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

这个函数非常强大,它可以通过指定一个栏目ID和是否包含子栏目的参数,来精确地获取文章总数。

dede5.7 统计当前栏目和下级
(图片来源网络,侵删)

下面我将为你提供几种常见的场景和对应的代码实现。

核心函数:GetTotalArc()

function GetTotalArc($typeid, $isunit = 0)
  • $typeid: 栏目ID,这是必需参数。
  • $isunit: 是否包含子栏目。
    • 0 (默认值): 不包含子栏目,只统计当前栏目ID下的文章数。
    • 1: 包含所有子栏目,统计当前栏目ID及其所有下级栏目下的文章总数。

在当前栏目页(list_article.htm)中统计

这是最常见的需求,在列表页的页眉或页脚显示“本栏目共 X 篇文章,含子栏目共 Y 篇”。

假设你的列表页模板是 list_article.htm

方法1:直接在模板中调用(最简单)

list_article.htm 模板文件中,直接使用以下代码:

dede5.7 统计当前栏目和下级
(图片来源网络,侵删)
<!-- 统计当前栏目(不含子栏目)的文章数 -->
当前栏目 <strong>{dede:field name='typename'/}</strong> 共有 <strong>{dede:field name='total'/}</strong> 篇文章。
<!-- 统计当前栏目(含所有子栏目)的文章数 -->
包含所有子栏目,共有 <strong><?php echo GetTotalArc($GLOBALS['typeid'], 1); ?></strong> 篇文章。

代码解释:

  • {dede:field name='typename'/}: 输出当前栏目的名称。
  • {dede:field name='total'/}: 这是DedeCMS列表页自带的变量,它默认只统计当前栏目(不含子栏目)的文章数,效果和 GetTotalArc($GLOBALS['typeid'], 0) 一样。
  • $GLOBALS['typeid']: 这是PHP的全局变量,在列表页中它存储了当前栏目的ID,我们通过它来获取ID,然后传递给 GetTotalArc() 函数。
  • <?php echo ... ?>: 这是在DedeCMS模板中嵌入PHP代码的标准方式。

方法2:在PHP文件中处理(更灵活)

如果你想更复杂地处理这个数据,或者想在非列表页使用,可以在PHP文件中进行计算,在 include/typelink.class.php 或者自定义的标签文件中。

但通常情况下,直接在模板中调用就足够了。


在首页(index.htm)或其他页面中统计

如果你想在首页的某个位置,网站栏目导航”旁边,显示每个栏目及其子栏目的文章数,你需要使用自定义循环标签。

dede5.7 统计当前栏目和下级
(图片来源网络,侵删)

示例:在首页显示一级栏目及其子栏目的文章数

index.htm 模板中,使用 {dede:channel} 循环标签,并结合PHP代码。

{dede:channel type='top' row='8'}
    <li>
        <a href="[field:typelink/]">[field:typename/]</a>
        <!-- 统计当前一级栏目(不含子栏目)的文章数 -->
        (不含子栏目: <?php echo GetTotalArc($typeid, 0); ?>)
        <!-- 统计当前一级栏目(含所有子栏目)的文章数 -->
        (含子栏目: <?php echo GetTotalArc($typeid, 1); ?>)
    </li>
{/dede:channel}

代码解释:

  • {dede:channel type='top' row='8'}: 这是一个循环标签,用于获取顶级(一级)栏目。
    • type='top': 指定只获取顶级栏目。
    • row='8': 指定获取8个栏目。
  • [field:typelink/]: 输出栏目的链接地址。
  • [field:typename/]: 输出栏目的名称。
  • $typeid: 在 {dede:channel} 循环的上下文中,$typeid 变量会自动循环赋值为每个栏目的ID,所以可以直接在PHP代码中使用。

页(article_article.htm)中统计

页,你可能想显示这篇文章所属的栏目及其上级栏目的文章数。

article_article.htm 模板中:

<!-- 显示当前文章所属栏目的文章数(不含子栏目) -->
本文所属栏目 <strong>{dede:field name='typename'/}</strong> 共有 <strong>{dede:field name='total'/}</strong> 篇文章。
<!-- 显示当前文章所属栏目的文章数(含子栏目) -->
包含子栏目共有 <strong><?php echo GetTotalArc($GLOBALS['typeid'], 1); ?></strong> 篇文章。

代码解释: 页,$GLOBALS['typeid'] 同样指向当前文章所属栏目的ID,所以用法和列表页完全一样。


总结与注意事项

  1. 首选 GetTotalArc(): 这个函数是DedeCMS官方提供的,专门用于此目的,稳定且高效。
  2. 理解 $typeid 的来源:
    • 列表页内容页,使用 $GLOBALS['typeid'] 来获取当前栏目的ID。
    • {dede:channel} 等循环标签内部,直接使用 $typeid 即可,它会自动循环。
  3. 模板中的PHP代码: 记住在模板中写PHP代码时,要用 <?php ... ?> 包裹起来。
  4. 性能考虑: GetTotalArc() 函数每次调用都会执行一次SQL查询来计算总数,如果你的网站栏目非常多,并且在首页一次性显示所有栏目的文章数,可能会对数据库造成一定压力,但对于中小型网站,这种影响微乎其微,无需担心。

通过以上方法,你就可以灵活地在 DedeCMS 5.7 的任何页面中统计当前栏目和下级栏目的文章数量了。

-- 展开阅读全文 --
头像
continue和break有何本质区别?
« 上一篇 前天
C语言中continue和break有何区别?
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

目录[+]