当前位置:首页 > 行业动态 > 正文

如何在Dede中删除文档及其附带图片?

在DedeCMS中,删除文档时会自动删除文章中的图片。

在DedeCMS中,删除文档的同时删除文章中的图片是一项非常实用的功能,这不仅有助于节省服务器空间,还能避免手动清理无用图片的麻烦,以下是实现这一功能的详细步骤和相关代码示例:

如何在Dede中删除文档及其附带图片?  第1张

第一步:创建extend.func.php文件

1、创建文件:在/include目录下创建一个名为extend.func.php的文件。

2、编写函数:将以下内容保存到extend.func.php文件中,这些函数用于解析文章的body数据,获得所有图片的绝对地址,并记录日志。

// 解析body数据,获得所有图片的绝对地址
function GetPicsTruePath($body, $litpic) {
    $delfiles = array(); // 存储图片地址数据
    if (!empty($litpic)) {
        $litpicpath = GetTruePath();
        $litpicpath .= $litpic;
        $delfiles[] = $litpicpath; // 缩略图地址
    }
    preg_match_all("/src=["|'|S|s]([^ title=liehuo.net |/|>]*){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);
}

第二步:修改inc_batchup.php文件

1、打开文件:找到并打开/dede/inc/inc_batchup.php文件。

2、添加代码:在$arcRow = $dsql>GetOne($arcQuery);下方添加以下代码:

$arcBodyRow = GetArcBody($aid);

3、继续添加代码:在return true;上方添加以下代码:

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

FAQs

Q1: 如何验证是否成功删除了文章及其图片?

A1: 你可以通过查看位于/data/目录下的日志文件del_body_file.txt来验证删除操作的结果,该文件会记录每次删除操作的详细信息,包括文章标题、图片路径、删除结果及时间。

Q2: 如果在删除过程中遇到图片无法删除的情况怎么办?

A2: 如果某个图片文件无法删除,可能是由于权限问题或文件被占用,你可以检查文件的权限设置,确保PHP进程有权限删除该文件,如果问题依然存在,可以尝试手动删除该文件或者联系系统管理员解决。

步骤 操作 说明
1 打开DedeCMS后台管理 登录到DedeCMS后台,找到文档管理模块。
2 选择文档 在文档列表中找到需要删除的文档,点击选择。
3 编辑文档 点击“编辑”按钮,进入文档编辑页面。
4 选中图片 在文档内容中找到需要删除的图片,点击选中。
5 删除图片 按住鼠标左键,拖动图片到回收站或者右键点击图片选择“删除”。
6 保存文档 点击“保存”按钮,保存对文档所做的修改。
7 删除文档 返回文档列表页面,选中该文档,点击“删除”按钮。
8 确认删除 在弹出的确认窗口中选择“确定”,确认删除文档。
9 删除图片 在删除文档的同时,系统会自动删除文档中引用的所有图片。
10 完成操作 文档及其中的图片已经被成功删除。

步骤是基于DedeCMS后台操作的通用指南,具体操作可能因DedeCMS版本或配置的不同而有所差异。

0

随机文章