dede列表页如何调用点击次数?

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

核心原理

DedeCMS 的点击次数存储在两个地方:

dede列表页调用点击次数
(图片来源网络,侵删)
  1. 主表 (#@__archives): 这是文章的主数据表,有一个字段 click 专门用来存储点击次数。
  2. 附加表 (#@__addonarticle): 这是文章的附加表,通常用于存储文章内容、来源、作者等信息,默认情况下,点击次数也在这里存储,字段名也是 click

关键点:你的模板调用哪个表的字段,取决于你在后台“系统” -> “系统基本参数” -> “核心设置”中,如何配置“文章点击调用”:

  • 选项 A (推荐): makehtml(click) - 只在生成 HTML 页面时更新点击数,这是最常用、性能最好的方式。
  • 选项 B: onclick - 每次页面被访问时都更新点击数,这种方式会频繁更新数据库,对网站性能有轻微影响,且容易受到刷点击的攻击。

强烈建议:为了网站性能和稳定性,请确保你在后台选择了 makehtml(click)


使用 GetOneArctype 标签(推荐,兼容性强)

这是最经典、最稳定的方法,适用于所有 DedeCMS 版本,它通过栏目ID来获取栏目的特定字段,其中就包括 click

代码示例:

dede列表页调用点击次数
(图片来源网络,侵删)
{dede:channel type='self' typeid=''}
    <a href="[field:typelink/]">[field:typename/]</a> (点击: [field:click/])
{/dede:channel}

代码解释:

  • {dede:channel type='self' typeid=''}: 这是一个栏目列表标签。
    • type='self': 表示只调用当前栏目本身,而不是它的子栏目。
    • typeid='': 留空,系统会自动获取当前栏目的ID。
  • [field:typelink/]: 调用栏目的链接地址。
  • [field:typename/]: 调用栏目的名称。
  • [field:click/]: 核心代码,调用当前栏目的点击次数。

注意:这个方法调用的是栏目的点击次数,而不是列表页中每一篇文章的点击次数,如果你想在列表页的每篇文章后面都显示其点击次数,请使用下面的方法。


在列表循环中调用文章点击次数(最常用)

这是在列表页模板中,为每一篇文章显示其点击次数的标准方法。

代码示例:

dede列表页调用点击次数
(图片来源网络,侵删)

假设你的列表页模板文件是 list_article.htm,你需要修改列表文章的循环部分。

{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>点击: [field:click/]</span>
        <span>日期: [field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:list}

代码解释:

  • {dede:list ...}: 这是文章列表循环标签。
  • [field:arcurl/]: 文章的链接地址。
  • [field:title/]: 文章的标题。
  • [field:click/]: 核心代码,直接在列表循环中调用当前文章的点击次数。

为什么这个方法有效? 因为 {dede:list} 标签在循环时,会为每一篇文章生成一个记录集,[field:click/] 就是获取当前这条记录(也就是这篇文章)的 click 字段的值。


使用SQL直接查询(灵活但需谨慎)

如果你需要更复杂的逻辑,或者默认的字段调用不满足需求,可以直接使用SQL查询。

代码示例:

{dede:sql sql='SELECT click FROM `#@__archives` WHERE id = ~id~'}
    当前文章点击次数: [field:click/]
{/dede:sql}

代码解释:

  • {dede:sql ...}: DedeCMS的自定义SQL查询标签。
  • SELECT click FROM#@__archivesWHERE id = ~id~:
    • SELECT click: 从主表中选择 click 字段。
    • FROM#@archives` 从文章主表中查询(如果你的点击数在附加表,就换成#@addonarticle`)。
    • WHERE id = ~id~: ~id~ 是一个特殊变量,代表当前文章的ID,这个查询会只获取当前文章的点击数。
  • [field:click/]: 输出查询结果。

⚠️ 重要警告: 直接使用SQL有风险,请确保:

  1. 你的点击数确实存储在 #@__archives 表中(通过后台设置确认)。
  2. 如果你的点击数在附加表 #@__addonarticle,你需要同时指定 aid 字段来关联,并且SQL会更复杂一些。
  3. 避免在循环中执行复杂查询,以免影响性能。

对于附加表的情况,SQL可以这样写(需要开启字段调用功能):

确保在后台“系统”->“系统基本参数”->“其他选项”中,勾选了“使用多余的字段描述”。

然后在模板中:

{dede:list}
    <a href="[field:arcurl/]">[field:title/]</a>
    <!-- 假设附加表字段为click,且已开启调用 -->
    <span>点击: [field:click/]</span>
{/dede:list}

方法二在大多数情况下已经足够,因为 {dede:list} 标签会自动处理主表和附加表的字段合并。


总结与最佳实践

方法 适用场景 优点 缺点 推荐度
方法一 (GetOneArctype) 调用栏目的点击次数 简单、稳定 不能用于调用文章的点击次数 ★★★☆☆
方法二 ({dede:list}循环) 在列表页调用每篇文章的点击次数 最标准、最常用、性能最好 无明显缺点 ★★★★★
方法三 (SQL查询) 需要自定义或特殊逻辑时 灵活强大 有一定风险,可能影响性能,需要懂SQL ★★☆☆☆

最终推荐:

对于99%的在列表页调用文章点击次数的需求,直接使用 方法二 是最简单、最可靠、性能最好的选择。

{dede:list pagesize='20'}
    <h2><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h2>
    <p class="info">
        发布时间:[field:pubdate function="MyDate('Y-m-d',@me)"/] &nbsp;&nbsp;
        点击次数:<span class="click">[field:click/]</span> &nbsp;&nbsp;
        来源:[field:source/] &nbsp;&nbsp;
        作者:[field:writer/]
    </p>
    <div class="summary">
        [field:description function='cn_substr(@me,120)'/]...
    </div>
{/dede:list}

最后再强调一遍:请务必检查后台的“文章点击调用”设置,并选择 makehtml(click),这对于网站长期稳定运行至关重要。

-- 展开阅读全文 --
头像
C语言identifier命名规则有哪些?
« 上一篇 今天
织梦CMS在Linux环境如何部署与配置?
下一篇 » 今天

相关文章

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

目录[+]