模板的原理类似Smarty/ECShop这类模板的原理如下图所示。1.首先是编译模板ECShop/SPHP
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码
类似Smarty/ECShop这类模板的原理如下图所示。

1.首先是编译模板 ECShop/Smart是利用PHP引擎,所以编译的结果是一个PHP文件,其编译过程就是
将分隔符{}替换成PHP的标准分隔符<?PHP ?>, 将
2.其次是生成编译结果
编译结果是PHP文件,并且编译结果可以重用,所以这种文件会存到临时缓存目录里面。
3.利用PHP引擎执行结果
输出HTML结果。
ECShop的模板原理和上面基本类似,就是在编译的时候和Smarty模板有所修改,比较重要的有一下几点: 1. 模板的执行流程
$smarty->display
$smarty->fetch 返回HTML结果(所有模板)
$smarty->fetch_str (先编译成PHP、在给变量赋值、计算结果) 1) $smarty->smarty_prefilter_preCompile (编译成PHP)
2) $smarty->select (计 算每一个变量、表达式的结果,替换成标准PHP语法) 这一步是通过正则实现的,匹配每一个{},将结果传给 $smarty->select,改方法通过switch/case逐一分析,替换成对应的表达式。 【所以添加自定义标签、自定义表达式可以修改此处。】
3) smarty->get_para
4) smarty->get_val 而
$smarty->_eval 替换成标准的PHP文件后通过eval来执行结果。
2. Lbi文件替换 在dwt文件中,类似<!-- #BeginLibraryItem "/library/xxx.lbi" --><!-- #EndLibraryItem -->这样代码中间的所有的代码 被替换成一个 {include file /library/xx.lbi}
3. Editable的region替换 在dwt文件中,类似 <!-- TemplateBeginEditable name="左边区域" --><!-- TemplateEndEditable -->中间的内容,都被 动态替换。
替换原理 首先是get_dyna_libs(theme, tmp)函数得到当前theme下
然后把每个<!-- TemplateBeginEditable name="区域名称" --><!-- TemplateEndEditable -->里面的内容全部替换。
4. 自定义函数等 如上面所说,想增加自定义函数必须修改cls_template中的get_val方法(可以继承),添加一些模板的自定义标签,需要修改cls_template 中的select方法,比如ECShop中自定义的insert、insert_script等函数就在此处。
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。