五指系列教程:删除文章直接删除与之关联的附件

说明:五指cms 上传的附件是无状态的,包括多图上传、编辑器上传。导致很多冗余附件产生。

总体思路:

1.在attachment模块下,对h5upload、ueditor、ckeditor 上传的时候,把记录入库(attachment表)的附件id写入客户端cookie。以供文章提交或者修改的的时候记录入库attachment_index表

2.在文章提交或者修改的时候,从客户端获取刚记录的附件id的cookie,把它属于哪篇文章关联起来。入库attachment_index表。

3.在文章彻底从回收站清空的时候,判断这个附件是否还有别的文章使用,如果有,只清除attachment_index的关联记录,如果只有这篇文章使用,则同时删除attachment表里的附件记录,以及删除硬盘上的附件本身。

具体实现办法。

注意:新模块有需要添加附件功能的,,二是要在添加,修改函数里调用txb_get_att_cookie($cid,$id)删除文章调用txb_del_att($cid,$id)

表结构 attachment表里加一个status的字段,记录是否已经使用。新建表attachment_index里面字段keyid和aid

五指系列教程:删除文章直接删除与之关联的附件

1.在txbcommon.func.php里增加三个核心处理函数

A.txb_set_att_cookie($aid)函数设置上传附件的json格式cookie。格式:set_cookie('att_json',$json_str);

涉及修改位址:(1).app/attachment/EXT_index.php 的h5upload(),有两处添加此函数,负责在选择已存在附件或者上传新附件后在客户端写cookie记录涉及的附件id;

(2).app/attachment/libs/class/attachment.class.php的insert()。最核心的附件入库函数,之后添加此函数。

(3).app/attachment/libs/class/uploader.class.php的upfile()。有一处添加次函数,负责在编辑器里添加,选择已存在的图片,附件后在客户端写cookie记录涉及的附件id;

B.txb_get_att_cookie($cid,$id)把从客户端获取刚记录的附件id的cookie,和它属于哪篇文章关联起来,入库attachment_index。格式: txb_get_att_cookie($cid,$id)

涉及修改位址:(1.)app/content/admin/EXT_content.php里面的add(),edit(),delete() 这是后台增加文章,修改文章,

(2)app/content/EXT_postinfo.php里面的 txb_newinfo() txb_edit()

(3)app/txbblog/home.php 里面的增删改函数。

C.txb_del_att($cid,$id) 从回收站里删除文章的时候调用。在文章彻底从回收站清空的时候,判断这个附件是否还有别的文章使用,如果有,只清除attachment_index的关联记录,如果只有这篇文章使用,则同时删除attachment表里的附件记录,以及删除硬盘上的附件本身。

涉及修改位址:app/content/admin/EXT_content.php里面的delete();delete_more() 从回收站彻底删除文章。批量删除文章的函数。

/txb设置上传附件的json格式cookie

function txb_set_att_cookie($aid) {

$arr['aid'] = $aid;

$json_str = json_encode($arr);

$att_arr_exist = get_cookie('att_json');

$att_arr_exist_tmp = explode('||', $att_arr_exist);

if(is_array($att_arr_exist_tmp) && in_array($json_str, $att_arr_exist_tmp)) {

return true;

} else {

$json_str = $att_arr_exist ? $att_arr_exist.'||'.$json_str : $json_str;

set_cookie('att_json',$json_str);

return true;

}

}

//组装attachment关联字符串,写入attachment_index,后台content和前台postinfo需要用到

function txb_get_att_cookie($cid,$id){

if(isset($cid)&&isset($id)){

$db=load_class('db');

$att_json=get_cookie("att_json");

$keyid=M."-".$cid."-".$id;

if($att_json) {

$att_cookie_arr = explode('||', $att_json);

$att_cookie_arr = array_unique($att_cookie_arr);

} else {

return false;

}

foreach ($att_cookie_arr as $_att_c) $att[] = json_decode($_att_c,true);

//print_r($att[0]);exit();

foreach ($att as $_v) {

$db->update("attachment",array('status'=>1),array('id'=>$id));

$db->insert("attachment_index",array('keyid'=>$keyid,'aid'=>$_v['aid']));

}

set_cookie("att_json","");

}else{

set_cookie("att_json","");

}

}

//txb增加 删除关联附件开始

function txb_del_att($cid,$id){

$db=load_class('db');

if(isset($cid)&&isset($id)){

//txb增加 删除关联附件开始

$att_keyid=M."-".$cid."-".$id;

$attachment_index=$db->get_list("attachment_index",array('keyid'=>$att_keyid));

//echo $att_keyid;

//print_r($attachment_index);exit;

//$c="";

foreach($attachment_index as $rs=>$r){

$count=$db->count(attachment_index,array('aid'=>$r['aid']));

//print_r($count);exit;

$c.="|".$count['num'];

if($count['num']>=2){

$db->delete('attachment_index',array('keyid'=>$r['keyid'],'aid'=>$r['aid']));

}else{

$db->delete('attachment_index',array('keyid'=>$r['keyid'],'aid'=>$r['aid']));

$attachment=$db->get_one('attachment',array('id'=>$r['aid']));

$db->delete('attachment',array('id'=>$r['aid']));

unlink(ATTACHMENT_ROOT.$attachment['path']);

}

}

//echo $c;exit;

}

//txb增加 删除关联附件结束

}

后台调用涉及修改文件,根据需要调用所定义函数。如需源码请私信!


分享到:


相關文章: