类似Smarty/ECShop这类模板的原理

1. 首先是编译模板

ECShop/Smart是利用PHP引擎,所以编译的结果是一个PHP文件,其编译过程就是将分隔符{}替换成PHP的标准分隔符,将$var替换

成echo $var; 或者print $var;将其他的比如foreach和if等也替换成标准的PHP语法。将{include

file…}之类的则替换成标准的PHP的inlcude …其余都是等效替换。

2. 其次是生成编译结果

编译结果是PHP文件,并且编译结果可以重用,所以这种文件会存到临时缓存目录里面。

3. 利用PHP引擎执行结果

ECShop的模板原理和上面基本类似,就是在编译的时候和Smarty模板有所修改,比较重要的有以下几点:

1. 模板的执行流程

$smarty->display $smarty->fetch返回HTML结果(所有模板)

$smarty->fetch_str (先编译成PHP、在给变量赋值、计算结果)

$smarty->smarty_prefilter_preCompile(编译成PHP)

$smarty->select(计 算每一个变量、表达式的结果,替换成标准PHP语法)

这一步是通过正则 实现的,匹配每一个{},将结果传给 $smarty->select,改方法通过switch/case逐一分析,替换成对应的表达式。

$smarty->get_para $smarty->select通过调用get_para来实现获取具体变量的值。

$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等函数就在此处。

\

mysql模板引擎有哪些_ecshop用的是什么模板引擎?相关推荐

  1. [vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解

    [vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解 模板引擎: 负责组装数据,以另外一种形式或外观展现数据. 优点: 可维护性(后期改起来方便): 可扩展性(想要 ...

  2. mysql断电不受影响db引擎_一次服务器断电,造成innodb引擎表(日志表)损坏的解决办法...

    1.mysql日志报错 innodb引擎提示数据库没有正常关闭,报innodb错误180112  0:49:28  InnoDB: Database was not shut down normall ...

  3. MySQL指定存储引擎命令_MySQL常用指令(2)——存储引擎

    MySQL常用指令(2)--存储引擎 查询MySQL支持的存储引擎 查询全部支持的引擎: show engines; ";"可以使用"\g"等价替换,而使用&q ...

  4. mysql学习【第2篇】:基本操作和存储引擎

    mysql数据库之基本操作和存储引擎 一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:studen ...

  5. MySQL数据类型、约束、外键、索引、存储引擎

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 MySQL中数据类型 整型 浮点型 字符串类型 枚举和集合 时间类型 timestamp YYYYMMDDHHMMSS(时间 ...

  6. MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎 1.存储引擎其实就是如何实现存储数据 ...

  7. freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧

    点击蓝字 轻松关注 CV 工程师你好,以下内容会让你感觉到不适,慎入! 在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民工,难免会总结一 ...

  8. 单本小说模板html,非常不错的DedeCMS单本小说模板

    商品属性 品牌织梦 语言PHP 数据库 移动端无 大小0.19 MB 规格无 授权无 源文件无 安装环境 安装服务 主机类型 伪静态 操作系统 安装方式 web服务 商品介绍 模板介绍: 非常不 ...

  9. 2Flask模板2控制代码块3静态文件4模板的继承

    -回顾 Flask是基于python并且依赖jinja2模板引擎的框架. 注册路由:客户端与Flask程序交互 用户在浏览器输入请求地址->request Flask程序接收请求,分析请求地址 ...

最新文章

  1. 华为atn980传输设备_注册开发者超200万!华为HMS加速全球布局,打造全场景智慧体验...
  2. java 7 g1_java7中G1垃圾收集器使用和流程总结
  3. Chrome开发者工具中Elements(元素)断点的用途
  4. BZOJ3029守卫者的挑战(概率dp)
  5. nmealib linux编译,nmealib的使用可以缩短GPS的开发周期
  6. 年终总结 | 从Oracle到MySQL大家最关注的竟然是...
  7. Better-scroll的安装及使用
  8. Mongodb 定时备份和恢复 1
  9. SharePoint 2010工作流系列(2):SharePoint Designer 2010中工作流的条件和操作概览
  10. Python使用matplotlib可视化模拟正弦余弦折线图
  11. 能源在线监测管理系统
  12. 英超俱乐部面临网络威胁,球队一起训练防御网络攻击
  13. Canon EOS Utility安装和使用说明
  14. 3D建模的通用文件格式
  15. Reincarnation HDU - 4622
  16. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,求该数
  17. 免费个人网站制作离不开参考
  18. Vue项目报错:sockjs.js?9be2:1603 GET http://10.179.116.126:8080/sockjs-node/info?t=166442
  19. “九章”问世了,RSA算法在量子计算机面前还安全吗?
  20. 【opencv450-samples】inpaint 使用区域邻域恢复图像中的选定区域

热门文章

  1. robocopy 备份_通过Robocopy+DOS 命令+Windows排程实现自动备份(将特定文件/目录备份至自动创建的以年月日命名的目标目录)...
  2. 3.1.6 OS之分页存储(页号、页偏移量等)
  3. java epoll select_Java 非阻塞 IO 和异步 IO
  4. stm32之TIM-高级定时器应用实例一(详细)
  5. Ubuntu 安装配置NFS网络文件系统服务器
  6. 乐鑫代理启明云端分享|ESP32驱动1.54inch(240*240)彩屏
  7. oracle数据泵还原命令,Oracle Linux环境中使用数据泵的形式还原Oracle数据库
  8. c语言编程思维训练50题,c语言逻辑思维训练题一
  9. 计算机设计目的和意义,程序设计的目的和意义.doc
  10. 计算机模块考试注意事项,常考计算机模块考试操作注意事项.doc