【原创】推荐一个模板引擎 - templateengine

一直都在使用StringTemplate模板引擎,虽然使用方便,但是功能实在太弱太弱,准备放弃使用StringTemplate。刚好碰巧发现了另外一个开源的模板引擎,就是今天要介绍的TemplateEngine 2,功能非常强大。

先看看他的语法吧

Thank You for your order #order.billFirstName# #order.billLastName#.
<br>
Your Order Total is: #format(order.total, "C")#
<br>
<ad:if test="#order.shipcountry isnot "US"#">
Your order will arrive in 2-3 weeks
<ad:else>
Your order will arrive in 5-7 days
</ad:if>

TemplateEngine2.0 主要功能

Template Engine主要是两个类在使用:Template 和TemplateManager,Template 是一个基本模板, TemplateManager是扩展的模板

用Template或TemplateManager 是非常容易创建模板的

Template template = Template.FromString(string name, string data)
Template template 
= Template.FromFile(string name, string filename)

用TemplateManager

TemplateManager mngr = new TemplateManager(Template template);

或者

TemplateManager mngr = TemplateManager.FromFile(string filename);
TemplateManager mngr 
= TemplateManager.FromString(string template);

当调用FromString 方法时,string是模板的代码。这个方法能动态的加载文本到template中。FormFile是指调用的模板文件。

TemplateManager有个属性SetValue可以用来设置模板的变量和变量的内容

mngr.SetValue("xx""xxxxxxxxxxxxxx");

输出模板

Response.Write(mngr.Process());

这一切都非常的简单。

函数列表

equals(obj1.obj2)
比较两个变量是否一样,返回bool型
notequals(obj1,obj2)比较两个变量是否不一样,返回 bool型 也可以 not(equals(obj1,obj2))
iseven(num) 测试是否是偶数
isodd(num)测试是否奇数
isempty(string) 测试字符串是否为0
isnotempty(string) 测试字符串是否大于0
isnumber(num) 测试是否为整型
toupper(string) 转化成大写
tolower(string) 转化成小写
isdefined(varname) 测试变量是否有定义
ifdefined(varname, value) 返回 value 如果varname 是有定义的,
特别有用:#ifdefined("name", name)# 将输出value 如果varname没有定义,其它情况不输出
len(string)返回字符串长度
tolist(collection, property, delim) 简单的输出列表

例1:


ArrayList list = new ArrayList();
list.Add(
"one");
list.Add(
"two");
list.Add(
"three");
template.SetValue(
"mylist", list);

你的模板内容:
#toList(mylist, " & ")#
输出:one & two & three

例2:

list.Add(new Customer("Tom""Whatever"));
list.Add(
new Customer("Henry""III"));
list.Add(
new Customer("Tom""Jackson"));
template.SetValue(
"mylist", list);

模板内容:
#toList(mylist, "firstName", ",")#
输出:Tom,Henry,Tom

函数列表

snull(obj)
 测试是否为空
not(boolvalue)  返回not(!)的bool型
iif(booleanExpression, iftruevalue, iffalsevalue) 如果booleanExpression为真,输出iftruevalue,否则输出iffalsevalue
format(object, formatstring)格式化字符串,相当于ToString(formatstring)

例子:

#format(total, "C")#
will output: $1,208.45

函数列表

trim(string)
 去除前后空格
filter(collection, booleanproperty) 返回一个新的组所有符合booleanproperty要求的
gt(obj1,obj2) 如果 obj1 > obj2 返回为真,否则为false
lt(obj1,obj2) 如果 obj1 < obj2 返回为真,否则为false
compare(obj1, obj2) 如果 obj1<obj2 返回-1 obj1=obj2 返回0 如果obj1>obj2 返回1
or(bool1,bool2) 有一个为真返回就是true
and(bool1, bool2) 两个都为真时返回true
comparenocase(string1, string2)  相等时返回为true 否则为false
stripnewlines(string) 返回 所有\r\n 用space 代替的字符串
typeof(object) 返回object 类型,如typeof("abcd234") 返回 "string" typeof(3) 返回 int
cint(value) 返回整数 等同于Convert.toInt32()
cdouble(value) 返回双精度
cdate(value) 返回一个datetime 型
createtypereference(type) 引用一个静态的类型,但格式必须是<ad:set tag

例:
#createtypereference("System.Math").Round(3.39789)#
#createtypereference("System.Math").PI#
or
<ad:set name="MyMath" value="#createtypereference("System.Math")#" />
#MyMath.Round(3.3)#
#MyMath.PI#

