Dedecms刪除文檔同時刪除圖片及附件的方法
來源:程序員人生 發布時間:2013-12-22 03:55:03 閱讀次數:3394次
dede55前臺會員發布的信息在刪除時總是不能刪除附件,在這里以普通文章圖片附件為例跟大家交流一下。
dede上傳的附件信息統統存在uploads表里,而這些附件怎樣才能跟其母信息相關聯?關鍵是uploads表里的arcid,也就是母信息的id號。dede在刪除母信息時也是通過arcid來刪除其附件信息。而前臺會員上傳的附件信息在保存到uploads表里時arcid默認為0,所以在刪除母信息時附件肯定刪除不了。
例如:添加一條記錄,他的id號為1(以arctiny表的id為準 ),信息內容中有5張圖片,在保存時這5張圖片信息將存為5條uploads記錄,并且這5條記錄的arcid都為1(dede默認為0)。所以只要我們在上傳附件信息時將其母信息的id號同時保存到uploads表里就可以了。
dede后臺管理員上傳附件時用到兩個函數 AddMyAddon()和ClearMyAddon(),AddMyAddon是用來將上傳的附件信息存到緩存文件里,在保存母信息時用緩存文件內容替換uploads表里的附件信息記錄,等一切都保存完后ClearMyAddon清除緩存。在這里我們移花接木將這兩個函數用在前臺用戶上。
第一步:打開member/memberlogin.class.php,
在第3行添加:session_start();//主要是為了給每個用戶建立隨機id號
在第84行添加 AddMyAddon函數和ClearMyAddon函數,防止拷貝錯誤也可以直接打開include/userlogin.class.php文件在79行找到這兩個函數:
/*****************************************
發布文檔臨時附件信息緩存、發文檔前先清空附件信息
發布文檔時涉及的附件保存到緩存里,完成后把它與文檔關連
******************************************/
function AddMyAddon($fid, $filename)
{
$cacheFile = DEDEDATA.'/cache/addon-2'.session_id().'.inc';
if(!file_exists($cacheFile))
{
$fp = fopen($cacheFile, 'w');
fwrite($fp, '<'.'?php'."");
fwrite($fp, "$myaddons = array();");
fwrite($fp, "$maNum = 0;");
fclose($fp);
} //liehuo.net
include($cacheFile);
$fp = fopen($cacheFile, 'a');
$arrPos = $maNum;
$maNum++;
fwrite($fp, "$myaddons[$maNum] = array('$fid', '$filename');");
fwrite($fp, "$maNum = $maNum;");
fclose($fp);
}
//清理附件,如果關連的文檔ID,先把上一批附件傳給這個文檔ID
function ClearMyAddon($aid=0, $title='')
{
global $dsql;
$cacheFile = DEDEDATA.'/cache/addon-2'.session_id().'.inc';
$_SESSION['bigfile_info'] = array();
$_SESSION['file_info'] = array();
if(!file_exists($cacheFile))
{
return ;
}
//把附件與文檔關連
if(!empty($aid))
{
include($cacheFile);
foreach($myaddons as $addons)
{
if(!empty($title)) {
$dsql->ExecuteNoneQuery("Update `dede_uploads` set
arcid='$aid',title='$title' where aid='{$addons[0]}'");
}
else {
$dsql->ExecuteNoneQuery("Update `dede_uploads` set
arcid='$aid' where aid='{$addons[0]}' ");
}
}
}
@unlink($cacheFile);
}
第二部:打開member/inc/inc_archives_functions.php
在144行$dsql->ExecuteNoneQuery($inquery);下面添加:
$fid = $dsql->GetLastID();
AddMyAddon($fid, $filename);
第三步:打開member/article_add.php(編輯的話就打開article_edit.php,大同小異),,
大概在16行添加:
ClearMyAddon();//添加-->先清除一下緩存
$cInfos = $dsql->GetOne("Select * From `dede_channeltype` where id='$channelid'; ");
在大概83行
//生成文檔ID
$arcID = GetIndexKey($arcrank,$typeid,$sortrank,$channelid,$senddate,$mid);
if(empty($arcID))
{
ShowMsg("無法獲得主鍵,因此無法進行后續操作!","-1");
exit();
}
ClearMyAddon();//添加-->保存后清除緩存。
ok了!這樣添加信息后縮略圖和信息內容中的圖片都可以刪除了
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