说到PHP的模板引擎,那可谓是很多。像Smarty、SmartTemplate、FastTemplate等等... 其中属Smarty功能最为强大。
不过呢,个人感觉它还有些欠缺的地方,例如表达式赋值,modifier只支持传递一个参数等。因此,在CMSPAD项目中我们开发了一套新的模板引擎,语法上大部分兼容Smarty,但提供更强大的函数引擎和表达式自动赋值。
下面我把一些范例写出来,看看能不能触发一下大家的创新思维:
1. 公用函数标签:<{@函数名称 [参数1 [参数2]]}>
模板代码
- <{@strcmp "123456789" "12345678"}>
- <{@strtoupper $hello}>
2. 内置函数标签:在文本区域内的自动函数支持
模板代码
- <{@strtoupper "$hello strlen($hello) strcmp($hello,'world')"}>
- <{if $hello=strtolower('WORLD')}>Is world<{/if}>
- <{if strlen($hello) + 3 = 5}>$Hello var length is greater than 5<{/if}>
3. 变量赋值:<{assign name=变量名 expr=表达式}>
模板代码
- <{assign name=hello expr=strlen($hello)+5}>
- <{assign name=hello expr="strlen($hello) + 5" }>
4. 属性表达式:在某些系统支持的属性中可以提供表达式支持
模板代码
- <{for start='$start + 3' stop=count($ints) step=2 value=i}><{$i}>.<{/for}>
由于提供了内置表达式支持,因此CMSPAD的模板引擎并不需要兼容Smarty的modifier语法。
整个系统的函数,我们分成了三个部分:公用函数、内置函数、标签函数,三个函数可以分开进行设置。公用和内置函数库,默认使用了系统的函数库,而用户可以自行定义或覆盖默认函数(例如支持中文的substr函数)以达到更理想的效果。所谓标签函数,就是类似于Smarty上的函数样式。与其不同的一点是,我们把switch函数给简化成下列样式:
模板代码
- <{switch $hello}>
- <{case "hello"}>
- This is Hello
- <{case 'world'}>
- This is World
- <{case}>
- This is Default
- <{/switch}>
目前,此库正在进行beta测试中。