如何在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、:找到并打开/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、:找到并打开/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

相关推荐

  • Dede系统删除文章时出现错误,该如何解决?

    dede后台中,找到内容管理,选择要删除的文章,点击删除即可。

    2024-10-24
    013
  • 如何有效删除Dedecms中出错的文章?

    要删除Dedecms中出错的文章,请登录后台,进入内容管理,找到并选择错误文章,点击删除按钮即可。

    2024-10-24
    07
  • 如何在Dedecms 5.7中删除文章时自动移除图片和缩略图?

    在DedeCMS 5.7中,要删除文章时自动删除文章内的图片和缩略图,需要修改系统文件并添加自定义函数。具体步骤如下:,,1. **找到删除文章的函数**:, 打开 /dede/archives_article_do.php 文件。,,2. **添加自定义删除函数**:, 在文件中找到 delArc($aid) 函数,并在其内部添加代码来删除图片和缩略图。,,3. **示例代码**:, “php, function delArc($aid) {, // 删除文章内容中的图片和缩略图, $dsql = new DedeSql();, $dsql˃Execute(“DELETE FROM dede_addonarticle WHERE aid=’$aid'”);, $dsql˃Execute(“DELETE FROM dede_archives WHERE id=’$aid'”);, }, “,,4. **保存并上传文件**:, 将修改后的文件上传到服务器,覆盖原有文件。,,这样,当你在后台删除文章时,系统会自动删除文章内的所有图片和缩略图。

    2024-10-23
    09
  • 如何在织梦DedeCMS中删除文章而不删除HTML和附件图片?

    在织梦DedeCMS中,删除文章时不删除HTML和附件图片。

    2024-10-23
    014

发表回复

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

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