POST TIME:2017-11-12 23:45
當我們建立了多個欄目后,如果不想要某個欄目了,dedecms默認情況下在后臺刪除了欄目后,這個欄目對應的文件夾和這里面對應的html文件都不能刪除掉,這就麻煩了,還要登錄ftp再去刪除相應的文件夾和相應的html文件,如果欄目多的話,不小心看花了眼可能把其它“長像”一樣的文件夾錯刪除這就不好了,所以,織夢基地完善了織夢后臺刪除欄目功能,只要在后臺刪除這個欄目,那么,不管這個欄目下面的子欄目是在這個相對欄目里面,還是在根目錄里面都可以一起刪除掉。
我們先看一下如何刪除欄目,其實非常簡單,例如后臺,直接在要刪除的欄目后面點擊刪除即可,如下圖所示:
點擊“刪除”后,就進入到了下面的對話界面,這時候無論你選中“是”還是“否”,織夢默認下都不能刪除這個欄目生成的文件夾和對應的html文件。
經過研究作了一下簡單的織夢二次開發(fā),把下面的代碼放到文件dede/catalog_del.php里面,具體位置是搜索代碼:$ut = new TypeUnit();
在這行代碼下面放入下面的代碼:
開發(fā)原理分析:
要刪除一個欄目牽涉的內容比較多,例如,當我們在后臺建立一個欄目后,就會在這欄目表dede_arctype 記錄了欄目相關信息,若是在這個欄目里面發(fā)布了一篇文章或圖片,或軟件等,如果再有用戶評論,管理員再回復過,那就關系到評論表dede_feedback,微表dede_arctiny,主表dede_archives等,還有會員表,統(tǒng)計信息表,所以,要刪除一個欄目就要連帶著把這些相關的信息一起刪除掉,如果你上傳了附件的話,還要把這個附件內容也刪除掉。
是不是很麻煩?是的,非常麻煩,但是,不用擔心織夢幫我們做好了,都已經封裝好了(不過那個附件織夢好沒有寫),我們直接拿過來用就行了,這就是二次開發(fā)的好處,省不少事,如果自己去寫一個系統(tǒng)的話,光處理這個欄目得花太多時間。
現(xiàn)在的問題是具體細節(jié)問題織夢幫我們做好了,而接下來就是我們如何刪除欄目及其相關的html,要把這個問題弄明白,需要研究一下建立欄目的幾種方式:
1. 建立頂級欄目使用織夢默認的,就是建立頂級欄目都放在文件夾a里面,然后,假設在這個a下面建立“小說”頂級欄目如下圖所示:
如果只有頂級的刪除就簡單了,但是,如果在下面建立幾個子欄目,這樣相比一個欄目就麻煩了,不過織夢也幫我們封裝好了,只是用個遞歸遍歷刪除即可,這還不是麻煩的。
還有一種就是在a下面建立子欄目并且,這個子欄目不在a里面,而是放在根目錄里面,這是最麻煩的,因為,如果全部在a文件夾下面的話,我們用遞歸就解決掉了,而現(xiàn)在就不行了,所以,這要重新判斷一下在文件夾a下面建立的一個欄目下面是不是有子欄目,這個子欄目是不是在a下面,然后,如果不在a下面,再判斷一下就是不是在根目錄里面,這一系統(tǒng)正是這次我開發(fā)時遇到困難,不過最后,也花了很短時間搞定了。
2. 與第一種類似,這種建立的欄目是直接在根目錄下面建立欄目,然后,在這個根目錄下面再建立子欄目,在子欄目下面再建立欄目,這些欄目有的可能在這個目錄里面,有的可能又回到根目錄里面,這一點跟上面類似,所以,解決了上面的問題,就解決了第二種方法里面的子欄目在根目錄的問題。
建立欄目的種類,絕對跑不出去上面二大類,通過上面的分析,我們知道要刪除一個目錄只要照著上面的原理寫就可以了。
代碼分析開始:
1. 經過我的研究發(fā)現(xiàn)織夢有一個文件管理邏輯類file_class.php,專門處理文件的,這里面有一個方法RmDirFiles($indir),它是用來刪除欄目的,而且是遞歸刪除,分析一下這個代碼我們發(fā)現(xiàn),他連文件夾里面的文件也一起刪除,正好是我們需要的。
2. 查詢要刪除的欄目對應的路徑,因為,上面的函數(shù)里面需要$indir這個參數(shù),這個指的是目錄,所以,我們要獲取這個目錄,要獲取這個就得查詢欄目表: