免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 41433 | 回复: 105
打印 上一主题 下一主题

[模板 下载地址更新] SmartTemplate(适用于企业级PHP开发的模板引擎) [复制链接]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-15 14:40 |只看该作者 |倒序浏览
企业级PHP开发,我们需要考虑:
    •        质量 (程序必须拥有一致性和稳定性)
    •        功能 (程序必须满足付费用户的所有功能需求)
    •        性能 (程序应该在一个可接受的严格规定的时间内处理用户请求)
    •        扩展性 (倘若硬件支持,程序使用用户必须有数量级的提升)
    •        持续发展 (不能超过被期望的开发预算)
    •        准时性 (程序必须在规定的时间交付)
    •        维护/支持费用 ()
    •        可用性
    •        ......
    •        等等



简短说明:
主要翻译http://www.smartphp.net/的SmartTemplate部分的内容,随着认识的逐次加深,我将适当调整翻译的结果。
如果你有任何建议,请告诉我,谢谢!

为什么推荐他:

    •        轻巧
    •        简单
    •        功能确实不错


访问网址:http://smarttemplate.yi.org/www.smartphp.net/
现在下载:




基本方法:
       • assign
       • append
       • output
       • result
       • use_cache
       • debug


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


[ 本帖最后由 HonestQiao 于 2006-7-22 18:20 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2005-08-15 14:43 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

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等等.

预览:
  1. Hello World!
复制代码


现在我们来看看达到我们期望的页面版式的HTML源代码:

HTML-源代码 (hello_world.html):
  1. <HTML>;
  2. <H3>;Hello World!</H3>;
  3. </HTML>;
复制代码


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

HTML-模板 (hello_world.tpl.html):
  1. <HTML>;
  2. <H3>;{TITLE}</H3>;
  3. </HTML>;
复制代码


使内容整合到模板,我们需要做如下工作:
    "        调用 SmartTemplate 类
    "        创建一个 SmartTemplate 分析器 对象
    "        告诉 SmartTemplate 要使用的HTML模板
    "        指定内容给关联的占位符
    "        处理模板
    "        输出结果

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

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

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

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2005-08-15 14:45 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

比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 个并发请求



[ 本帖最后由 HonestQiao 于 2006-7-23 16:07 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2005-08-15 14:47 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

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 ']设置

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2005-08-15 14:53 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

基本方法
SmartTemplate::assign()

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

例子1:标量赋值
  1. <?php

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

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

  5.     $template->;output();

  6. ?>;
复制代码

模板(template.html):
  1. <html>; {TITLE} </html>;
复制代码

输出:
  1. <html>; Sample Text </html>;
复制代码


例子2: 多个标量赋值
  1. <?php

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

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

  6.     $template->;output();

  7. ?>;
复制代码


模板(user.html):
  1. Name: {NAME}
  2. Group: {GROUP}
  3. Age:   {AGE}
复制代码

输出:
  1. Name:  John Doe
  2. Group: Admin
  3. Age:   42
复制代码


例子3: 使用数组给多个标量赋值
  1. <?php

  2.     $user  =  array(
  3.                  'NAME'  =>; 'John Doe',
  4.                  'GROUP' =>; 'Admin',
  5.                  'AGE'   =>; '42',
  6.               );

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

  8.     $template->;assign( $user );

  9.     $template->;output();

  10. ?>;
复制代码


模板(user.html):
  1. Name:  {NAME}
  2. Group: {GROUP}
  3. Age:   {AGE}
复制代码


输出:
  1. Name:  John Doe
  2. Group: Admin
  3. Age:   42
复制代码


例子4: 命名空间
  1. <?php

  2.     $admin  =  array(
  3.                    'NAME'  =>; 'John Doe',
  4.                    'AGE'   =>; '42',
  5.                );
  6.     $guest  =  array(
  7.                    'NAME'  =>; 'Roger Rabbit',
  8.                    'AGE'   =>; '16',
  9.                );

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

  11.     $template->;assign( 'admin', $admin );
  12.     $template->;assign( 'guest', $guest );

  13.     $template->;output();

  14. ?>;
复制代码


模板(user.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]”
  1. Admin Name: {admin.NAME}
  2. Admin Age:  {admin.AGE}

  3. Guest Name: {guest.NAME}
  4. Guest Age:  {guest.AGE}
复制代码


输出:
  1. Admin Name: John Doe
  2. Admin Age:  42

  3. Guest Name: Roger Rabbit
  4. Guest Age:  16
复制代码


例子5: 使用数组命名空间
  1. <?php

  2.     $users  =  array(
  3.                    'admin' =>; array(
  4.                        'NAME'  =>; 'John Doe',
  5.                        'AGE'   =>; '42',
  6.                    ),
  7.                    'guest' =>; array(
  8.                        'NAME'  =>; 'Roger Rabbit',
  9.                        'AGE'   =>; '16',
  10.                    ),
  11.                );

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

  13.     $template->;assign( $users );

  14.     $template->;output();

  15. ?>;
复制代码


模板(user.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]”
  1. Admin Name: {admin.NAME}
  2. Admin Age:  {admin.AGE}

  3. Guest Name: {guest.NAME}
  4. Guest Age:  {guest.AGE}
复制代码


输出:
  1. Admin Name: John Doe
  2. Admin Age:  42

  3. Guest Name: Roger Rabbit
  4. Guest Age:  16
复制代码


例子6: 命名空间, 3个部分
  1. <?php

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

  3.     $content['world']['europe']['germany']  =  'DE';

  4.     $template->;assign( 'top_level_domain', $content );

  5.     $template->;output();

  6. ?>;
复制代码

模板(template.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]”
  1. <html>; German TLD: {top_level_domain.world.europe.germany} </html>;
复制代码

输出:
  1. <html>; German TLD: DE </html>;
复制代码


例子7: 列表赋值
  1. <?php

  2.     $links  =  array(
  3.                    array(
  4.                        'TITLE' =>; 'PHP',
  5.                        'URL'   =>; 'http://www.php.net/',
  6.                    ),
  7.                    array(
  8.                        'TITLE' =>; 'Apache',
  9.                        'URL'   =>; 'http://www.php.net/',
  10.                    ),
  11.                    array(
  12.                        'TITLE' =>; 'MySQL',
  13.                        'URL'   =>; 'http://www.mysql.com/',
  14.                    ),
  15.                );

  16.     $template  =  new SmartTemplate('links.html');
  17.     $template->;assign( 'links', $links );
  18.     $template->;output();

  19. ?>;
复制代码

模板(links.html): 结构名称lnks对应数组
  1. <html>;
  2. <h3>; Sample Links </h3>;

  3. <!-- BEGIN links -->;

  4.     <a href="{URL}">; {TITLE} </a>;

  5. <!-- END links -->;

  6. </html>;
复制代码

输出:
  1. <html>;
  2. <h3>; Sample Links </h3>;

  3.     <a href="http://www.php.net/">; PHP </a>;

  4.     <a href="http://www.apache.org/">; Apache </a>;

  5.     <a href="http://www.mysql.com/">; MySQL </a>;

  6. </html>;
复制代码


Example 8: 使用数组于多个命名空间
  1. <?php

  2.     $title  =  'Sample Links';  //  Page Title

  3.     $target =  '_blank';        //  The Same Target for all links

  4.     $links  =  array(
  5.                    array(
  6.                        'TITLE' =>; 'PHP',
  7.                        'URL'   =>; 'http://www.php.net/',
  8.                    ),
  9.                    array(
  10.                        'TITLE' =>; 'Apache',
  11.                        'URL'   =>; 'http://www.php.net/',
  12.                    ),
  13.                    array(
  14.                        'TITLE' =>; 'MySQL',
  15.                        'URL'   =>; 'http://www.mysql.com/',
  16.                    ),
  17.                );

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

  19.     $template->;assign( 'TITLE', $title );
  20.     $template->;assign( 'TARGET', $target );
  21.     $template->;assign( 'links',  $links  );

  22.     $template->;output();

  23. ?>;
复制代码

注意:
TITLE 与 links..TITLE 使用不同的命名空间!
TARGET 不是 links 数组的成员. 如果使用在 BEGIN..END 块之内, 他必须被引用为 {parent.TARGET} 或者 {top.TARGET}.
其他可能的用法:
{top.TITLE}, {parent.parent.PAGE_ID}, {top.users.ADMIN}, 等等..
模板(links.html):
  1. <html>;
  2. <h3>; {TITLE} </h3>;

  3. <!-- BEGIN links -->;

  4.     <a target='{parent.TARGET}' href="{URL}">; {TITLE} </a>;

  5. <!-- END links -->;

  6. </html>;
复制代码

输出:
  1. <html>;
  2. <h3>; Sample Links </h3>;

  3.     <a target="_blank" href="http://www.php.net/">; PHP </a>;

  4.     <a target="_blank" href="http://www.apache.org/">; Apache </a>;

  5.     <a target="_blank" href="http://www.mysql.com/">; MySQL </a>;

  6. </html>;
复制代码

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2005-08-15 14:53 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

有价值

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
7 [报告]
发表于 2005-08-15 15:01 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

SmartTemplate::append()
void append ( string PLACEHOLDER, mixed CONTENT )
追加内容给模板占位符. 可以使用散列数组或者标量.
例子1 (列表):
  1. <?php

  2.     $page  =  new SmartTemplate('links.html');

  3.     $page->;append('links' =>; array(
  4.                                  'TITLE' =>; 'PHP',
  5.                                  'URL'   =>; 'http://www.php.net/'
  6.                              ));
  7.     $page->;append('links' =>; array(
  8.                                  'TITLE' =>; 'Apache',
  9.                                  'URL'   =>; 'http://www.apache.org/'
  10.                              ));
  11.     $page->;append('links' =>; array(
  12.                                  'TITLE' =>; 'MySQL',
  13.                                  'URL'   =>; 'http://www.mysql.com/'
  14.                              ));
  15.     $page->;output();

  16. ?>;
复制代码

模板(links.html): 列表追加为行
  1. <html>;
  2. <h3>; Sample Links </h3>;

  3. <!-- BEGIN links -->;

  4.     <a href="{URL}">; {TITLE} </a>;

  5. <!-- END links -->;

  6. </html>;
复制代码

输出:
  1. <html>;
  2. <h3>; Sample Links </h3>;

  3.     <a href="http://www.php.net/">; PHP </a>;

  4.     <a href="http://www.apache.org/">; Apache </a>;

  5.     <a href="http://www.mysql.com/">; MySQL </a>;

  6. </html>;
复制代码


例子2 (标量):
  1. <?php

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

  3.     $page->;append('TITLE' =>; 'Hello ');
  4.     $page->;append('TITLE' =>; 'World ');
  5.     $page->;append('TITLE' =>; '!');

  6.     $page->;output();

  7. ?>;
复制代码


模板(template.html): 标量为内容的追加
  1. <html>; {TITLE} </html>;
复制代码


输出:
  1. <html>; Hello World ! </html>;
复制代码

论坛徽章:
0
8 [报告]
发表于 2005-08-15 16:24 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

有意思。"他把html模板转换为php脚本以获得快速的运行速度"
问题
是否就是说,他需要往硬盘里写东西?权限如何处理?

期待尝试一次。

论坛徽章:
0
9 [报告]
发表于 2005-08-15 16:40 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

原帖由 "imbiss" 发表:
有意思。"他把html模板转换为php脚本以获得快速的运行速度"
问题
是否就是说,他需要往硬盘里写东西?权限如何处理?

期待尝试一次。


你说的东东,对应这个选项,转换后的php脚本会保存在这个目录下:

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

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
10 [报告]
发表于 2005-08-15 17:03 |只看该作者

[模板] SmartTemplate(适用于企业级PHP开发的模板引擎)

SmartTemplate:utput()
void output ()
解析模板并输出结果.
例子:
  1. <?php

  2.     $page  =  new SmartTemplate('template.html');
  3.     $page->;assign('TITLE' =>; 'Sample Title');

  4.     $page->;output();

  5. ?>;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP