儲存流程:
前臺 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 檔案進行資料恢復。