如何在织梦dedecms中删除文章并同时移除其附件?

avatar
作者
筋斗云
阅读量:0
在织梦CMS中删除文章时,同时删除附件的解决方法是修改/dede/archives_article_do.php文件,添加代码以同步删除附件。

在织梦CMS(DedeCMS)中,删除文章时默认不会自动删除文章中的图片和附件,这会导致随着时间的推移,服务器上积累大量无用的图片和附件文件,占用宝贵的存储空间,为了解决这个问题,可以通过修改系统文件来实现删除文章时同步删除相关图片和附件的功能。

如何在织梦dedecms中删除文章并同时移除其附件?

实现方法

1. 创建或编辑extend.func.php 文件

打开include/extend.func.php 文件,如果该文件不存在,需要创建一个,在该文件中添加以下代码:

 /**  * 解析body数据,获得所有图片的绝对地址  */ function GetPicsTruePath($body, $litpic) {     $delfiles = array();     // 存储图片地址数据     if (!empty($litpic)) {         $litpicpath = GetTruePath();         $litpicpath .= $litpic;         $delfiles[] = $litpicpath; // 缩略图地址     }     preg_match_all("/src=[\"|'|\S|\s]([^ |\/|>]*){0,}(([^>]*)\.(gif|jpg|png))/isU", $body, $tmpdata);     $picspath = array_unique($tmpdata[2]); // body中所有图片的地址     foreach ($picspath as $tmppath) {         $path = GetTruePath(); // 获得绝对路径         $picpath = preg_replace("/[azAZ]+:\/\/[^ |\/|\\s]*/", '', $tmppath); // 去掉网址部分         $path .= $picpath;         $delfiles[] = $path; // 保存处理后的数据     }     return $delfiles; } /**  * 获取文章Body数据  */ function GetArcBody($aid) {     global $dsql;     $query = "SELECT dede_addonarticle.body FROM dede_addonarticle WHERE dede_addonarticle.aid = '$aid'";     $row = $dsql>GetOne($query);     if (is_array($row)) {         return $row;     } else {         return false;     } } /**  * 记录删除日志  */ function WriteToDelFiles($msg) {     if (empty($msg)) {         $savemsg = "未获得消息";     } else {         $savemsg = $msg;     }     $errorFile = dirname(__FILE__) . "/../data/del_body_file.txt"; // 删除记录文件     $fp = @fopen($errorFile, 'a');     @fwrite($fp, "\r {$savemsg}");     @fclose($fp); }

2. 修改inc_batchup.php 文件

打开dede/inc/inc_batchup.php 文件,找到以下代码:

 $arcRow = $dsql>GetOne($arcQuery);

在这行代码的后面添加如下代码:

 $arcBodyRow = GetArcBody($aid); if ($arcBodyRow !== false) {     // 解析Body中的资源,并删除     $willDelFiles = GetPicsTruePath($arcBodyRow['body'], $arcRow['litpic']);     $nowtime = time();     $executetime = date('Ymd H:i:s', $nowtime); // 获得执行时间     // 记录日志信息     $msg = "文章{$arcRow['title']}";     WriteToDelFiles($msg);     if (!empty($willDelFiles)) {         foreach ($willDelFiles as $file) {             if (file_exists($file) && !is_dir($file)) {                 if (@unlink($file)) {                     $msg = "位置:$file 结果:删除成功! 时间:$executetime";                 } else {                     $msg = "位置:$file 结果:删除失败! 时间:$executetime";                 }             } else {                 $msg = "位置:$file 结果:文件不存在! 时间:$executetime";             }             WriteToDelFiles($msg);         }     } else {         $msg = "未在Body中解析到数据 Body原始数据:{$arcBodyRow['body']} 时间:$executetime";         WriteToDelFiles($msg);     } }

通过以上步骤,即可实现在删除文章时同步删除文章中引用的图片和附件,这不仅简化了管理流程,还有效地节省了存储空间。

FAQs

问题1:如何确保修改后的代码能够正确运行?

答:确保修改后的代码能够正确运行的方法包括以下几点:

1、检查代码语法:确保添加的PHP代码没有语法错误,可以使用PHP代码检查工具来验证。

2、备份原文件:在进行任何修改之前,务必备份原文件,以便在出现问题时可以恢复。

3、测试环境:先在测试环境中进行操作,确认功能正常后再应用到生产环境。

4、查看日志:通过查看删除记录文件(如del_body_file.txt),确认删除操作是否记录并成功执行。

如何在织梦dedecms中删除文章并同时移除其附件?

问题2:是否可以扩展这个功能,删除其他类型的附件?

答:是的,可以扩展这个功能以删除其他类型的附件,具体步骤如下:

1、解析更多类型的附件:在GetPicsTruePath 函数中,增加对其他类型附件的支持,例如视频、音频等。

2、修改正则表达式:调整正则表达式以匹配更多类型的文件扩展名,如.mp4,.mp3 等。

3、更新删除逻辑:在inc_batchup.php 中,根据新的附件类型调整删除逻辑,确保这些类型的文件也能被正确删除。


【织梦DedeCMS删除文章同时删除附件的解决方法】

问题背景

在织梦DedeCMS中,当删除一篇文章时,如果需要同时删除与之关联的附件,系统默认并不会自动删除这些附件,这可能会导致附件目录中积累大量无用的文件,影响网站性能和空间利用率。

解决方法

1、修改数据库结构

登录到织梦CMS的后台管理。

进入“系统”菜单,选择“数据库”。

找到与文章附件相关的数据库表,通常是dede_arctype

在该表中添加一个新的字段,用于存储附件的文件名,字段类型可以是VARCHAR。

修改dede_arctype表中的数据,为每个文章类型添加对应的附件文件名。

如何在织梦dedecms中删除文章并同时移除其附件?

2、修改删除文章的代码

进入织梦CMS的源代码目录,找到处理文章删除功能的文件,通常是includearcadmin.php

在删除文章的代码块中,添加删除附件的逻辑。

示例代码如下:

 // 删除文章 $aid = $_GET['aid']; // 获取文章ID $archives = new Archives(); $archives>delArchives($aid); // 删除附件 $attachArr = $archives>GetFileList($aid); // 获取附件列表 foreach ($attachArr as $file) {     @unlink($file); // 删除文件 }

3、验证修改效果

保存并上传修改后的代码。

在后台删除一篇文章,并检查附件是否被同时删除。

注意事项

在修改数据库结构前,请确保备份数据库,以防万一。

修改代码时,请仔细检查路径和变量名,确保与您的织梦CMS版本和配置相符。

修改完成后,建议进行全面的测试,以确保网站功能的稳定性和安全性。

通过以上步骤,您可以实现在织梦DedeCMS中删除文章时自动删除相关附件的功能。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!