ECShop模板原理
模板的原理
类似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中自定义的insert、insert_script等函数就在此处。
ECShop模板原理的更多相关文章
- ecshop 模板开发总结
ecshop 模板开发总结 模板标签 1.{$articleTitle|escape:"html"} 描述:用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码 ...
- PHP框架模板原理
PHP框架现在是一种很流行的东西了,很多朋友开发应用与网站都会选择一个PHP框架或模板了,下面我们来看看PHP框架是如何实现的吧. 本文主要来聊聊框架理论,但不针对任何一款框架,不过任何 ...
- 让ecshop模板支持php运算
让ecshop模板支持php运算在 cls_template.php 底部加入函数: /** * 处理if标签 * * @access public * @param string $tag_args ...
- smarty模板原理
smarty模板原理 模板主要是用来让前端和后端分离的,前台页面只是一个前台页面,后台页面用php代码写逻辑,写完逻辑拿到前台显示. 一.写法 一般需要以下:写3个页面: 1.显示页面aa.htm ...
- ectouch第七讲 之ECshop模板机制整理
网上的资源感觉还是有些用,可以看看,帮助理解,ECshop模板机制整理原文:http://blog.sina.com.cn/s/blog_6900af430100nkn8.html 一.模板引擎: E ...
- 最新仿梦芭莎免费ecshop模板
最新仿梦芭莎免费ecshop模板,该源码很真实地模仿了我们比较熟悉的梦芭莎购物网站的,我们知道该网站商城很受大家的喜欢的,而且界面也很漂亮的,希望能够帮到大家的学习. <ignore_js_op ...
- ECSHOP模板标签
模板制作修改经常用到ecshop模板标签: 页面关键字 {$keywords }页面标题 {$page_title}产品分类父分类列表 {foreach from=$categories item=c ...
- ECSHOP模板文件说明
最新ECSHOP 2.7.3完整的一套ECSHOP模板有一下构造 • 35个 .dwt文件(模板框架文件.可调用lbi库文件的主体文件) • 57个 .lbi文件(模板库文件,可通过后台库项目管理直接 ...
- ECshop模板机制
ECshop模板机制整理 模板机制 近期新项目涉及到ECshop的二次开发,趁此良机正好可以对闻名已久的ECshop系统进行深入了解.要了解一个系统,那么该系统的模板机制就是最重要的一环.相关整理如下 ...
随机推荐
- kettle的基本介绍
Kettle 主要内容: 一.ETL介绍 二.Kettle介绍 三.Java调用Kettle API 一.ETL介绍 1. ETL是什么? 1).ETL分别是“Extract”.“ Transform ...
- C#中POST数据和接收的几种方式
POST方式提交数据,一种众所周知的方式: html页面中使用form表单提交,接收方式,使用Request.Form[""]或Request.QueryString[" ...
- 【leetcode】 Permutation Sequence
问题: 对于给定序列1...n,permutations共同拥有 n!个,那么随意给定k,返回第k个permutation.0 < n < 10. 分析: 这个问题要是从最小開始直接到k, ...
- ASP.NET Web API 中的返回数据格式以及依赖注入
本篇涉及ASP.NET Web API中的返回数据合适和依赖注入. 获取数据 public IEnumerable<Food> Get() { var results = reop.Get ...
- MORMOT的数据序列
MORMOT的数据序列 mormot服务器回复客户端通过Ctxt.OutContent属性. 此属性的类型是:SockString. // property OutContent: SockStr ...
- C#编程(三十六)----------元组
元组 数组合并了相同类型的对象,而元组合并了不同类型的对象. .NET 4定义了8个泛型Tuple类和一个静态的Tuple类,他们用作元组的工厂. 元组是一种数据结构,通过逗号分隔 Tuple< ...
- 【JVM】linux上tomcat中部署的web服务,时好时坏,莫名其妙宕机,报错:There is insufficient memory for the Java Runtime Environment to continue.
=========================================================================================== 环境: linu ...
- WordPress主题开发实例:根据不同分类使用不同模板
分类实现效果: 点击"产品"相关分类,显示 否则显示 创建文件: category.php cat-news.php cat-product.php 由于点击分类时wordpres ...
- python测试开发django-13.操作数据库(增删改查)
前言 django的models模块里面可以新增一张表和字段,通常页面上的数据操作都来源于数据库的增删改查,django如何对msyql数据库增删改查操作呢? 本篇详细讲解django操作mysql数 ...
- Linux学习11-CentOS如何设置java环境变量
前言 之前用yum安装的java,现在想添加环境变量,yum安装的java路径在哪呢?如何找到安装的路径,把jdk添加到环境变量. 本篇详细讲解linux系统设置java环境变量 找到jdk路径 之前 ...