首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ecshop模板的原理分析

ecshop模板的原理分析

作者头像
Java架构师必看
发布于 2021-03-22 11:02:11
发布于 2021-03-22 11:02:11
7.6K0
举报
文章被收录于专栏:Java架构师必看Java架构师必看

模板的原理类似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模板的原理

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架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 模板的原理
  • ECShop模板的原理
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档