找回密码
 注册账户
查看: 1965|回复: 0

SmartTemplate模板引擎

[复制链接]
admin 发表于 2007-8-19 00:40:33 | 显示全部楼层 |阅读模式
企业级PHP开发,我们需要考虑:

•         质量 (程序必须拥有一致性和稳定性)
•         功能 (程序必须满足付费用户的所有功能需求)
•         性能 (程序应该在一个可接受的严格规定的时间内处理用户请求)
•         扩展性 (倘若硬件支持,程序使用用户必须有数量级的提升)
•         持续发展 (不能超过被期望的开发预算)
•         准时性 (程序必须在规定的时间交付)
•         维护/支持费用 ()
•         可用性
•         ......
•         等等

基本方法:


     
• assign
    • append
    • output
    • result
    • use_cache
    • debug

模板流程控制:
    • if
    • else
    • elseif
    • begin ... end(块结构)

SmartTemplate 简介
SmartTemplate是一个支持大型WEB应用程序的模板引擎.
SmartTemplate有什么特色?
普通模板引擎工作方式: 你的PHP脚本指定一个HTML模板,指定动态内容并显示。模板分析器使用指派的内容替换模板内所有的占位符,然后显示给用户. 这意味着,每次你要输出一些内容,程序都要花上好多时间去进行字符串的处理和正则表达式的工作。
SmartTemplate 的工作方式类似模板编译,他把模板转换为可执行的PHP脚本,并且保存起来以备以后重用。当一个新的模板在第一次被使用时,The first time a new template is processed, 模板内所有的占位符被替换为简单的可输出指定内容的PHP代码元素。据个例子,模板片断 <H3>;{TITLE}</H3>;,将被转换为 <H3>;<?php echo $TITLE; ?>;</H3>;. 如果你指定内容给正确的变量, 将再也不需要进行模板分析了. 程序要做得仅仅是自己包含并执行便以后的模板. 这通常会戏剧性的减少模板引擎的运行时间.

SmartTemplate 支持:


" 普通变量替换 (字符串,等等)
" 重复的内容块 (嵌套数组/ BEGIN..END)
" 基本的逻辑控制结构 (IF..ELSEIF..ELSE)
" 可定制的扩展模块 (输出过滤, 大小写转换, 格式输出, 等等.)
" 模板编译 (HTML 模板被转换为可执行的PHP代码)
" 输出缓存 (重用输出页面从而提速你的程序)

让我们用一些简单的例子开始,告诉你如何使用 SmartTemplate:

通常的流程是先建立一个WEB页面,展示所需要的效果. 创建简单的页面版式可以使用一个网页编辑器,例如Dreamweaver或者Homesite. 为了获得更为友好的页面版式效果,可以使用一个专业的设计工具,例如Photoshop、 Paintshop Pro或者Gimp等等.

预览:

CODE:[Copy to clipboard]Hello World!现在我们来看看达到我们期望的页面版式的HTML源代码:

HTML-源代码 (hello_world.html):

CODE:[Copy to clipboard]<HTML>;
<H3>;Hello World!</H3>;
</HTML>;然后开始令人激动的一步: 分离内容和设计. 我们把HTML源代码之中的内容元素替换为模板占位符. 模板占位符被分配一个唯一的名称并且使用一个特有的标签包含起来,这样我们在随后的程序之中可以识别他们. 标题 Hello World! 被替换为一个叫做TITLE 的占位符. 我们是用大括弧来标记占位符, 似的我们的模板引擎可以发现: {TITLE}. 最后HTML模板如下:

HTML-模板 (hello_world.tpl.html):

CODE:[Copy to clipboard]<HTML>;
<H3>;{TITLE}</H3>;
</HTML>;使内容整合到模板,我们需要做如下工作:

"         调用 SmartTemplate 类
"         创建一个 SmartTemplate 分析器 对象
"         告诉 SmartTemplate 要使用的HTML模板
"         指定内容给关联的占位符
"         处理模板
"         输出结果

以下的PHP程序完成所需的工作:
hello_world.php:

