dede如何调用并显示下载次数?

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

使用自定义SQL标签(最推荐、最灵活)

这是最常用且最推荐的方法,因为它不涉及修改核心文件,升级网站时不会丢失修改,并且非常灵活。

dede调用下载次数
(图片来源网络,侵删)

步骤 1:确保数据表有下载次数字段

默认情况下,dede_downloads(或你自定义的下载表)可能没有记录下载次数的字段,你需要先添加一个。

  1. 登录你的网站数据库管理工具(如phpMyAdmin)。
  2. 找到你的DedeCMS数据库。
  3. 找到下载表,通常是 dede_downloads(前缀dede_可能不同,请根据你的实际情况修改)。
  4. 为该表添加一个新字段,用于存储下载次数,字段名设为 downloadcount,类型为 int(10),并勾选“无符号”和“不为空”,默认值设为 0
ALTER TABLE `dede_downloads` ADD `downloadcount` INT(10) UNSIGNED NOT NULL DEFAULT '0';

步骤 2:在下载链接处增加下载次数

当你点击下载链接时,需要将downloadcount字段的值加1,这通常在 download.php 文件中实现。

  1. 打开 /plus/download.php 文件。
  2. 找到处理下载逻辑的代码段,通常在文件末尾或一个 if 条件判断中。
  3. 在执行下载操作(如 header("Location: $linkurl");)之前,添加以下SQL更新语句。

找到类似这样的代码:

// ... 其他代码 ...
// 更新点击数
$dsql->ExecuteNoneQuery("UPDATE `dede_downloads` SET click=click+1 WHERE id='$id'");
// 跳转到下载地址
header("Location: $linkurl");
exit();

在其基础上,增加更新downloadcount的代码:

dede调用下载次数
(图片来源网络,侵删)
// ... 其他代码 ...
// 更新点击数
$dsql->ExecuteNoneQuery("UPDATE `dede_downloads` SET click=click+1, downloadcount=downloadcount+1 WHERE id='$id'");
// 跳转到下载地址
header("Location: $linkurl");
exit();

注意:如果你的下载表不是 dede_downloads,或者主键字段不是 id,请相应修改SQL语句。

步骤 3:在模板中调用下载次数

你可以在任意模板文件中使用自定义SQL标签来调用并显示下载次数。

假设你的下载列表使用的是 {dede:arclist} 标签,并且它的底层模板是 list_downloads.htm

list_downloads.htm 模板文件中,找到显示下载链接的地方,修改如下:

dede调用下载次数
(图片来源网络,侵删)

原始代码可能长这样:

<a href="[field:link/]" target="_blank">点击下载</a>

修改为,加入下载次数显示:

<a href="[field:link/]" target="_blank">点击下载</a> (下载次数: <span class="download-count">[field:id function="GetDownloadCount(@me)"/]</span>)

这里的 [field:id function="GetDownloadCount(@me)"/] 是关键,它调用了自定义的函数 GetDownloadCount,并把当前文章的 id 传递进去。

步骤 4:在 /include/extend.func.php 中添加自定义函数

这个文件是专门用来存放自定义函数的,修改它不会影响核心文件。

打开 /include/extend.func.php 文件,在文件末尾添加以下PHP函数:

/**
 * 获取指定下载ID的下载次数
 * @param int $id 下载资源的ID
 * @return int 下载次数
 */
function GetDownloadCount($id)
{
    global $dsql;
    $row = $dsql->GetOne("SELECT downloadcount FROM dede_downloads WHERE id = '{$id}'");
    // 如果查询到结果,返回downloadcount,否则返回0
    return isset($row['downloadcount']) ? $row['downloadcount'] : 0;
}

注意:同样,请确保SQL表名 dede_downloads 和字段名 downloadcount 与你数据库中的实际名称一致。

完成以上步骤后,刷新你的下载列表页面,就能看到每个下载项旁边都显示了它的下载次数。


使用 channel 标签的底层字段(适用于特定场景)

如果你的下载频道是作为一个独立栏目(频道模型)建立的,你可以尝试使用 {dede:channel} 标签的底层字段。

在下载频道的列表模板(通常是 list_article.htm 或你自定义的模板)中,可以尝试这样调用:

{dede:channel type='self'}
    <a href="[field:typelink/]">[field:typename/]</a>
    下载次数: [field:click/]
{/dede:channel}

说明:

  • 这个方法利用了DedeCMS自带的 click 字段,它通常记录的是点击次数,不一定是“下载”次数。
  • 这种方法非常局限,它只能显示频道的点击次数,而不是每个下载文件的下载次数。
  • 如果你的下载模型是“普通文章”类型,这个方法基本无效。

方法一是解决此问题的通用且正确的方案。


总结与建议

方法 优点 缺点 推荐度
自定义SQL标签 灵活、强大、可扩展性好,不修改核心文件,升级无忧。 需要手动修改数据库和PHP文件,对新手有一定门槛。 ★★★★★ (最推荐)
channel标签 简单,无需额外代码。 功能极其有限,通常无法获取单个文件的下载次数,不准确。 ★☆☆☆☆ (不推荐)

最终建议:

强烈建议您使用 方法一,虽然初期需要做一些设置,但它为你提供了最准确、最灵活的解决方案,并且是DedeCMS二次开发的最佳实践,一旦设置完成,你就可以在网站的任何地方轻松调用下载次数,甚至可以将其用于排序(按下载次数排序”)。

-- 展开阅读全文 --
头像
织梦发布文章为何不同步?
« 上一篇 今天
织梦CMS换服务器,数据如何无缝迁移?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]