接上一篇继续说Yii框架下的 shop系统开发.....
一、解决问题
1.所有的 XxxxController 都继承了 Controller 类, 但是在页面中为什么没有include 或者 require 引入 Controller.php 这个文件?这个文件是在哪引入的?
打开程序主配置文件 /shop/protected/config/main.php 查看代码
// autoloading model and component classes'import'=>array('application.models.*','application.components.*',),
是这个地方引入了 /shop/protected/components目录 下的 Controller.php 还有models 下的所有文件
再看下主配置文件是在哪引入的 ... 查看入口文件代码 /shop/index.php
$config=dirname(__FILE__).'/protected/config/main.php';在 入口处有调用 main.php 主配置文件.... [ 控制器 -> 父类控制器 -> components -> main.php -> index.php ]
二、Yii 布局的实现
目前程序里的几个模板文件都是独立的,如果以后需要修改头部或者脚部代码,那就要做重复的工作,写重复的代码,所以用 “布局” 把模板中相通的部分提取出来...对代码进行优化,把相同的头部,脚部变成一份,大大减轻开发和维护的工作量...
1.布局文件路径: /shop/protected/views/layouts/
在该路径下新建布局文件 shop.php , 编写代码
<div>--我是头部--</div>
<!-- 展示首页、登录、注册等代码信息 -->
<!-- $content 代表提取出来的首页、登录、注册等页面信息,没有头部和脚部 -->
<?php echo $content; ?>
<div>--我是脚部--</div>
现在配置使用该布局, 系统默认的布局文件是 column1.php 文件
到父类控制器 Controller.php 文件中修改系统默认布局文件...... 指定使用 shop.php
//public $layout='//layouts/column1';
public $layout='//layouts/shop';
问题:布局文件具体与什么有关系?
在控制器中的action方法中渲染视图时, renderPartial() 这个方法不会渲染布局 .... render() 这个方法渲染布局
在UserController 中的actionRegister 方法中修改调用 render() 方法渲染布局
21 //注册
22 function actionRegister(){
23
24 // renderPartial() 方法不渲染布局 render()方法渲染布局
25 //$this->renderPartial('register');
26 $this->render('register');
27 }
刷新访问 http://***.***.**.**:****/shop/index.php?r=user/register ok,在顶端显示 --我是头部-- 在低端显示 --我是脚部--
2. 把公共的部分提取出来,放到 shop.php 中对应的地方,去掉模板文件中公用的代码
ok, 处理完毕,详细过程就不写出来了.....都是苦力活....
3. 写一下布局使用流程
在 /shop/protected/views/layouts/ 目录下写布局文件 . $content 代表普遍模板内容
在 父类控制器 /shop/protected/components/Controller.php 中修改默认使用布局文件 $layout="//layouts/shop"
在控制器的action方法中 使用 render方法渲染布局