ecshop与java的关系_ecshop模板的原理分析
模板的原理类似Smarty/ECShop这类模板的原理如下图所示。1.首先是编译模板ECShop/SPHP
模板的原理
类似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文件中,类似这样代码中间的所有的代码 被替换成一个 {include file /library/xx.lbi}
3. Editable的region替换
在dwt文件中,类似
中间的内容,都被 动态替换。
替换原理首先是get_dyna_libs($theme, $tmp)函数得到当前theme下$tmp文件的所有动态区域,该函数读取数据库中的记录,按照后台设置的顺序排序。
返回的每个区块有三个参数,ID、Number、Type。
ID是标识,Number表示插入的个数,Type有1、2、3、4,分别代表:分类的商品、品牌的商品、文章列表、广告位。
然后把每个里面的内容全部替换。
4. 自定义函数等
如上面所说,想增加自定义函数必须修改cls_template中的get_val方法(可以继承),添加一些模板的自定义标签,需要修改cls_template 中的select方法,比如ECShop中自定义的insert、insert_script等函数就在此处。
本文由来源 21aspnet,由 system_mush 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
ecshop与java的关系_ecshop模板的原理分析相关推荐
- common-collections中Java反序列化漏洞导致的RCE原理分析
2019独角兽企业重金招聘Python工程师标准>>> common-collections中Java反序列化漏洞导致的RCE原理分析 隐形人真忙 · 2015/11/11 22:4 ...
- ecshop模板的原理分析
模板的原理 类似Smarty/ECShop这类模板的原理如下图所示. 1.首先是编译模板ECShop/Smart是利用PHP引擎,所以编译的结果是一个PHP文件,其编译过程就是 将分隔符{}替换成PH ...
- 一起进阶一起拿高工资!Java开发进阶-log4j2日志脱敏原理分析
本文首发于公众号[看点代码再上班],欢迎关注,第一时间获取最新文章. 大家好,我是tin,这是我的第5篇原创文章 本文讲述在考虑对业务系统代码入侵最小的情况下实现日志脱敏的方案原理.文章很长,包括了日 ...
- Java程序细胞工厂_Spring Boot实现原理分析
1.各种Bean 如果我们把Spring想象成人体,把Bean当做细胞的话,那么正是不同种类bean的相互协作才使得spring这个大工厂正常运行,有些bean做管理工作,有些bean为其它bean服 ...
- Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题。
Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题. 适用场景: 1.固定格式的W ...
- c java 的关系,c#与c、java的关系
c#与c.java的关系 C#从Java继承而来的特点 类:在C#中类的申明与Java很相似.这是合理的因为经验告诉我们Java模型工作得很好.Java的关键字import已经被替换成using,它起 ...
- Java通过泛型的模板类型实例化对象
Java通过泛型的模板类型实例化对象 最近自己研究了下mvvm框架,使用泛型的方式可节省很多代码,并且可以合并很多冗余代码,为了最大化的精简代码想到了通过泛型的type用反射的方式实例化对象,这样对象 ...
- freemarker 生成java_半自动化Java代码生成器[利用freemarker模板生成]
rapid-generator 半自动化Java代码生成器[利用freemarker模板生成] 增加一些定制和扩展, 修改为基于MAVEN的格式. 整体架构保持不变. 增加的特性为: 支持表名前缀去除 ...
- java类注释格式模板
java类注释格式模板设置 File -> Settings -> Editor -> File and Code Templates -> 右侧File标签 -> Cl ...
- Java使用POI通过模板生成Word
Java使用POI通过模板生成Word 前言 最近工作需要用到,所以记录下来以便查找. 一.概述 POI读写word使用的核心类是XWPFDocument.一个XWPFDocument代表一个docx ...
最新文章
- Mybatis复习笔记:4
- 给python初学者的最好练手项目-Python的练手项目有哪些值得推荐?(知乎转载)...
- PHP面试题:对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息
- ubuntu18.10终端的方块改成竖线
- attr和prop区别
- 小学生计算机课堂实践的重要性,小学《信息技术》有效课堂教学的实践与研究课题方案...
- promise的状态值_ES6中的Promise的用法总结
- 【MM模块】Inventory Management(IM)库存管理简介
- 运用mysql实现工资管理系统_企业工资管理系统的设计与实现(MySQL)
- 星起航跨境:美国市场8月份在线价格同比上涨0.4%
- Xcode 10.1 安装模拟器无反应:点击create 无反应
- 02 编程猫之小猫酷跑我设计
- 亲民地理38期-江西极顶武功山(上)
- 全球游戏收入将随着电影电视改编作品的不断增多而达到惊人水平 | 美通社头条...
- 44道JavaScript送命题
- Mysql初始化的命令
- linux内核带rt,Ubuntu18.04安装PREEMPT_RT实时内核
- 杭电2026——首字母变大写
- conda 离线安装本地python包,channel为 unkown 或 <path/to/file> 的问题 (本人在安装 tensorflow2.2.0 时遇到)
- 2022年危险化学品生产单位安全生产管理人员考试内容及危险化学品生产单位安全生产管理人员证考试
热门文章
- 单片机裸机 vs RTOS多线程
- jeffery0207博客导航
- linux系统的一点感触
- Pytorch Image Models (timm)
- Times New Roman vs Arial,期刊论文如何选择字体?
- 为什么苹果手机拍照会模糊?一起来看手机维修师如何解决
- 将分类图像转换为ERDAS可识别的专题图像(Continuous to Thematic)
- 电影《黑客帝国》的真正含义,人类进化的终结吗?
- 计算机科学与技术培养计划,计算机科学与技术专业培养方案(2017版).PDF
- 家庭软路由方案:3865U + ESXi6.7(OpenWRTiKuai) + 花生壳蒲公英P5 + 领势MX5300 + 群辉1621 做到国内国外分流、内网设备流控、内网穿透、异地组网