使用savant的实例:
总有一些有复杂模版引擎甚至是"Plain Old PHP Pages"(popp)的模板无法可变换替换,而且嵌入了控制结构和其他逻辑到页面里。然而,给结果到你的应用程序的表述层的业务逻辑,维护就会变得相当困难。
注:写模版引擎
似乎写摸版引擎是php社区里的一种passage权利,搜索模版引擎逐字发现上百的结果。(这方面的实验例子可以看http://www.sitepoint.com/forums/showthread.php?t=123769)如果你不选择用普通的引擎,而是用你自己的,这儿有丰富的实例代码可以看。
地址http://wact.sf.net/index.php/TemplateView很好的概述了什么样式的标记可以被模版视图使用。包括一个属性语言,自定义标签,html备注以及自定义语法。
非常流行的模版引擎smarty(http://smarty.php.net/)是一个使用自定义语法方法的模版引擎的实例。
装载smarty引擎就像:
require_once ‘Smarty.class.php’; $tpl =& new Smarty; $tpl->assign(array( ‘title’ => ‘Colors of the Rainbow’ ,’colors’ => array(‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘indigo’, ‘violet’) )); $tpl->display(‘rainbow.tpl’); |
rainbow.html的自定义语法就像:
<html><head> <title>{$title}</title> </head><body> <h1>{$title}</h1> <ol> {section name=rainbow loop=$colors} <li>{$colors[rainbow]}</li> {/section} </ol> </body></html> |
wact(http://wact.sf.net/)效仿了martin fowler在poeaa中概述的那种自定义标签。虽然wact支持一个与smarty相似的自定义语法作为快捷方式,wact的自定义标签列阵如下:
require_once ‘wact/framework/common.inc.php’; require_once WACT_ROOT.’template/template.inc.php’; require_once WACT_ROOT.’datasource/dictionary.inc.php’; require_once WACT_ROOT.’iterator/arraydataset.inc.php’; // simulate tabular data $rainbow = array(); foreach (array(‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘indigo’, ‘violet’) as $color) { $rainbow[] = array(‘color’ => $color); } $ds =& new DictionaryDataSource; $ds->set(‘title’, ‘Colors of the Rainbow’); $ds->set(‘colors’, new ArrayDataSet($rainbow)); $tpl =& new Template(‘/rainbow.html’); $tpl->registerDataSource($ds); $tpl->display(); |
<html><head> <title>{$title}</title> </head><body> <h1>{$title}</h1> <list:list id=”rainbow” from=”colors”> <ol> <list:item><li>{$color}</li></list:item> </ol> </list:list> </body></html> |
在这个wact例子里有相当多的包含的文件。这是因为框架有各种各样的要素来处理网站应用问题的各个部分。只需包含你需要的元素。在上面的例子中,模板就是一个View,dictionary data source 作为model的代理,php脚本本身是作为一个controller.许多自定义标签设计成与表格数据一起运用--像你从数据库中提取的记录集---转换成简单数组以后把它用在模版里。
最后一个样式是拥有一个模版的有效的xml文件,使用各自的要素的属性作为目标替换你的模版。这里有一个是用PHP- TAL的技术实例(http://phptal.motion-twin.com/)
// PHP5 require_once ‘PHPTAL.php’; class RainbowColor { public $color; public function __construct($color) { $this->color = $color; } } // make a collection of colors $colors = array(); foreach (array(‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘indigo’, ‘violet’) as $color) { $colors[] = new RainbowColor($color); } $tpl = new PHPTAL(‘rainbow.tal.html’); $tpl->title = ‘Colors of the Rainbow’; $tpl->colors = $colors; try { echo $tpl->execute(); } catch (Exception $e){ echo $e; } |
rainbow.tal.html的模版文件如下
<?xml version=”1.0”?> |
延伸阅读:
理解PHP中的MVC编程之MVC框架简介
MVC模式的PHP实现
从魔兽看PHP设计模式
《PHP设计模式介绍》导言
PHP设计模式介绍 第一章 编程惯用法
PHP设计模式介绍 第二章 值对象模式
PHP设计模式介绍 第三章 工厂模式
PHP设计模式介绍 第四章 单件模式
PHP设计模式介绍 第五章 注册模式
PHP设计模式介绍 第六章 伪对象模式
PHP设计模式介绍 第七章 策略模式
PHP设计模式介绍 第八章 迭代器模式
PHP设计模式介绍 第九章 观测模式
PHP设计模式介绍 第十章 规范模式
PHP设计模式介绍 第十一章 代理模式
PHP设计模式介绍 第十二章 装饰器模式
PHP设计模式介绍 第十三章 适配器模式
PHP设计模式介绍 第十四章 动态记录模式
PHP设计模式介绍 第十五章 表数据网关模式
PHP设计模式介绍 第十六章 数据映射模式