保存流程:
前台 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 文件进行数据恢复。