dede如何调用当前栏目的文章数量?

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

使用 GetArcList 标签(最推荐,最灵活)

这是最常用也是最灵活的方法,它通过一个临时的 SQL 查询来获取当前栏目的文章数,不会像 arclist 那样加载完整的文章数据,因此性能较好。

dede 调用当前栏目文章数量
(图片来源网络,侵删)

适用场景:在栏目页、列表页、内容页等任何需要显示当前栏目文章数量的地方。

代码示例

{dede:arclist titlelen='50' row='0'}
    <!-- 这个 arclist 标签只用来获取当前栏目ID,row='0' 表示不输出任何文章内容 -->
{/dede:arclist}
当前栏目下的文章数量为:[field:total /] 篇

代码解析

  1. {dede:arclist ...}:我们使用 arclist 标签,但主要目的不是为了调用文章列表。
  2. typeid='[field:id/]:这是关键,我们通过 [field:id/] 获取当前栏目的 ID,并将其作为 typeid 参数传递给 arclist 标签,这样,arclist 就只会查询当前栏目下的文章。
    • 注意:这个 [field:id/] 标签必须在 arclist 标签的内部使用,才能正确获取到 arclist 所在环境的栏目ID,如果你直接在模板里写 [field:id/],它获取的是当前页面的栏目ID,这通常是可行的,但更严谨的做法是像上面那样,把它嵌套进去。
  3. row='0':设置 row 为 0,表示不输出任何文章列表,只进行后台统计,这能有效减少不必要的资源消耗。
  4. [field:total /]:这是 arclist 标签的一个特殊底层字段,它直接输出查询到的文章总数。

更简洁的写法(在栏目页或列表页)

dede 调用当前栏目文章数量
(图片来源网络,侵删)

如果你所在的页面本身就是栏目页或列表页(list_article.php),arclist 会自动识别当前栏目,所以可以省略 typeid 属性。

{dede:arclist row='0'}
    当前栏目下的文章数量为:[field:total /] 篇
{/dede:arclist}

使用 SQL 查询标签 {dede:sql}

这种方法直接执行 SQL 语句,非常直接,适合对 SQL 比较熟悉的用户。

适用场景:任何需要自定义查询的地方,可以获取更复杂的统计信息(如按时间、按状态等)。

代码示例

dede 调用当前栏目文章数量
(图片来源网络,侵删)
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` WHERE typeid = ~typeid~"}
    当前栏目下的文章数量为:[field:c /] 篇
{/dede:sql}

代码解析

  1. {dede:sql ...}:调用 SQL 查询标签。
  2. sql="...":在这里编写你的 SQL 查询语句。
    • SELECT COUNT(*) AS c:计算 dede_archives 表中的记录数,并将结果命名为 c
    • FROM dede_archives:从文章主表 dede_archives 中查询(注意:你的表前缀可能是 #@_ 而不是 dede_,请根据实际情况修改)。
    • WHERE typeid = ~typeid~:这是关键。~typeid~ 是 DedeCMS 的一个特殊变量,它会自动被替换为当前栏目的 ID。
  3. [field:c /]:输出查询结果中名为 c 的字段,也就是我们计算出的文章总数。

页调用当前栏目的文章数量

如果你在文章内容页(article_article.php),想调用这篇文章所属栏目的文章总数,方法稍有不同。

代码示例

{dede:arclist row='0' typeid='[field:typeid/]'}
    本栏目共有文章:[field:total /] 篇
{/dede:arclist}

代码解析

  1. [field:typeid/]页,这个底层标签可以获取到当前文章所属的栏目 ID。
  2. 我们把这个 ID 明确地赋值给 arclisttypeid 属性,然后使用 row='0'[field:total /] 来获取数量。

总结与推荐

方法 优点 缺点 推荐场景
GetArcList 灵活、性能好、代码相对简洁 稍微需要理解 arclist 的工作原理 绝大多数情况下的首选,特别是在栏目页和列表页。
SQL 查询 功能强大,可自定义复杂查询 代码稍显复杂,需要了解 SQL 和表结构 需要获取除总数外的其他统计信息时。

强烈推荐使用方法一 (GetArcList),因为它在易用性、性能和可读性之间取得了最好的平衡。


重要提示:DedeCMS 版本问题

  • 旧版 (DedeCMS 5.7 及以前):上述所有方法均适用。
  • 新版 (DedeCMS 5.8 及以上,特别是内核版本为 DedeCMS V57+):出于安全考虑,新版本默认对 {dede:sql} 标签进行了限制,可能无法直接使用 ~typeid~ 这样的变量,或者直接禁用了此标签。

如果你使用的是新版 DedeCMS,发现 {dede:sql} 方法不工作,可以尝试以下方法:

检查并开启 SQL 标签权限 登录后台,进入【系统】->【系统基本参数】->【安全设置】,找到“模板引擎禁用标签”,确保里面没有 sql,如果禁用了,就删除它,然后保存。

使用更安全的变量替换{dede:sql} 中,尝试使用 [field:global.autoindex/] 或直接获取栏目ID(如果页面能获取到)。

{dede:sql sql="SELECT COUNT(*) AS c FROM `#@_archives` WHERE typeid = [field:global.autoindex/]"}
    [field:c /]
{/dede:sql}

但这不一定总能成功,如果还是不行,GetArcList 方法是你在新版中最可靠的选择

-- 展开阅读全文 --
头像
dedecms 织梦cms
« 上一篇 01-03
dede5.7拼音去id怎么实现?
下一篇 » 01-03
取消
微信二维码
支付宝二维码

目录[+]