DEDE删除文章同时删除附件解决代码:
- /*
- 根据文档id获取文档的body部分
- */
- function getArcBody($arcid)
- {
- global $dsql;
- if(emptyempty($arcid)) return ;
- $body = '';
- $query = "select arc.*,ch.addtable,ch.fieldset from `dede_arctiny` as arc left join `dede_channeltype` as ch on arc.channel=ch.id where arc.id=$arcid";
- $row = $dsql->GetOne($query);
- if(emptyempty($row)) return ;
- $addtable = $row['addtable'];
- $fieldset = $row['fieldset'];
- include_once(DEDEINC.'./dedetag.class.php教程');
- $dtp = new DedeTagParse();
- $dtp->SetNameSpace('field','<','>');
- $dtp->LoadSource($fieldset);
- if(is_array($dtp->CTags))
- {
- foreach($dtp->CTags as $tid=>$tag)
- {
- if($tag->GetAtt('type')=='htmltext')
- {
- $body = $tag->GetName();
- break;
- }
- }
- }
- if(!emptyempty($body))
- {
- $query = "select $body from `$addtable` where aid=$arcid";
- $row = $dsql->GetOne($query);
- $body = $row[$body];
- return $body;
- }
- return ;
- }
- /*
- 解析文档内容的本地图片图片
- */
- function get_img_from_body($body)
- {
- $result = array();
- if(emptyempty($body))
- return $result;
- preg_match_all('/ssrc=(["|'])([^1]*?).(gif|jpg|jpeg|png)1/',$body,$res);
- if(!emptyempty($res[2]))//开源软件:Vevb.com
- {
- foreach($res[2] as $k=>$v)
- {
- $result[] = $v.'.'.$res[3][$k];
- }
- }
- return $result;
- }
把这段代码贴到include/common.func.php后面,接着打开后台,假设使用默认的dede作为后台,dede/inc/inc_batchup.php文件,在第22行添加代码如下:
$body = getArcBody($aid);
接在在第139行,就是在 return true;上面一行加上下面的代码:
- if($body)
- {
- $img_arr = get_img_from_body($body);
- if(!emptyempty($img_arr))
- {
- foreach($img_arr as $v)
- {
- $img_file = GetTruePath().str_replace($GLOBALS['cfg_basehost'],'',$v);
- if(file_exists($img_file) && !is_dir($img_file))
- @unlink($img_file);
- }
- }
- }
这样就可以实现删除文档的时候删除字段为“htmltext”类型的中的本地图片了.
新闻热点
疑难解答