作者:feifengxlq
原文地址:http://www.phpobject.net/blog/read.php/96.htm
时间:2007-1-12
前天谈到MVC中的单点入口,今天我们主要谈谈MVC中的view(视图)。
视图主要是把数据渲染现实给用户,其实就是把数据转化成THML输出给用户。在之前,我们一定都或多或少的了解过一些模版系统,比如说smarty,phplib,fasttemplate等等。模版系统不是完整意义上的视图,更加确切的说模版系统只是视图中的一个功能点。当然现在的模版系统的功能是越来越强大,比如说smarty实现了缓存的部分功能。
关于模版系统的比较,大家可以看看这篇文章。模版系统原理其实很简单,就是把标签替换成相应的数据。但每个模版系统的实现方式都不完全一样,比如说smarty是编译型的,它第一个是把模版文件编译成相应的php文件,然后以后每次就直接调用编译后的文件,而PHPLIB是解析性的,每次都调用模版使用正则来替换。所以除了第一次smarty相对来说更加快。但是我不觉得使用标签有什么特别得好处。所谓得标签实现美工和程序分类,我认为是扯蛋。对于美工人员来说 {$var}和=$var?> 有什么区别呢?
在这里,我们做一个最简单的view类。
首先,我们用函数实现一个最基本的渲染功能。
如果你对ob_start不熟悉,请自己查阅手册。使用这个函数可以实现一个简单的view,比如说简单变量,数组,对象,模块化等等。
下面是一个使用demo,只贴出最核心的使用例子,模版文件请下载demo。
这里面用到了上一节的一些东西,不明白的请看《PHP实现MVC开发得最简单的方法——单点入口》
实现后的效果图:

最后提供一个类,实现类似zf的view的功能,关于它的使用,我就不多说了,很简单。
提供整个demo文件下载。
下载文件
原文地址:http://www.phpobject.net/blog/read.php/96.htm
时间:2007-1-12
前天谈到MVC中的单点入口,今天我们主要谈谈MVC中的view(视图)。
视图主要是把数据渲染现实给用户,其实就是把数据转化成THML输出给用户。在之前,我们一定都或多或少的了解过一些模版系统,比如说smarty,phplib,fasttemplate等等。模版系统不是完整意义上的视图,更加确切的说模版系统只是视图中的一个功能点。当然现在的模版系统的功能是越来越强大,比如说smarty实现了缓存的部分功能。
关于模版系统的比较,大家可以看看这篇文章。模版系统原理其实很简单,就是把标签替换成相应的数据。但每个模版系统的实现方式都不完全一样,比如说smarty是编译型的,它第一个是把模版文件编译成相应的php文件,然后以后每次就直接调用编译后的文件,而PHPLIB是解析性的,每次都调用模版使用正则来替换。所以除了第一次smarty相对来说更加快。但是我不觉得使用标签有什么特别得好处。所谓得标签实现美工和程序分类,我认为是扯蛋。对于美工人员来说 {$var}和=$var?> 有什么区别呢?
在这里,我们做一个最简单的view类。
首先,我们用函数实现一个最基本的渲染功能。
<?
function render($template,$vars)
{
if(!file_exists($template))die($template.'不存在!');
ob_start();
if(is_array($vars)){
foreach($vars as $key=>$value){
$$key=$value;
}
}
require $template;
return ob_get_clean();
}
?>
如果你对ob_start不熟悉,请自己查阅手册。使用这个函数可以实现一个简单的view,比如说简单变量,数组,对象,模块化等等。
下面是一个使用demo,只贴出最核心的使用例子,模版文件请下载demo。
<?
function renderAction(){
$t_path=SITE_PATH.'/app/views/';//设置模版文件的路径
$array=array(
'simple_var'=>'简单变量!',
'array_var'=>array(
'array1'=>'变量1的值',
'array2'=>'变量2的值',
),
'file_template'=>render($t_path.'viewer2.php',array('var2'=>'文件2中的变量!'))
);
echo render($t_path.'viewer.php',$array);
}
?>
这里面用到了上一节的一些东西,不明白的请看《PHP实现MVC开发得最简单的方法——单点入口》
实现后的效果图:

最后提供一个类,实现类似zf的view的功能,关于它的使用,我就不多说了,很简单。
<?
/**
*作者:feifengxlq
*原文地址:http://www.phpobject.net/blog/read.php/96.htm
*时间:2007-1-12
*/
class viewer
{
var $path;
/**
* 构造函数
*/
function viewer($path='')
{
if(!empty($path))$this->set_tpl_path($path);
}
/**
* 设置模版文件路径
*/
function set_tpl_path($path)
{
if(!file_exists($path))$this->error(1,$path);
$this->path=$path;
}
/**
* 渲染视图
*/
function render($template)
{
if(!file_exists($this->path.$template))$this->error(2,$this->path.$template);
ob_start();
require $this->path.$template;
return ob_get_clean();
}
/*--------私有方法----------------------*/
/**
* 出错处理
*/
function error($id,$other='')
{
switch($id)
{
case 1:
$errormsg=$other.' 不是有效的文件路径!';
break;
case 2:
$errormsg=$other.' 不是有效的模版文件!';
break;
default:
break;
}
die($errormsg);
}
}
?>
提供整个demo文件下载。
下载文件
路人 Says:
2008/09/13 13:49
我觉得如果可以实现设计时美工支持的标签,那么可以说是实现了美工与程序的分离,像PHP这样的语言,开发环境还是比较恶劣的,算不上美工与程序分离。也只能支持楼主的:换来换去。
为什么需要这一段?
if(is_array($vars)){
foreach($vars as $key=>$value){
$$key=$value;
}
$vars是模型传过来的数据数组,那在模版文件里直接用echo $vars['XXX']不就可以了吗?
if(is_array($vars)){
foreach($vars as $key=>$value){
$$key=$value;
}
$vars是模型传过来的数据数组,那在模版文件里直接用echo $vars['XXX']不就可以了吗?
Donson Says Says:
2008/06/26 16:13
也有优点呀!
Donson Says Says:
2008/06/26 16:12
也有优点呀
GOD Says:
2008/04/22 11:12
确实是扯蛋~
好手 Says:
2007/12/17 15:02
AileenGuan Says:
2007/03/23 12:14
想要完全分离逻辑和界面,纯属扯淡。无非是换来换去而已。把代码变得不像代码而已。
Donson Says:
2007/01/30 12:44
“所谓得标签实现美工和程序分类,我认为是扯蛋。”
哈哈,我认为也是这样...
哈哈,我认为也是这样...
Verdana Says:
2007/01/15 18:41
“所谓得标签实现美工和程序分类,我认为是扯蛋。”
非常赞同~~
非常赞同~~
分页: 1/73
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
PHP实现MVC开发得最简单的方法——单点入口
【转载】超简单IFRAME自适应网页!




