如何在DedeCMS 5.6中实现删除文章时同时删除关联图片?

在 dedecms 5.6 中,删除文章时同时删除图片可以通过修改文章内容模型的 delete 方法实现。具体操作如下:,,1. 打开 dedecms 5.6 安装目录下的 /dede/archives_article.php 文件;,2. 找到 delete($id) 方法;,3. 在该方法中添加代码以删除与文章关联的图片。,,以下是一个简单的示例代码:,,“php,function delete($id) {, // 原有删除文章的逻辑, $dsql = new DedeSql();, $dsql>ExecuteNoneQuery("DELETE FROM #@__archives WHERE id='$id'");,, // 删除与文章关联的图片, $specInfo = $this>getOneArchiveSpecInfo($id);, if ($specInfo['body'] && strpos($specInfo['body'], '{dede:field name="image"') !== false) {, preg_match('/{dede:field name="image" value="(.*?)"}/', $specInfo['body'], $matches);, $imagePath = $matches[1];, if (file_exists(DEDEDATA . '/uploads/images/' . $imagePath)) {, unlink(DEDEDATA . '/uploads/images/' . $imagePath);, }, },},`,,这段代码首先执行原有的删除文章逻辑,然后检查文章的 body` 字段中是否包含图片字段。如果包含,就提取图片路径并删除对应的图片文件。

在dedecms 5.6版本中,删除文章的同时删除图片的方法主要涉及到修改两个文件:extend.func.phpinc_batchup.php,以下是具体步骤和代码示例:

如何在DedeCMS 5.6中实现删除文章时同时删除关联图片?

一、修改extend.func.php

1、打开extend.func.php:找到并打开/include/extend.func.php文件。

2、添加以下代码

“`php

<?php

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;

}

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);

}

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;

}

?>

“`

二、修改inc_batchup.php

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

2、添加以下代码

“`php

<?php

function DelArc($aid, $type = ‘ON’, $onlyfile = false) {

global $dsql, $cfg_cookie_encode, $cfg_multi_site, $cfg_medias_dir;

global $cuserLogin, $cfg_upload_switch, $cfg_delete, $cfg_basedir;

global $admin_catalogs, $cfg_admin_channel;

if ($cfg_delete == ‘N’) $type = ‘OK’;

if (empty($aid)) return;

$aid = ereg_replace("[^09]", ”, $aid);

$arctitle = $arcurl = ”;

// 查询表信息

$query = "Select ch.maintable,ch.addtable,ch.nid,ch.issystem Fromdede_arctiny arc

left joindede_arctype tp on tp.id=arc.typeid

left joindede_channeltype ch on ch.id=arc.channel where arc.id=’$aid’ ";

$row = $dsql>GetOne($query);

$nid = $row[‘nid’];

$maintable = (trim($row[‘maintable’]) == ” ? ‘dede_archives’ : trim($row[‘maintable’]));

$addtable = trim($row[‘addtable’]);

$issystem = $row[‘issystem’];

// 查询档案信息

if ($issystem == 1) {

$arcQuery = "Select arc.*,tp.* from$addtable arc left joindede_arctype tp on arc.typeid=tp.id where arc.aid=’$aid’ ";

} else {

$arcQuery = "Select arc.*,tp.*,arc.id as aid from$maintable arc left joindede_arctype tp on arc.typeid=tp.id where arc.aid=’$aid’ ";

}

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

if ($row[‘litpic’] != ”) {

$litpic = $row[‘litpic’];

} else {

$litpic = ”;

}

if (empty($row[‘body’])) {

return;

}

if ($type == ‘ALL’ || $type == ‘ON’) {

if ($onlyfile == false) {

// 删除附加表内容

$filenameh = DEDEDATA . ‘/’ . $addtable . ‘/aid_’ . $aid . ‘.htm’;

if (@is_file($filenameh)) @unlink($filenameh);

$filenameh = DEDEDATA . ‘/’ . $addtable . ‘/aid_’ . $aid . ‘_1.htm’;

if (@is_file($filenameh)) @unlink($filenameh);

}

}

if ($type == ‘DEL’ && empty($row[‘body’])) {

return;

}

// 解析Body中的资源,并删除

$willDelFiles = GetPicsTruePath($row[‘body’], $litpic);

$nowtime = time();

$executetime = MyDate(‘Ymd H:i:s’, $nowtime); // 获得执行时间

$msg = "r

" . $row[‘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);

}

} else {

$msg = "r

未在Body中解析到数据" . "r

Body原始数据:" . $row[‘body’] . "r

时间:" . $executetime;

WriteToDelFiles($msg);

}

}

“`

3、保存修改:将上述代码添加到对应文件中,并保存文件。

4、备份文件:在进行任何修改之前,请确保备份原始文件,以防出现问题时可以恢复。

FAQs(常见问题解答)

问题1:如何确认文章及其图片已被成功删除?

答:可以通过查看data/del_body_file.txt日志文件来确认,该文件会记录每次删除操作的详细信息,包括删除的图片路径和删除状态,如果删除成功,会在日志文件中看到相应的成功信息,如果删除失败,也会记录失败的原因。

问题2:为什么有时删除图片会失败?

答:删除图片可能会失败的原因有多种,包括但不限于:文件权限不足、文件被其他进程占用、路径错误等,确保服务器上的PHP脚本有足够的权限来删除文件,并且文件路径正确无误,如果问题持续存在,建议检查服务器的错误日志以获取更多信息。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1114969.html

(0)
未希的头像未希新媒体运营
上一篇 2024-10-01 09:06
下一篇 2024-10-01 09:08

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

免费注册
电话联系

400-880-8834

产品咨询
产品咨询
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入