ecshop模板工作原理与基本流程(一)简单介绍了,在有缓存的情况下,模板引擎的工作流程。
接下这我们重点看一下,在还没有生成缓存的情况下,ecshop的模板引擎是如何编译模板,标签替换、建立缓存,并输出视图的。
首先看一下模板引擎编译模板涉及到的文件、函数的位置和作用。
init.php
位置:includes/init.php
作用:这是系统的初始化文件,在加载这个文件的时候也对模板引擎进行了初始化。
index.php
位置:网站根目录
作用:可以看成是模板引擎的服务对象。
$smarty->display()
位置:/includes/cls_template.php cls_template类
作用:通过调用类中的其他方法,显示页面。(同一个模板可能有多个不同的缓存)
caches
位置:temp/caches/
作用: 默认的缓存存储目录
位置:temp/compiled/
作用: 默认的编译文件存储目录
编译与缓存
当发现没有需要的缓存文件之后,index.php会注册模板中需要的变量。
然后调用模板引擎的display()方法去显示网页。
display()方法并不会自己完成所有的工作,它的主要任务其实是和index.php进行交互,把index.php中的相关信息接收过来。
比如:display把index.php要显示的模板和缓存ID,告诉给fetch这个方法,由fetch方法去对模板进行处理,知道fetch把结果返回给display,它才进行下一步的工作。
fetch也不是最终干活的人,它接到display交给的任务以后,会分别对这些数据进行判断,找到模板的具体路径,对照系统当前的配置,例如是否是在调试模式下,模板是否是"str:"开头的(数据库中的标签),根据不同的情况进行不同的处理。
现在是该编译模板的时候了,但是fetch不会自己去编译。在不生成缓存的情况下。fetch把模板中的所有内容读出来,并交个fetch_str(这才是我们真正的的草根男一号)。并由它对模板中的标签进行替换。
如果还要生成编译文件和缓存,fetch会让make_compiled去编译模板(make_compiled也要调用fetch_str),在由fetch对编译后的结果进行缓存,并把数据返回给display.
dipaly终于等到了结果,收到fetch的结果后,再对结果中的动态内容进行处理。
最后把结果输出到浏览器。