还支持c#内置的一些方法,如还可以这样使用
#xx.Length#

还有很多你意想不到的效果,赶紧来试用吧。

官方地址:http://www.adersoftware.com/index.cfm?page=templateEngine2
0
0
(请您对文章做出评价)
« 上一篇:【原创】页面级缓存简单使用教程

posted on 2008-07-07 21:31 菜菜灰 阅读(3910) 评论(40)  编辑 收藏 网摘 所属分类: .Net 2.0

评论

#1楼 2008-07-07 22:21 SOSOS's BLog      

好像很不错的样子!   回复  引用  查看    

#2楼 2008-07-07 22:36 高海东      

谢谢分享,学习下   回复  引用  查看    

#3楼 2008-07-07 22:43 簡簡單單..      

弱弱问问, 有什么用?   回复  引用  查看    

#4楼 2008-07-07 22:48 weidagang2046      

和NVelocity相比如何?   回复  引用  查看    

#5楼 2008-07-07 22:58 谦虚的天下      

能否介绍一下入门使用?   回复  引用  查看    

#6楼 2008-07-07 23:21 seo[未注册用户]

个开源的模板引擎,   回复  引用    

#7楼 2008-07-07 23:22 seo[未注册用户]

串是否大   回复  引用    

#8楼 2008-07-07 23:26 亚历山大同志      

感觉现在的模板引擎越来越像重新构建一套语言体系出来,那么反过来看看aspx页面本身是不是也就是一个模板系统呢?   回复  引用  查看    

#9楼 2008-07-07 23:52 XeonWell      

我记得有个问沫模板引擎好像是修改自它的   回复  引用  查看    

#10楼 2008-07-08 07:25 ffffffffffffffff[未注册用户]

唯一不爽的地方就是它使用#符号,这样的话如果你在页面上有#开头的颜色的话,就会报错。   回复  引用    

#11楼[楼主] 2008-07-08 08:12 菜菜灰      

@谦虚的天下

入门的话看上面几行代码就行了

@亚历山大同志
呵呵,说的很对,不过模板引擎写出来是给前台用户和美工使用的,aspx的机制会很难接受。

@XeonWell

问沫的就是修改自他,我也是看了问沫才知道这个末班引擎的

@ffffffffffffffff

发现了一个问题了,不过反正都开源,这个可以修改一下。
  回复  引用  查看    

#12楼 2008-07-08 08:19 kwklover      

看语法,应该是AderTemplate吧?

我之前也写过一片文章:模版引擎AderTemplate源代码分析笔记
http://www.cnblogs.com/kwklover/archive/2007/07/12/815509.html


我已经讲它实际应用到一个地方门户的CMS系统中了。

@ffffffffffffffff
这个不是bug,而是#是AderTemplate特殊的符号,你需要转义比如
#234 写成##234就不会出错了
  回复  引用  查看    

#13楼 2008-07-08 08:51 kiler      

@亚历山大同志
aspx页面算不得模板,毕竟里面有控件,控件是超出这个模板文件之外的东西。倒是asp页面可以说是模板。
  回复  引用  查看    

#14楼[楼主] 2008-07-08 08:53 菜菜灰      

@kwklover

看了你的文章,研究的很透彻,向你学习。另外你里面的代码无法下载。
  回复  引用  查看    

#15楼 2008-07-08 08:55 sssssss[未注册用户]

@kiler
控件解释也是子模板的范畴,NV也有这样的功能.

其实由castle team维护的NV已经很不错也稳定为傻不去用.
  回复  引用    

#16楼[楼主] 2008-07-08 08:59 菜菜灰      

@sssssss

NV 对html可视化支持的不是太好,而TemplateEngine对可视化支持非常好,原因在于使用TemplateEngine使用了类似的结构<ad:if test="#order.shipcountry isnot "US"#">,而可视化就会忽略这里的代码。
  回复  引用  查看    

#17楼 2008-07-08 09:16 阿拉伯顶峰      

没了解过,傻傻的问一句:这个模板引擎是帮助aspx动态页面生成html等静态页面的吗?   回复  引用  查看    

#18楼 2008-07-08 09:45 S.Sams      

NV通过二次封装完全可以达到这样的处理效果. 而且NV已经相当稳定了, 为什么不用现成的.   回复  引用  查看    

#19楼[楼主] 2008-07-08 10:15 菜菜灰      

