模板的原理

类似Smarty/ECShop这类模板的原理如下图所示。

1.首先是编译模板
ECShop/Smart是利用PHP引擎,所以编译的结果是一个PHP文件,其编译过程就是

将分隔符{}替换成PHP的标准分隔符<?PHP ?>,
将$var替换成 echo $var; 或者print $var;
将其他的比如foreach和if等也替换成标准的PHP语法。
将{include file…}之类的则替换成标准的PHP的inlcude …
其余都是等效替换。

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 $smarty->select通过调用get_para来实现获取具体变量的值。

4) $smarty->get_val 而$smarty->get_para通过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下$tmp文件的所有动态区域,该函数读取数据库中的记录,按照后台设置的顺序排序。
返回的每个区块有三个参数,ID、Number、Type。
ID是标识,Number表示插入的个数,Type有1、2、3、4,分别代表:分类的商品、品牌的商品、文章列表、广告位。

然后把每个<!-- TemplateBeginEditable name="区域名称" --><!-- TemplateEndEditable -->里面的内容全部替换。

4.       自定义函数等
如上面所说,想增加自定义函数必须修改cls_template中的get_val方法(可以继承),添加一些模板的自定义标签,需要修改cls_template 中的select方法,比如ECShop中自定义的insertinsert_script等函数就在此处。

ecshop模板的原理分析相关推荐

  1. 分析Ecshop自带PayPal标准支付模块支付失败的原因 ecshop模板网 / 2014-07-06

    分析Ecshop自带PayPal标准支付模块支付失败的原因 ecshop模板网 / 2014-07-06 结论 如果卖家的PayPal帐号设置了不能设置自动返回,那么支付完成后将在10秒内自动跳转到购 ...

  2. 使用EasyExcel导出模板并设置级联下拉及其原理分析

    一.概述 项目中有时会遇到需要导出一个Excel模板,然后在导出的Excel中填充数据,最终再调用接口批量把Excel中的数据导入到数据库当中的需求. 其中级联下拉选择,手机号校验,性别校验等都是比较 ...

  3. java signature 性能_Java常见bean mapper的性能及原理分析

    背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换.赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils.BeanCopier.Dozer. ...

  4. ecshop入门第一步,替换ecshop模板的显示图片

    所有的都是模范默认模板来制作,所以应该参考默认模板的一些数据设置 1.找到themes\default\images文件夹下 screenshot.png 图片 默认如下: 在你的模板文件夹下新建一个 ...

  5. 【Android APT】编译时技术 ( ButterKnife 原理分析 )

    文章目录 一.编译时技术简介 二.ButterKnife 原理分析 二.ButterKnife 生成 Activity_ViewBinding 代码分析 一.编译时技术简介 APT ( Annotat ...

  6. vue双向数据绑定原理分析--Mr.Ember

    vue双向数据绑定原理分析 摘要 vue常用,但原理常常不理解,下面我们来具体分析下vue的双向数据绑定原理. (1)创建一个vue对象,实现一个数据监听器observer,对所有数据对象属性进行监听 ...

  7. airflow mysql_Airflow 使用及原理分析

    Airflow 入门及使用 什么是 Airflow?Airflow 是一个使用 Python 语言编写的 Data Pipeline 调度和监控工作流的平台. Airflow 是通过 DAG(Dire ...

  8. ecshop模板中使用php,使ecshop模板中可引用常量的实现方法

    比如$smarty.const.'常量',这个就不能用. 其实模板引擎原理上并不复杂,只是把一些模板标签替换为php中的函数,变量,语法结构罢了. 这次要在ecshop模板中加入引用常量的功能,只需在 ...

  9. MyBatis整合Spring原理分析

    目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...

最新文章

  1. tar命令-压缩,解压缩文件
  2. aspen串联反应怎么输入_【精】反应器(反应釜)的结构和工作原理
  3. [BZOJ3874/AHOI2014]宅男计划
  4. 并行开发 —— 第六篇 异步编程模型
  5. 关于JavaScript的数组随机排序
  6. mysql调优_MYSQL企业常用架构与调优经验分享
  7. 强化学习《基于策略 - PPO,TRPO,PPO2》
  8. 三十六、【减小apk包的体积】
  9. 火绒弹窗拦截_弹窗广告的克星:火绒安全软件图文使用教程
  10. linux操作系统源码分析,linux操作系统源代码详细分析.doc
  11. 三菱q系列plc连接电脑步骤_SERVER和三菱Q系列PLC通讯设置步骤
  12. 5面阿里,终获offer(Java后端)
  13. 函数式编程之Promise的奇幻漂流
  14. 支付宝当面付_小小的支付完成页上,微信和支付宝“打起来了”
  15. 新版标准日本语中级_第二十一课
  16. html之解决边框重合问题,鼠标移动文字上文字抖动问题
  17. 华为数通笔记-文件传输协议FTP
  18. CorelDRAWX4的VBA插件开发(二十四)复合选框组件与联合命名面板
  19. 测试用例设计方法与举例说明
  20. linux内核自旋锁解释,LINUX内核笔记:自旋锁

热门文章

  1. SpringCloud Feign声明式服务调用
  2. Latex使用简单总结
  3. mysql版本不一致会导致uuid_MySQL性能优化和高可用架构建议
  4. 有java基础的人学python_准备自学Python ,会java,有什么建议吗?
  5. sift论文_卷积神经网络设计相关论文
  6. 易扩展的SLAM框架-OpenVSLAM
  7. 在Ubuntu 14.04 64上安装gevent_zeromq-0.2.5
  8. 在CentOS 6.3 64bit上安装tsar并监控Apache Traffic Server
  9. Go 分布式学习利器(8)-- Go的函数
  10. ceph osd 由于“No space left on device” 异常down,通过扩容文件系统或者显式运行osd进程解决