免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: HonestQiao
打印 上一主题 下一主题

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

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
31 [报告]
发表于 2005-12-13 10:01 |显示全部楼层
原帖由 ptsmy 于 2005-12-13 09:52 发表
版主,在你的推荐下我试用了一下smarttemplate觉得正是自己一直寻找的东西,比smarty小巧。但是我仔细看一下好像smarttemplate的cache有问题不能用,我在模板代码中也没有发现实现cache功能的代码,还请版主指点



稍后我去查看一下子。

应该是有的cache的。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
32 [报告]
发表于 2005-12-13 13:43 |显示全部楼层
原帖由 ptsmy 于 2005-12-13 09:52 发表
版主,在你的推荐下我试用了一下smarttemplate觉得正是自己一直寻找的东西,比smarty小巧。但是我仔细看一下好像smarttemplate的cache有问题不能用,我在模板代码中也没有发现实现cache功能的代码,还请版主指点



1. 这个是编译的中间文件目录,其中文件是PHP文件
$_CONFIG['smarttemplate_compiled']        = SMARTTEMPLATE_ROOT . 'smarttemplate_compiled/';
2. 这个是缓存的中间文件目录,其中文件是是HTML文件
$_CONFIG['smarttemplate_cache']                = SMARTTEMPLATE_ROOT . 'smarttemplate_cache/';
3. 缓存保存的时间
$_CONFIG['cache_lifetime']                        = 30*60*60*24;        //缓存一个月

注意:目录必须可被php读写。
然后在页面之中,$page->use_cache(),即可为当前的程序生成和使用缓存了。
一般情况时,在什么条件下,缓存会更新?可以是以下情况之一或者组合
1. POST表单提交了数据
2. WEB服务器或者客户浏览器强制更新
3. 缓存文件生存的时间达到了cache_filename
4. URI改变

可见,cache的使用是非常简单的。

$page->use_cache()也可以使用$page->use_cache($key)
$key可以是一个任意类型的php的变量/常量。
$key默认为空,你可以传递一个任意的参数进来作为缓存参数。

为什么使用$key?
很显而易见的使用,文章系统,showArticle.php?id=文章编号。
那么最简单的情况下,你可以使用$key=文章编号,来作为key,这样子可以缓存每一篇不同的文章。