@阿拉伯顶峰

可以的

@S.Sams

非常感谢
  回复  引用  查看    

#20楼 2008-07-08 10:24 小狼壮壮      

感觉不如 NV。 相比之下,语法更复杂,不容易被美工、项目实施人员接受。而且感觉在列表循环显示的控制上不如NV灵活。   回复  引用  查看    

#21楼 2008-07-08 10:32 aysun[未注册用户]

@小狼壮壮
弱弱的问一下,NV是什么?都没用过!
  回复  引用    

#22楼[楼主] 2008-07-08 10:35 菜菜灰      

@小狼壮壮

语法复不复杂我觉得应该是个人观点,其实我感觉NV语法会复杂些。


@aysun
是NVelocity
  回复  引用  查看    

#23楼 2008-07-08 10:54 云の世界      

--引用--------------------------------------------------
kiler: @亚历山大同志
aspx页面算不得模板,毕竟里面有控件,控件是超出这个模板文件之外的东西。倒是asp页面可以说是模板。
--------------------------------------------------------
那asp.net mvc的模板是?
看是不是模板不要光看表面。
  回复  引用  查看    

#24楼 2008-07-08 13:58 BinKing      

@菜菜灰
嗯,是可以修改。我是说,你发现这个问题么?如果真有问题,修改了共享一下:-)
  回复  引用  查看    

#25楼[楼主] 2008-07-08 14:00 菜菜灰      

@BinKing

我也是刚用上,OR的方法可以自行修改。
  回复  引用  查看    

#26楼 2008-07-08 15:50 无聊冒个头[未注册用户]

为什么要使用模板引擎?如果像商业软件一样不是针对广大的普通用户,制作好的模板签入工具,像国内的CMS动易等一样,使用模板引擎只会增大大家的工作量而已,何必....还不如用ASPX得了
今天的首页有2篇文章讲模板引擎的,昏迷。。。
  回复  引用    

#27楼 2008-07-08 16:08 crystal sun      

建议去看一下nVelecity的模板引擎,这个功能更强大,是从java转换过来的,使用的方法跟java版本的基本一致。   回复  引用  查看    

#28楼 2008-07-08 19:12 Zealic      

SEE :
SharpTemplate: (syntax configutation : velocity、ProMeshHtml、XML and more)
http://www.codeplex.com/SharpTemplate
  回复  引用  查看    

#29楼 2008-07-08 22:59 airwolf2026      

模板引擎?mark下...不知道做啥的...   回复  引用  查看    

#30楼 2008-08-03 12:48 king2003[未注册用户]

@S.Sams
怎么封装呀?
  回复  引用    

#31楼 2008-08-18 14:15 李路平      

能给个TemplateEngine 2的下载地址和,一些入门步骤吗?谢谢   回复  引用  查看    

#32楼 2008-08-20 14:57 igaofen      

关注   回复  引用  查看    

#33楼 2008-08-20 14:58 igaofen      

TemplateEngine 能读取模板的属性吗,比如显示多少条记录怎么设置   回复  引用  查看    

#34楼[楼主] 2008-08-21 09:07 菜菜灰      

@igaofen

可以通过自定义函数实现,TemplateEngine可以很方便的实现扩展。
  回复  引用  查看    

#35楼 2008-10-02 22:05 omeweb[未注册用户]

嘿,您好
我也在用这个引擎,可我发现那个and或者是or的不好用,你有没有例子,给我研究一下,谢谢
  回复  引用    

#36楼[楼主] 2008-10-07 09:19 菜菜灰      

@omeweb

我也试过了,也不好用,还是自己重写一个方法吧。
  回复  引用  查看    

#37楼 2008-10-25 21:37 阿滨       

nVelecity 我发现不能输出 换行 还有空格 .超级不方便啊.....不知道你们如何输出的...格式方面控制真的不好弄   回复  引用  查看    

#38楼 2008-11-16 01:53 YSKING[未注册用户]

能不能给出一个可运行的完整的例子呀,谢谢   回复  引用    

#39楼 2009-02-20 16:27 ajax+u[未注册用户]

很不错的,我现在项目中就用这个。属于 轻量级的   回复  引用    

#40楼 2009-11-11 10:31 (11233)[未注册用户]

如果有两个模板,
怎么把他们组合到一起?
  回复  引用    

导航

公告

<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

搜索

 

常用链接

积分与排名

最新评论

阅读排行榜

评论排行榜