ecshop模板的原理分析

转载 2012年03月27日 11:53:27

模板的原理

类似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源码分析:smarty模板类

花了差不多3天半的时间,终
  • u012078682
  • u012078682
  • 2014年07月13日 11:17
  • 1325

ECshop模板各个文件详解

名称 类型 备注(作用或意义) 文件(目录)名可否更改 images 目录 存放模板图片目录 不可更改 library 目录 存放模板库文件目录 不可更改...
  • u010139093
  • u010139093
  • 2014年07月09日 10:28
  • 1828

ecshop dwt模版smarty支持加减乘除运算

ecshop dwt模版smarty支持加减乘除运算   /**  * ECSHOP 模版类  * ========================================...
  • zhangfeng1133
  • zhangfeng1133
  • 2016年05月05日 02:12
  • 3364

ecshop 模板标签

ecshop 采用 SMARTY模板引擎介绍 以下 是smarty 模板引擎的一些资料 Smarty 官方 ECSHOP模板引擎语法 1.foreach {foreach from=...
  • u010349417
  • u010349417
  • 2014年02月28日 11:41
  • 1579

ecshop 模板设置详解

新增模板index.php 主程序 index.dwt 就是模板一、复制主程序模板把根目录下 index.php 这个文件复制多一个文件,文件名自己起吧,我就更名为index_copy.p...
  • qq_21956483
  • qq_21956483
  • 2017年02月20日 12:13
  • 1115

ecshop模板中foreach的使用方法

1:foreach使用规则,他有以下几个参数 from ,item name iteration index        2:如何使用foreach循环 如果php要传递一个数组(如:...
  • zwfcan
  • zwfcan
  • 2013年08月15日 16:16
  • 2146

ECShop模板文件说明及如何修改

模板文件说明 style.css – 模板所使用样式表 activity.dwt – 活动列表 article.dwt – 文章内容页 article_cat.dwt – 文章列表页 art...
  • spencershi
  • spencershi
  • 2016年09月18日 14:32
  • 376

ecshop二次开发 结构分析和代码研究 呵呵

Ecshop包括的文件夹有admin、api、cert、data、images、includes、js、languages、plugins、temp、theme、wap、widget这些文件夹,和根目...
  • xllily_11
  • xllily_11
  • 2015年07月14日 11:47
  • 1380

ECSHOP模板经常用到的标签

ECSHOP模板经常用到的标签
  • pt1742395895
  • pt1742395895
  • 2016年04月20日 17:57
  • 654

Ecshop新增单页面模板的方法

【第一】在根目录创建一个php文件,命名为single.php[注:single.php乃我自定义的页面。 define('IN_ECS', true); require(dirname(__...
  • sweetyhyh
  • sweetyhyh
  • 2017年04月27日 14:38
  • 484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ecshop模板的原理分析
举报原因:
原因补充:

(最多只允许输入30个字)