codecamp

模板实现原理

DzzOffice拥有完善的模版机制,支持模版和程序的分离,方便模版风格的扩展开发。

通常模版文件存放在template目录下,文件格式为 htm。在加载模版的时候通常就是简单的一句:

include template('dir/filename');


include template('filename');

其中 dir 为当前模块template目录下的子目录名称,如果直接在template下dir可省略,filename 为模板文件名称。

这个时候 Dzz模版引擎主要进行了如下的行为:

  • 根据传入的参数计算得到完整的文件路径和名称(更多参数请参看./core/function/function_core.php中的template函数)

  • 检查文件是否存在以及解析之后的模版缓存是否存在及是否已经过期

  • 根据上一步判定是否进行模版的解析,如未解析过的话,将解析后的可执行文件存入 ./data/template/ 下以备调用

  • 返回解析后的模板文件地址并加载

  • 加载成功

      注意:保证 ./data/template/目录有写入权限,后台更新模板缓存时会清空此目录,如果没有权限将导致模板无法加载或无法更新。



模板缓存机制

         DzzOffice采用的是预编译的模板缓存机制,程序调用模板过程中先去检测是否已经存在缓存,如果存在已编译后的模板文件,则直接调用编译后的模板缓存(./data/template/下)。否则进行一次模板编译。

模板编译工作原理如下:

            


数据层
模板语法
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Dzz系统框架

输入数据处理

数据DB层

安全相关

上传组件

评论组件

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }