五指系列教程:刪除文章直接刪除與之關聯的附件

說明:五指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增加 刪除關聯附件結束

}

後臺調用涉及修改文件,根據需要調用所定義函數。如需源碼請私信!


分享到:


相關文章: