>[danger]上节课我们了解了控制器的用法,控制器执行到最后,会跳转到一个界面,用于显示数据,这个用于显示数据的html文件,我们就称之为视图。
## 一、视图目录
iWebShop的视图存放目录位于views下,views下每个目录为一个主题,default为系统前台的默认主题,sysdefault为系统后台默认主题,syssellers为商家后台的主题,mobile为手机端的主题。下面以default为例,说明目录结构:
![](http://it.sunzoon.com/wp-content/uploads/2016/07/20160721171951.png)
* javascript为该主题要使用到的js文件
* layouts存放的为视图布局文件(后面详解)
* skin为该主题要使用到的皮肤css文件
* simple,site,ucenter为控制器的名称,每个控制器对应一个目录,目录下的每个文件默认对应控制器中的Action(如在URL解析控制器Action时,如果在控制器程序中找不到Action的定义,就会直接跳转到该视图)
* config为该主题的配置文件
* preview.jpg为主题的预览图,只在后台选择主题可以见到.
## 二、conifg.php文件
default主题的config文件如下:
~~~
<?php
return array(
'name' => '锦绣前程', //主题名称
'author' => 'aircheng', //主题作者
'time' => '2014/12/29 10:03:05', //制作时间
'version' => '3.0', //主题版本
'thumb' => 'preview.jpg', //主题预览图
'info' => '默认主题方案,此主题适用于3.0.0 系列产品', //主题描述信息
'type' => '商城前台-PC', //主题类型
);
?>
~~~
主要是定义主题的一些基本信息。
## 三、视图布局 layout
官方解释
>[info] 简单说下 iWebShop 的 layout(布局),对于一般网页视图来说,基本的结构形式都是固定好的,比如网页的头部,页脚底部,公共样式,公共 js 类库等等,所有这些公共的部分我们把它抽象出来,做成一个 layout 模板(html形式的),layout 存在于每个主题模板的 layouts目录中,可以为不同的控制器(controller) ,动作(action)指定不同的布局,比如网站的首页和网站的注册页面头部布局就可以不同:
![](http://it.sunzoon.com/wp-content/uploads/2016/07/20160721181553.png)
![](http://it.sunzoon.com/wp-content/uploads/2016/07/20160721181634.png)
简单来说,layouts的作用就是把公用的代码提取出来,提高代码的使用率。具体的开发方式会在主题开发的过程中说明。
### layouts设置
官方提供了以下三种方法设置layouts
(1)在控制器(controller)中增加 public $layout 公共属性,表示这个控制器下的所有视图都默认用这个布局,如下:
~~~
<?php
class Test extends IController
{
public $layout='site';
public function helloworld(){
echo "hello world";
}
}
?>
~~~
(2)我们也可以在主题目录下的 config.php 文件中配置 layout 布局。
~~~
<?php
return array(
'name' => '锦绣前程',
'author' => 'aircheng',
'time' => '2014/12/29 10:03:05',
'version' => '3.0',
'thumb' => 'preview.jpg',
'info' => '默认主题方案,此主题适用于3.0.0 系列产品',
'type' => '商城前台-PC',
'layout' => array('simple' => 'site') //增加这一句
);
?>
~~~
如果我们希望 simple 下面有个视图reg使用 site_mini 的 layout 布局就应该这么写:
`layout => array(‘simple’ => ‘site’,‘simple@reg’ => ‘site_mini’)`
注意:iWebShop 用@符号表示包括子关系,比如 site@index 表示的就是 site 控制器下的 index 方法。
(3) 也可以在每个动作(action)方法里面临时设置 layout 比如:
~~~
<?php
class Test extends IController
{
public function helloworld(){
$this->layout = 'site';
echo "hello world";
}
}
?>
~~~
## 四、视图开发举例
把上节课的控制器代码改为,高亮的代码表示跳转到”helloworld”这个视图。
~~~
<?php
class Test extends IController
{
public function helloworld(){
$this->redirect('helloworld');
}
}
?>
~~~
在views/default建立文件夹test,再建立一个html文件helloworld,输入以下代码:
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
三众简悦iWebShop开发教程
</body>
</html>
~~~
显示效果如下:
![](http://it.sunzoon.com/wp-content/uploads/2016/07/20160721184601.png)
>[warning]如有不明白的地方,留言或是加入我们 “三众技术QQ交流群”一起讨论
## 关于我们
>[danger][三众科技](http://www.sunzoon.com)资讯平台——大道至简,悦你所阅!
>本教程由[三众简悦](http://it.sunzoon.com)原创,转载请注明出处,作者:bobball,由bobo整理成看云书籍
三众技术交流群:**543102562**
欢迎大家加入我们,共同讨论IT,互联网技术。同时可以扫描下面的二维码关注我们,谢谢!
![三众科技服务号](http://it.sunzoon.com/wp-content/uploads/2016/06/qrcode_for_gh_401d25b05314_344.jpg)