CODE:[Copy to clipboard]<?php

     require_once "class.smarttemplate.php";
     $page = new SmartTemplate("hello_world.tpl.html");
     $page->;assign('TITLE', 'Hello World!');
     $page->;output();

?>;
就这么简单 – 我们的 Hello World 例程已经准备运行了.

比Smarty要快上8倍!
SmartTemplate 特别优化以提高速度.尽管 SmartTemplate 支持多种功能和函数, 但是在你的程序运行期间,仅仅很少一部分时间用在模板处理上.
他将使得你使用最少开发费用开发PHP程序,同时拥有闪电般的运行数度!

以下的基准测试,使用我们众所周知得模板引擎作为对比,来测试他们得运行速度。
测试过程分别使用包含1、20、200个对象被使用得模板。
基准测试 I: (Smarty vs. SmartTemplate)


•   Server: RedHat Linux, Apache 1.3.27, PHP 4.3.1
•   Pentium III - 1300 MHz CPU, 512 MB RAM
•   Apache 基准测试, 20 个并发请求




基准测试 II: (Smarty vs. SmartTemplate)

•   Server: RedHat Linux, Apache 1.3.27, PHP 4.3.1 + IonCube Accelerator
•   Pentium III - 1300 MHz CPU, 512 MB RAM
•   Apache基准测试, 20 个并发请求

SmartTemplate 配置

bool $reuse_code
设置是否保存编译后的模板代码,以备重用
如果设置否false,SmartTemplate会在每次模板使用时都重新编译模板

string $template_dir
模板文件目录,默认为当前目录
可使用全局变量$_CONFIG['template_dir']设置

string $temp_dir
模板编译保存目录,默认为/tmp/
可使用全局变量$_CONFIG['smarttemplate_compiled']设置
注意:确保PHP对该目录可写

string $cache_dir
输出缓存目录,默认为/tmp/
可使用全局变量$_CONFIG['smarttemplate_ cache']设置
注意:确保PHP对该目录可写

int $cache_lifetime
默认输出缓存周期
可使用全局变量$_CONFIG[' cache_lifetime ']设置


基本方法
SmartTemplate::assign()
void assign ( string PLACEHOLDER, mixed CONTENT )
or
void assign ( array CONTENT )
给模板占位符(PLACEHOLDER)或者列表(CONTENT)赋值. 可以使用散列数组或者标量

例子1:标量赋值

CODE:[Copy to clipboard]<?php

     $template   =   new SmartTemplate('template.html');

     $text   =   'Sample Text';
     $template->;assign( 'TITLE', $text );

     $template->;output();

?>;模板(template.html):

CODE:[Copy to clipboard]<html>; {TITLE} </html>;输出:

CODE:[Copy to clipboard]<html>; Sample Text </html>;例子2: 多个标量赋值

CODE:[Copy to clipboard]<?php

     $template   =   new SmartTemplate('user.html');

     $template->;assign( 'NAME',   'John Doe' );
     $template->;assign( 'GROUP', 'Admin'     );
     $template->;assign( 'AGE',    '42'        );

     $template->;output();

?>;模板(user.html):

CODE:[Copy to clipboard]Name: {NAME}
Group: {GROUP}
Age:    {AGE}输出:

CODE:[Copy to clipboard]Name:   John Doe
Group: Admin
Age:    42例子3: 使用数组给多个标量赋值

CODE:[Copy to clipboard]<?php

     $user   =   array(
                  'NAME'   =>; 'John Doe',
                  'GROUP' =>; 'Admin',
                  'AGE'    =>; '42',
               );

     $template   =   new SmartTemplate('user.html');

     $template->;assign( $user );

     $template->;output();

?>;模板(user.html):

CODE:[Copy to clipboard]Name:   {NAME}
Group: {GROUP}
Age:    {AGE}输出:

CODE:[Copy to clipboard]Name:   John Doe
Group: Admin
Age:    42
您需要登录后才可以回帖 登录 | 注册账户

本版积分规则

存档|黑屋|手机|网络实验室 本站服务器由美国合租以及IDCLayer国际数据提供!!!

GMT+8, 2026-6-8 22:37 , Processed in 0.011447 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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