dede如何精确控制调用文章的篇数?

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

使用DedeCMS自带的 GetArcList 标签(最推荐、最灵活)

这是最标准、最灵活的方法,它通过执行一个SQL查询来获取结果,不会像 {dede:arclist} 那样加载完整的文章数据,因此效率很高。

dede调用文章的篇数
(图片来源网络,侵删)

场景1:调用当前栏目的文章总数

这种方法可以直接在当前栏目页的模板文件中使用,无需任何额外设置。

代码示例:

{dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid=~id~"}
    本栏目共有 <strong>[field:nums/]</strong> 篇文章
{/dede:sql}

代码解析:

  • {dede:sql ...}:DedeCMS的执行SQL标签。
  • sql="SELECT COUNT(*) AS nums FROM ...":这是标准的SQL查询语句。
    • COUNT(*):统计所有符合条件的记录数。
    • AS nums:将统计结果命名为 nums,方便后面调用。
    • FROM dede_archives:文章数据表,如果你的表前缀不是 dede_,请修改成你自己的。
    • WHERE typeid=~id~:这是关键。~id~ 是DedeCMS的一个特殊变量,会自动替换为当前栏目ID,这样就实现了只统计当前栏目下的文章。
  • [field:nums/]:用来输出上面查询结果中名为 nums 的字段值。

使用示例: 你可以把它放在栏目页的列表上方或下方,

dede调用文章的篇数
(图片来源网络,侵删)
<h2>栏目名称:{dede:field.typename/}</h2>
<p>{dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid=~id~"}共有 <strong>[field:nums/]</strong> 篇文章{/dede:sql}</p>
<ul>
    {dede:arclist titlelen='42' row='10'}
        <li><a href="[field:arcurl/]">[field:title/]</a></li>
    {/dede:arclist}
</ul>

场景2:调用指定栏目的文章总数

如果你想在一个页面(比如首页)中显示任意指定栏目的文章数,只需要在SQL语句中写死栏目ID即可。

代码示例:

假设你想获取栏目ID为 5 的文章总数。

{dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid=5"}
    指定栏目共有 <strong>[field:nums/]</strong> 篇文章
{/dede:sql}

代码解析:

dede调用文章的篇数
(图片来源网络,侵删)
  • 与上面唯一的区别就是 WHERE typeid=~id~ 变成了 WHERE typeid=5,这里的 5 就是你想要统计的栏目ID。

进阶用法:获取顶级栏目或子栏目的文章数

  • 获取顶级栏目文章数WHERE typeid=5 AND topid=0 (假设5是顶级栏目ID)
  • 获取某个顶级栏目下所有子栏目的文章总数(包括子栏目自己的文章)
    {dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE topid=5"}
        该顶级栏目及其子栏目共有 <strong>[field:nums/]</strong> 篇文章
    {/dede:sql}

使用 arclist 标签的 itemnum 属性(简单但效率较低)

这种方法比较取巧,它利用 arclist 标签的 itemnum 属性来获取文章总数,但会先加载文章数据。

代码示例:

{dede:arclist itemnum='0'}
    {/dede:arclist}

你需要在PHP代码中获取这个标签返回的文章数量。这种方法不推荐在模板中直接使用,因为它效率不高,且需要额外的PHP处理。

更规范的写法是配合PHP代码,但这通常需要修改模板文件,不如方法一灵活。


使用自定义函数(适用于全站多处调用)

如果你的网站在很多地方都需要显示文章数,并且希望代码更简洁,可以考虑创建一个自定义函数。

步骤:

  1. 打开文件:找到并打开 /include/common.func.php 文件。

  2. 添加函数:在文件末尾的 ?> 之前,添加以下PHP函数:

    /**
     * 获取指定栏目的文章总数
     * @param int $typeid 栏目ID
     * @return int 文章数量
     */
    function GetArticleNum($typeid = 0) {
        global $dsql;
        $typeid = intval($typeid);
        if($typeid == 0) return 0;
        $query = "SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid = {$typeid}";
        $row = $dsql->GetOne($query);
        return $row['nums'];
    }
  3. 在模板中调用:现在你可以在任何模板文件中使用这个函数了。

    调用当前栏目:

    本栏目共有 <strong><?=GetArticleNum($typeid)?></strong> 篇文章

    注意:在DedeCMS模板中,$typeid 变量可以直接获取当前栏目ID。

    调用指定栏目(ID为10):

    指定栏目共有 <strong><?=GetArticleNum(10)?></strong> 篇文章

优点:

  • 代码复用性强,调用非常方便。
  • 逻辑与视图分离,更符合开发规范。

缺点:

  • 需要修改核心函数文件,如果升级DedeCMS可能会被覆盖。

总结与推荐

方法 优点 缺点 适用场景
GetArcList 灵活、高效、无需修改文件,是DedeCMS官方推荐方式。 语法相对固定。 绝大多数情况下的首选,特别是调用当前栏目或指定栏目。
arclist 语法简单。 效率低,会加载冗余数据,不推荐。 不推荐使用。
自定义函数 代码复用性好,调用简洁。 需要修改核心文件,有升级风险。 网站中大量、多处需要调用文章数时,为了代码整洁使用。

对于绝大多数用户,强烈推荐使用第一种方法({dede:sql},因为它最安全、最高效,且完全满足需求。

-- 展开阅读全文 --
头像
dede批量移动副栏目
« 上一篇 前天
物流企业网站织梦模板好用吗?
下一篇 » 前天

相关文章

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

目录[+]