织梦DedecmsV5.7.117,附件保存形式(按data函数日期参数),设置无效,解决方案

在DedeCMS(织梦内容管理系统)中,附件的保存形式默认是按天进行分类,即每天生成一个文件夹来存储当天上传的所有附件,这种保存方式虽然简单直观,但随着时间的推移,文件夹数量会不断增加,给维护和管理带来不便,为了解决这个问题,DedeCMS后台提供了一个选项“附件保存形式(按data函数日期参数)”,允许用户根据需要调整保存形式为按年、按月或按日,很多用户反映即使设置了这一选项,系统仍然按照默认的按天保存形式处理附件,导致设置无效。

原因分析

1、后台设置仅影响部分功能:

DedeCMS的后台设置“附件保存形式(按data函数日期参数)”主要影响通过FCK编辑器直接上传的文件,这意味着,如果用户是通过其他方式(如文章编辑中的图片本地化功能)添加附件,该设置可能不会生效。

 当用户在文章编辑界面选择图片并设置为本地化时,系统会忽略后台的设置,仍然按照默认的按天保存形式处理附件。

2、代码实现的限制:

DedeCMS的部分核心代码硬编码了附件的保存路径,这导致即使用户在后台进行了设置,也无法改变这些硬编码的行为,在media_add.phpinc_archives_functions.php文件中,附件的保存路径被固定为按天保存。

 要改变这些行为,需要直接修改相关文件的代码。

3、缓存机制的影响:

 即使用户正确修改了代码并保存了设置,由于DedeCMS的缓存机制,新的设置可能不会立即生效,在这种情况下,用户需要清除缓存并重新生成页面以确保新设置能够被应用。

解决方案

1、修改后台设置:

 确保在DedeCMS后台的“系统基本参数” > “附件设置”中将“附件保存形式(按data函数日期参数)”设置为所需的值(如“ym”表示按月保存)。

2、修改核心代码:

第一步、打开dede/media_add.php文件,找到以下代码(V5.7.117版在第37行左右):

 $dpath = MyDate("ymd", $uptime);

 将其修改为:

 $dpath = MyDate("ym", $uptime); // 按月保存 注意 Y的大小写,Ym=202503、ym=2503

 // 或

 $dpath = MyDate("y", $uptime); // 按年保存
 

第二步:打开dede/inc/inc_archives_functions.php文件,找到以下代码(通常在第122行左右):

 $imgUrl = $cfg_uploaddir.'/'.MyDate("ymd", time());

 将其修改为:

 $imgUrl = $cfg_uploaddir.’/’.MyDate("ym",time()); // 按月保存

 // 或

 $imgUrl = $cfg_uploaddir.’/’.MyDate("y",time()); // 按年保存

第二步的另一种修改方法,使用函数调用,而不是直接固定写死,两种都可以

A、找到:

global $cfg_multi_site,$cfg_basehost,$cfg_basedir,$cfg_image_dir,$arcID,$cuserLogin,$dsql

修改为:
global $cfg_multi_site,$cfg_basehost,$cfg_basedir,$cfg_image_dir,$arcID,
$cuserLogin,$dsql,$cfg_addon_savetype;// 增加这个标签
 
B、找到:

$imgUrl = $cfg_uploaddir.'/'.MyDate("ymd", time());

修改为:
$imgUrl = $cfg_uploaddir.'/'.MyDate($cfg_addon_savetype, time());

小贴士:inc_archives_functions.php文件为dedecms文档处理相关函数,比如获取远程图片,删除非本站链接啥的,都在这个文件中,有兴趣的朋友可以研究下

3、清除缓存并测试:

 修改代码后,清除DedeCMS的缓存并重新生成页面,然后尝试通过不同的方式(如FCK编辑器上传、文章编辑中的图片本地化等)添加附件,以验证新的保存形式是否生效。

4、注意大小写:

在修改代码时,请注意MyDate函数的参数大小写问题。MyDate("ymd")与MyDate("Ymd")的输出是不同的,前者表示年只取后两位(如250306),后者表示年月日(如20250306),在修改代码时请确保使用正确的大小写格式。

FAQs

1、Q: 为什么修改了后台设置但附件仍然按天保存?

 A: 这是因为DedeCMS的后台设置“附件保存形式(按data函数日期参数)”仅影响通过FCK编辑器直接上传的文件,对于其他方式(如文章编辑中的图片本地化)添加的附件,需要直接修改相关文件的代码来实现按年或按月保存。

2、Q: 修改代码后是否需要重启服务器?

 A: 不需要重启服务器,但在修改代码后,请确保清除DedeCMS的缓存并重新生成页面以确保新设置能够被应用。

3、Q: 如果我不想修改代码有没有其他方法可以实现按年或按月保存附件?

 A: 如果不希望修改代码,可以考虑使用第三方插件或扩展来实现按年或按月保存附件的功能,但这些插件或扩展可能需要额外的费用或配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值