ecshop模板工作原理与基本流程(二)

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的结果后,再对结果中的动态内容进行处理。

最后把结果输出到浏览器。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值