Yii框架开发商城(二)

时间:2022-10-21 09:14:52

 

    接上一篇继续说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方法渲染布局