Smarty应该是最常用的模板引擎了吧,
类似的引擎也超级多,功能都大同小异。
它们都有一个最大的弱点:
美工做好HTML页面之后,
PHP程序员必须把Smarty代码嵌入到此页面,做个模板文件出来才行。
这样就破坏了原始页面的结构。
如果美工对原始页面做出了改动,那么模板文件也必须要跟着改。
这实在是挺让人郁闷的。
为了解决这个问题,一个划时代的PHP模板引擎诞生了:Psttt!
直接看例子吧:
美工做出的HTML页面,里面的数据都是演示数据,虚构的。
< h1 id ='title' > Write our company name here </ h1 >
PHP代码:
a.php
$view -> title = " foo company " ;
这个和Smarty相差不大。
Psttt需要额外创建一个文件:
h1#title = $title;
生成出的中间代码:
< h1 id = " title " ><? php echo $this -> title; ?></ h1 >
amazing! 多牛X啊。
美工可以任意编辑html页面,只要保证h1 和id=title即可。
h1#title, 竟然模仿了CSS选择器。
再来看一个更现实的例子:
美工做出的HTML页面:
< div id ='product_list' >
< div class ='product' >
< h2 > Mockup product 1 </ h2 >
< img src ='/images/default_product1.jpg' />
< p > Some product description goes here! </ p >
< span > Price: < strong > 99999 </ strong ></ span >
</ div >
< div class ='product' >
< h2 > Mockup product2 </ h2 >
< img src ='/images/default_product2.jpg' />
< p > Some product description goes here! </ p >
< span > Price: < strong > 888.99 </ strong ></ span >
</ div >
</ div >
php代码:
$view -> products = array (
1 => array ( ' title ' => ' Product 1 ' , ' img ' => ' /img/products/1.jpg ' , ' description ' => ' the best product ever ' , ' price ' => ' $10 ' ) ,
2 => array ( ' title ' => ' Product 2 ' , ' img ' => ' /img/products/2.jpg ' , ' description ' => ' the second best product ever ' , ' price ' => ' $30 ' )
);
就是一个数组。
Psttt代码:
//we just need one product to fill in data and iterate
#product_list>.product|deleteAllButFirst
//add iteration code, php foreach that will fill in data
#product_list>.product|before = <?php if ($this->products) foreach($this->products as $product ):?>
#product_list > .product> h2 = $product[title]
#product_list > .product > img|src = $product[img]
#product_list > .product > p = $product[description]
#product_list > .product > .span > strong = $product[price]
#product_list>.product|after = <?php endforeach;?>
生成出来的中间代码:
< div class = " user_box " >
Welcome < strong class = " username " > Demo user 1 </ strong >
</ div >
< div id = " product_list " >
<? php if ( $this -> products) foreach ( $this -> products as $product ) :?>
< div class = " product " >
< h2 ><? php echo $product [title]; ?></ h2 >
< img src = " <?php echo $product [img];?> " />
< p ><? php echo $product [description]; ?></ p >
< span > Price : < strong ><? php echo $product [price]; ?></ strong ></ span >
</ div >
<? php endforeach ; ?>
</ div >
和使用Smarty相比,增加的工作量就是需要额外维护一个Psttt代码文件。
带来的最大好处就是:
美工在保持页面结构不变的情况下,可以对原始页面做任意的改动,
PHP程序员这边啥都不用做了。
基本上算是一劳永逸吧。
更多文档见这里:
http://codeassembly.com/Psttt!-full-documentation/
源代码可以在这里下载: