设为首页 收藏本站
查看: 507|回复: 0

[经验分享] [分享]STE---轻型PHP模板引擎下载

[复制链接]

尚未签到

发表于 2017-4-2 11:27:56 | 显示全部楼层 |阅读模式
  本文提供的附件下载是:
  http://syu.iteye.com/topics/download/4a0e681f-6fda-358f-ae51-401a8f968eae
  http://syu.iteye.com/blog/372544
  特别注明:
  STE是基于SmartTemplate的修改版本,其在SmartTemplate的设计上做了大量修改,以及使用PHP5的语法进行了重写. Smarttemplate是一套较轻型的PHP模板处理引擎,相对于流行的Smarty,它更加小巧灵活,但功能却仍然强大。重要的是它的设计思想不像其它模板处理引擎那样追求大而全。而在于尽量减少页面内的逻辑流程,将模板与最终视图之间的差异性降到最低。这也是我这么多年来业直使用Smarttemplate而不是smarty的原因。(两者之间的差异比较,请访问我的另一篇博客 http://blog.csdn.net/syu/archive/2008/12/12/3502884.aspx)
  修改的必要性:
  SmartTemplate很久没有更新了,第一次使用它是大概在2002年左右,直到2008年它还是当初那个样子 :-( 而在这些日子里,除去PHP本身发生了很大的变化,我在很多次使用中也认为它的功能不足以满足我的需求。因此决定在某一个晚上花费一点休息时间将它进行重构。
  修改的部份:
  1. IF 条件进行了改写,现在你可以在IF里使用多种判断条件,比如 and 或者 or,尽管这在其它模板引擎里早已实现。但原来的Smarttemplate仅仅支持 等于 或 空值判断。
  2. BEGIN 循环处理进行了改写,在BEGIN里除了注册的变量单位外,还可以完全使用 {_KEY},{_VALUE},{_ROWCNT},{_ROWBIT}这样的内部变量。
  3. 增加了$_SESSION,$_SERVER,$_GLOBALS的PHP超级全局变量访问形式,可以不用注册而直接在页面中使用类似{SESSION.username}的方式访问一些频繁使用的超全局变量。
  4.增加了INCLUDE语法的模板嵌套。这样一些多个页面中使用的相同部份,比如头部和尾部,就可以被直接嵌套。而不用在每个页面中写入相同的代码。
  5.改写了smarttemplate的扩展处理模式,可以在页面中使用任何已注册的函数,或者自动装载为smarttemplate准备的扩展插件。在页面中可以直接用{date:'Y-m-h'}的形式显示当前时间,相当于<?php echo date('Y-m-h');?>
  6.改写了编译机制和缓存机制。
  7.使用PHP5.3语法以及OOP进行重写。
  8.去掉了debuger部份,并将原来的两个文件合并成为一个,减少了一次include.
  9.优化了不少结构和算法,增加了加载配置方法,改写了原有的读取$_CONF数组配置的方式,减少了冲突的可能。
  10.实在想不起来了。
  使用说明:
  一,生成实例对象、指定模板页面、加载配置、输出页面
  <?php
  include('ste.class.php');
  $tpl = new ste( ) ; //只实例化对象。稍后指定模板页面
  //$tpl = new ste('tpl.html'); 实例化的同时,指定模板页面
  $tpl -> LoadConfig(array('compiled_dir'=>'./tpl_compiled/','template_dir' =>'./tpl/')); //加载配置
   $tpl -> output();
  /*
   其中配置项包括:
   template_dir -------------- 模板文件的默认存放目录。
   compiled_dir-------------- 编译后模板文件的存放目录
   ext_dir -------------- STE扩展插件目录
   cache_dir -------------- 缓存文件生成后的存放目录
   cache_lifetime-------------- 缓存文件的生命周期,秒为单位
   */
   ?>
  二,变量注册,追加以及页面中的表现形式
  <?php
  .........
    /*
   $hi= 'hello!',单变量注册,在模板中可以用 {hi}来显示
   */
  $tpl -> assign('hi',$hi);
   /*
   $arrayData=array('a'=>1,'b'=>2) ,数组变量集体注册,页面中可用{a},{b}来显示元素
  */
  $tpl -> assign($arrayData);
   /*
   $data = array(0=>array('id'=>1,'name'=>'a'),1=>array('id'=>2,'name' =>'b'));
   注册循环数组,页面中可用BEGIN语法循环输出
   */
  $tpl -> assign('data',$data);
   /*
   $data 可以等于数组,也可以是单变量。append方法将数据追加到原有注册标签中。
   如果原有注册标签是单变量,新值将以(.)形式追加。如果原有标签是数组,将以([])形式追加
   */
  $tpl -> append('data',$data);
  三,逻辑控制和循环
  在页面中进行逻辑控制。使用 <!-- IF ELSE ELSEIF ENDIF -->方式。
  <!-- IF {a}>100 -->
  显示一段HTML代码
  <!-- ELSEIF {a}>20 -->
  显示另一段HTML代码
  <!-- ELSE -->
  显示其它的HTML代码
  <!-- ENDIF -->
  在页面中使用循环输出,使用<!-- BEGIN 注册变量名 --> <!-- END 注册变量名 -->方式 .
  //一维数组循环:$tpl->assign('test',array(1,2,3,4,5));
  <!-- BEGIN test -->
  {_VALUE}
  <!-- END test -->
  //带键值的一维数组循环:$tpl->assign('test',array('a'=>1,'b'=>2,'c'=>3));
  <!-- BEGIN test -->
  {_KEY}的值是:{_VALUE}
  <!-- END test -->
  /* 二维数组循环(比如从数据库中取出的数据):
   $tpl -> assign('test',array(0=>array('id'=>1,'name'=>'a'),1=>array('id'=>2,'name' =>'b')));
   */
  <!-- BEGIN test -->
  {id}对应的name值是:{name}
  <!-- END test -->
  循环体中内置的还有:
  {_ROWCNT} ----- 从1开始计数的自增变量。可用于在列表中显示顺序。
  {_ROWBIT}----- 从0到1的替换值。第一行是0,第二行是1,第三行是0,以此类推。用于两列间不同css样式的值
  四,页面模板嵌套
  STE中可以自由嵌套模板。使用方法为 <!-- INCLUDE 模板名 -->
  比如一个网站模板,我们可以把公用的头,尾部份分离出来供许多其它页面模板调用。
  <!-- INCLUDE head.html -->
  .................其它模板代码
  <!-- INCLUDE foot.html -->
  值得注意的是,引用了嵌套页面的主模板,在被嵌套的页面代码发生了改变时,需要手工清理一下编译缓存,重新编译方能生效。这样做是为了加快速度。STE的缓存机制虽然能够在模板发生改变时自动重新编译,但凡是引入了嵌套的模板,为了避免每次使用都重新读入嵌套页面,会在编译时将嵌入页面的所有代码读入,与自身成为一体。
  五,页面中使用函数以及STE插件
   在页面中,你可以通过{函数名:参数1,参数2...}的形式任意引用PHP内置的、或者你自身定义的函数。并且能够自由管理参数(原有的smarttemplate只允许使用最多两个参数)。比如,需要在页面中显示一个当前时间时,可以使用
  {date:'Y-m-d'}这样的方式。
  在参数表中,允许使用的参数包括
  1 字符串 使用单引号或者双引号连接,但不接受诸如 (.)这样的操作符
  2 数学 直接的数学字符,比如 123
  3 注册的变量名 比如$tpl ->assign('var',123);后,在页面中可以使用 {userfunc:var}的形式。
  当引用的函数名不存在时,会自动的加载STE插件目录下的文件(根据配置中ext_dir目录读取)。比如当引用 {usericon:uid}时。如果usericon函数没有被定义。STE将自动找寻ext_dir目录中 ste_ext_usericon.class.php文件,并将其读入,在这个文件中,应该有关于usericon函数的定义。
  当不需要将一个函数的结果输出时(例如函数体内部本身就带有输出。而函数返回的仅仅是一个True或False)时,可以在函数名前面加上 (^)符以关闭输出,比如 {^usericon:uid}
  这里有一点例外的说明是:我不是很赞成在页面中放置太多的函数体以及逻辑判断语句。我一直认同的观点是:
  应该尽量减少模板与最终呈现页面之间的差异,模板中引入的尽量保证是变量而不是流程。大量的流程处理请交给程序来执行。这样才能最大化的符合MVC的三层分离思想。在一个模板中大量使用逻辑,或者大量使用函数的话,请问与直接在模板中直接写<?php 又有什么区别呢?再强大的PHP模板引擎也强不过php 本身。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359064-1-1.html 上篇帖子: PHP的服务器数组变量 $_SERVER 下篇帖子: PHP : echo和print的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表