好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 網(wǎng)站建設 > 建站知識 > 徹底刪除dedecms欄目及其html文件教程

徹底刪除dedecms欄目及其html文件教程

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ù),這個指的是目錄,所以,我們要獲取這個目錄,要獲取這個就得查詢欄目表:

  1. SELECT typename,typedir FROM dede_arctype WHERE id=".$id
復制代碼

這里面的$id就是要刪除的欄目id,然后查詢之。把字段typedir查詢出來,這個字段對應的內容如下圖所示:



3. 判斷$row['typedir']是哪種類型的欄目,若是第一種即目錄相對位置是前二種如下圖所示:



則,通過
  1. $typedir = str_replace("{cmspath}", "..",$row['typedir']);

進行替換,然后,調用刪除目錄函數(shù)
  1. $file->RmDirFiles($typedir);

若是這種類型的并且有子欄目在在根目錄,也就是上面的“武俠”欄目,則根據(jù)頂級欄目topid=$id的進行查詢,把所有在根目錄生成的欄目,每查詢一次就刪除一個,當然,如果這個欄目下面還有子欄目,還有在根目錄生成的這樣交叉的,也沒有關系遞歸刪除之,這就是這個函數(shù)$file->RmDirFiles($typedir)的好處。這一小段代碼如下:



由于比較簡單,就不分析了,這些代碼在織夢基地已經多次分析過了。

4. 另外一種就是不是直接在a文件夾建立頂級欄目,而是在根目錄里面建立頂級欄目,在這個欄目下面再建立子欄目,這里面的子欄目有可能有的也在根目錄里面建立欄目。

這類的處理要比上面的處理簡單,用了十幾分鐘就寫完了,這個好判斷直接判斷typedir字段里面的第一個符號是不是“/”這個,若是說明是根目錄,替換掉這個符號,然后刪除之。

同樣的道理在這個頂級欄目建立的子欄目不一定只在這個目錄里面,如果只在這個目錄里面,只寫一個刪除就行了,所以,還要判斷一下有沒有子欄目也生成在了根目錄里面,若有,則跟第一類的處理方式一樣,代碼幾乎一樣,這里不用多解釋了。

總結:雖然,這個小小的開發(fā),功能不大,但是,因為是第一次開發(fā)刪除欄目功能,所以,用了一下午的時間重新把織夢處理文件的代碼讀了一遍,通過這次小小開發(fā),學到了不少東西:查php手冊很重要、多研究織夢源碼很重要、認真很重要、好好總結織夢開發(fā)方法很重要,學會分享很重要!

插件下載地址

安裝方法:下載下來文件,把文件覆蓋在/dede/文件夾里面,如果你改了這個后臺名,那就是你改后的名,例如,我后臺把dede改成abc,那么就上傳到abc文件夾里面。要注意,你安裝的哪個版本程序就下載哪個。

刪除方法:

1. 這個就更簡單了,點擊欄目后面的刪除,如下圖所示:


2. 選擇“是”,點擊“確定”,如下圖所示:



刪除成功!

要注意的是,要刪除一個欄目,由于此功能會把這個欄目下面的所有html都刪除掉,所以,在刪除欄目前要備份數(shù)據(jù)庫,以免刪錯了欄目。


收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266