[ 本帖最后由 HonestQiao 于 2005-12-13 17:51 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
33 [报告]
发表于 2005-12-13 14:06 |显示全部楼层
原帖由 dualface 于 2005-12-13 13:07 发表
Smart Template 到底有用没用?

我认为基本上没什么实用价值,原因如下:

第一:功能太简单。既无法提供 Smarty 那样的扩展能力,又缺乏更新版本支持和各种插件;

反方意见:我根本用不上那么多功能啊, ...


你的意见很好,不过我仅仅针对你的这三个意见本身做一些探讨:

Smart Template 到底有用没用?

我认为基本上没什么实用价值,原因如下:

第一:功能太简单。既无法提供 Smarty 那样的扩展能力,又缺乏更新版本支持和各种插件;

反方意见:我根本用不上那么多功能啊,我干嘛要用 Smarty 这个庞然大物?
我说:那你不如直接用 php 做模板得了,还要什么模板引擎啊,多此一举!
反方意见:可我要允许用户自行修改模板,这个时候嵌入 PHP 代码很危险哦!
我说:如果你的系统是允许普通用户修改模板,那么这个时候应该使用模板系统,
不过不是用 Smart Template,而是 Smarty!

首先,Smarty 提供了丰富得多的功能。
其次,你可以开发各种插件,把原本需要好几行的模板代码简化成一个标签,
例如我开发的一套 Smarty 插件,允许使用下面形式的标签:
<% CMSEntryBody title="我的第一次" %>
就会输出标题为“我的第一次”这篇文章的内容。这样用户不但在模板里面就能
输出内容,还能控制输出什么。

这些用 Smart Template 是做不到的哦!


探讨:
关于首先,这一点Smarty作为一个庞然大物,倘若没有如此优势,势必是一定的
关于其次,SmartTemplate的插件其实相当的简单和容以开发。
关于例子,SmartTemplate本身就有load_config,把你这样子类似配置的部分,直接使用一个配置文件了。

第二:根本不存在什么更容易学习的神话;
反方意见:不都说了 {TITLE} <!-- IF --> 看上去比
<?php echo $title ?> <?php if ?> 更简单吗?

我说:幻觉而已!对程序员来说,模板自身的语法反倒增加了学习成本。
而对于美工来说,有必要学么?

如果要美工掌握如何嵌入循环、判断这些,和让他搞懂 <?php if else ?> 完全没区别。
可实际工作中,有几个美工能嵌代码啊?还不就是做图、切图、做成页面,
然后由程序员来嵌代码。

有人要说了:你可以教啊,教会了美工,他自己就能嵌代码了!你就解放了!
我要说:解放个屁啊!

嵌代码总要预览一下效果吧?你还得帮他在工作机上安装配置 php、mysql 这些。
如果你改了数据结构,还要记得同步到他的机器上。
最后,他不看程序能知道页面里面该嵌什么变量?
所以他还得不停的问你这个嵌什么、那个嵌什么。

如果他能看懂程序,那他还是美工么?

所以说,让美工嵌代码只是一种幻想而已!


探讨:
对于程序员而言,使用任何一个模板系统,语法他都要学,这个并不是SmartTemplate的错或者缺点,但是你拿来专门说。
对于美工而言,{TITLE}这样子的方式(甚至{文章标题}),他可以很容易的看到实际的效果,而<??>的方式,势必要差一些。
所谓让美工嵌代码,那当然是幻想。但是程序和美工是可以很好的协作分工的。

第三:Smart Template 的有些特征难以使用
像 Smart Template 的 cache 功能就特别难用,在面向对象的体系中如果不修改
Smart Template 自身,几乎无法将 Smart Tempalte 集成到系统中来。


探讨:cache其实很简单。


其他还有些细节问题也设计得不好,越用越不爽。

我以前觉得 Smart Template 小巧玲珑,挺方便的。后来做点复杂的东西才知道根本
不是那么回事。不但要改 Smart Template 自身,还要补充很多扩展功能,累啊!

所以我现在要么用 php 作模板,要么用 smarty。


探讨:
你可以说说,Smarty之中,那些非常非常复杂富有特色的部分。
也需我们可以吸取Smarty有特色而且实用的部分。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
34 [报告]
发表于 2005-12-13 14:23 |显示全部楼层
原帖由 ysixin 于 2005-12-13 14:17 发表
模板->编译->缓存?
有点奇怪的感觉
如果直接采用输出php变量,取消assign那一步如何?



为什么这么做?
如果你确实要这么做,那么你完全不需要类似的模板系统的。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
35 [报告]
发表于 2005-12-13 14:57 |显示全部楼层
不知道你是真的不知道,还是假的不知道,因为你都知道去看类的源代码而且找到了函数所在:

  1. $this->cache_filename  =  $this->cache_dir . 'cache_' . md5($_SERVER['REQUEST_URI'] . serialize($key)) . '.ser';
复制代码

这不是很明确给出了$this->cache_filename的生成方式么?
$this->cache_dir来自于$_CONFIG['smarttemplate_cache']的设置,你这个设置不正确,是无法缓存的哦。

ob_start( array( &$this, 'cache_callback' ) );这个不就是调用cache_callback()来生成缓存么?

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
36 [报告]
发表于 2005-12-13 17:53 |显示全部楼层
奇怪,我就是把目录的权限设置为777,那么我就可以使用了。

你可以这么测试:
function use_cache($key)
{
   ...
}

你在每一个判断的地方,用die("test");来测试,看看你到底到了什么地方。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
37 [报告]
发表于 2005-12-13 22:22 |显示全部楼层
你是什么WEB服务器?
IIS还是Apache?

在IIS上面,我遇到过类似的ob_start没有起作用的问题。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
38 [报告]
发表于 2005-12-14 09:26 |显示全部楼层
or when the output buffer is flushed to the browser at the end of the request.

你的程序在请求完成退出的时候,它应该会自动调用的。

你把它加到:output()之中的unset ($_top);之前,应该就可以了。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
39 [报告]
发表于 2007-04-05 09:37 |显示全部楼层
原帖由 傲枭 于 2007-4-5 09:01 发表
以前的时候看见过没有太在意,今天要用了又回来看了一下,太好了啊!
要是有chm的手册就更好了啊


好主意,窝整一个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP