ECShop开发系列教程-ECShop模板原理
来源:互联网 发布:晨风qq机器人网络词库 编辑:程序博客网 时间:2024/04/30 06:09
模板的原理
类似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->_ev
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模板开发教程完全攻略
- ECSHOP模板开发教程完全攻略
- ECshop 模板制作教程
- ECShop模板原理
- ECShop模板原理
- ECSHOP模板制作教程,ECSHOP标签大全,ECSHOP模板标签
- ecshop 模板开发总结
- ecshop模板教程-模板构造
- ECshop 模板制作教程(转)
- ECshop 模板制作教程(转
- ECshop 模板制作教程(转)
- ecshop模板的原理分析
- ecshop模板开发制作教程及常见问题解答
- ecshop模板
- ecshop Ecshop二次开发 ecshio模板设计开发(一)
- ECshop模板制作教程100问
- ECshop新手入门模板制作教程[转载]
- Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法
- redis - Java操作
- XML学习之Xml Schema:四、自定义简单类型
- AppDelegate 和 viewcontroller之间的关系
- C++泛型算法
- ECShop开发系列教程-ECShop模板原理
- oracle入门之第二章【限制性查询和数据的排序】
- Ogre手动绘制模型以及添加材质
- C++调用C编译的变量和函数为什么需要extern
- 在Java中使用ScriptEngine调用javascript
- oracle的rowid和rownumber
- 2011年浙江大学机械复试
- 关于机械系2011年硕士生复试有关事…
- 2011年浙大机械系制造所复试加权成…