`
syu
  • 浏览: 16623 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

阅读更多

本文提供的附件下载是:

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 本身。

分享到:
评论

相关推荐

    ASD-STE100-2021.pdf

    ASD-STE100-2021.pdf

    ste-zcr-preprocessing.rar_energy+zcr_short_zero crossing

    这个名为"ste-zcr-preprocessing.rar_energy+zcr_short_zero crossing"的压缩包似乎包含了与音频信号预处理相关的计算,特别是关注短期能量(Short Term Energy, STE)和零交叉率(Zero Crossing Rate, ZCR)。...

    STE-NVAN:时空有效的非本地注意力网络,用于基于视频的人员重新识别(BMVC 2019)

    这是针对基于视频的人员Re-ID的时空高效非本地视频注意网络(STE-NVAN)的重​​要实现。 在MARS数据集上,其第1级精度的基准版本达到90.0% ,ST效率模型达到88.9% 。 先决条件 python3.5 + (我们在1.0版下运行...

    STE-A-minimal-Meteor-Boilerplate:STE是Meteor框架的样板,适合刚开始使用Meteor的开发人员

    安装要创建您的项目,只需克隆此存储库: git clone https://github.com/96koushikroy/STE-A-minimal-Meteor-Boilerplate.git并开始编码!特质易于理解的文件结构。 准备使用代码段。 随附的软件包对于启动基本...

    Microsoft Visual C# Step by Ste - John Sharp.pdf

    根据给定文件信息,我们可以提取以下知识点: 1. 书籍名称:《Microsoft Visual C# Step by Step》(第九版),作者为John Sharp。这是一本针对C#编程语言的教学书籍,由Pearson Education, Inc....

    via-ste-sem2-project

    【标题】"via-ste-sem2-project" 暗示这是一个软件开发项目,可能是一个课程作业或者团队合作的项目,主要用于学习和实践Java编程语言。在软件工程领域,"Semester 2"通常指的是学年的第二个学期,这可能是项目的...

    STE100P中文资料

    ### STE100P中文资料解析与应用指南 #### 一、概述 STE100P,也称为STEPHY1,是一款专为10BASE-T和100BASE-TX应用设计的高性能快速以太网物理层接口。该设备采用先进的CMOS技术,提供了媒体独立接口(MII)以便...

    STE-App-Client:STEApp是控制Stereotech 3D5D打印机的应用程序

    STE App客户端 控制Stereotech 3D / 5D打印机的客户端应用程序 信息 STE App是一个应用程序,可以管理Stereotech 3D和5D打印机上的打印过程。 具体特点: 能够使用Wi-Fi / LAN在任何设备上工作 用于在打印机之间...

    中创中间件window安装包

    这款名为"InforSuite-AS-StE-10.0.1.3"的版本是中创中间件的一个具体版本,具有较高的版本号,意味着它在功能和性能上进行了持续优化和升级。 "免安装解压即可"的描述表明,这个软件包不需要传统的安装过程,用户只...

    eclipse-inst-win64 .zip

    Eclipse 是一个开源的集成开发环境(IDE),广泛用于Java编程,同时也支持其他语言如C++, Python等。"eclipse-inst-win64 .zip" 文件是Eclipse的Windows 64位安装程序的压缩包,它包含了运行在64位Windows操作系统上...

    STE - Simple Text Editor:一个简单但功能齐全的文本编辑器-开源

    STE 旨在成为一个简单的文本编辑器,就像 Windows 记事本一样,但“在类固醇上”,也就是说它... 因此,请随时下载源代码,尝试自己开发,如果您愿意,可以与我分享您的进展,并加入“开发团队”并帮助我开发应用程序。

    国产中间件-中创中间件相关手册.rar

    通常,这会涉及服务器环境的准备、中间件软件的下载与安装、许可证管理、服务启动和停止等步骤。同时,手册也会介绍如何进行性能调优,包括设置合适的参数、监控系统运行状态,以及在遇到性能瓶颈时如何进行调整。 ...

    以太网PHY芯片STE100P手册

    ### 以太网PHY芯片STE100P详解 #### 一、概述 **STE100P**,也被称作**STEPHY1**,是一款高性能的快速以太网物理层接口芯片,专为10Base-T和100Base-TX应用设计。该芯片采用先进的CMOS技术制造,旨在提供一个媒体...

    STE001驱动安装

    STE001驱动安装

    ste2010(IIC)128X64

    ste2010,lcd12864, PROGRAM of STE2010 (IIC) 128X64

    STE2102_V0.3.8_20060901.pdf

    标题和描述中提到的“STE2102_V0.3.8_***.pdf”指向一个技术文档,文件中描述的是一个名为STE2102的低功耗CMOS单芯片TFT控制器/驱动器。文档可能是一种产品规格说明书,这通常会包含产品的详细技术规格、特性和应用...

    STE Emploi APP-开源

    【STE Emploi APP-开源】是一个基于Java技术的Web应用程序,专为STE-FI培训中心的学生设计,旨在优化他们的就业搜索体验。此项目在Tomcat 6应用服务器上运行,展示了Java Web开发的强大功能和灵活性。作为一个开源...

    华伦HLB系列连接器.rar

    《华伦HLB系列连接器详解》 在电子工程领域,连接器是不可或缺的重要组成部分,它们扮演着设备间信号和电力传输的关键角色。华伦公司作为业界知名的连接器制造商,其HLB系列连接器因其优异的性能和广泛的应用场景而...

Global site tag (gtag.js) - Google Analytics