保存流程:
前台 JS -> post 佈局數據 (xml) 格式給後台程序-> 一系列處理->save_diy_data() 函數進行存儲

在這個流程中,出現點擊保存後,模板數據丟失的情況主要原因是 瀏覽器 post 給後台的 XML 數據裏,佈局數據為空。最終導致了這個空的 xml 經過處理在數據庫中替換掉了原有的數據。

挽救辦法,一旦出現這種情況後,再次進入 DIY 頁面。選擇 保存 按鈕旁邊的 恢復備份即可恢復這次保存前的數據。

原理:
在 save_diy_data() 中函數接收到整理好的數據,首先進行空值判斷和是否是數組判斷。為假的話退出函數。 (佈局數據已經被由 xml 轉換成了數組)
然後讀取此頁的默認模板,對此頁默認模板進行處理,把傳進來的佈局數據分插到默認模板中。

然後判斷一下是不是保存的臨時文件,如果是的話,那 DIY 的模板名就加上 _diy_preview.htm 後綴,如果不是保存的緩存,則用當前的模板名。

最終此文件保存在 /data/diy/ 目錄中,如果目錄中已經有同名的文件 (上一次保存 DIY 模板的時候保存下來的) 就把這個文件加上.bak 保存在同目錄。 ps. 這個文件很重要,也就是你恢復數據所需要的數據。

經歷過以上步驟之後,如果沒有出現文件讀寫問題,最後把模板數據序列化一下插入在 common_diy_data 表格中。注意這裏用的是替換插入,如果是同名的模板文件,則就替換掉了。這也就是為什麼傳進來的模板數據是空的佈局。也就在這裏替換掉了。

恢復,系統提供的恢復備份功能也就是利用上面 data/diy 文件夾中的.bak 文件進行數據恢復。