首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 PHP语言发展历史及其适合的应用领域
1.2 什么是框架
1.3 为什么要用框架开发
1.4 自定义框架
1.4.1 MVC框架模式的实现
1.4.2 入口文件
1.4.3 应用(前端控制器)
1.4.4 从自定义框架到Yii2框架
2.1 Yii简介
2.1.1 什么是Yii框架技术
2.1.2 Yii2的优点
2.1.3 应用案例
2.2 下载Yii2
2.3 运行应用
2.4 输出“Hello World”
2.5 入口文件
2.6 应用主体
2.7 MVC框架模式
2.8 Yii2框架中的控制器
2.9 Yii2框架中的视图
2.10 项目实现迭代一:渲染首页、列表页和内容页视图
3.1 布局概述
3.2 项目实现迭代二:创建并使用布局渲染首页视图
3.3 Controller类的render()方法执行流程
3.4 应用级布局
3.5 嵌套布局
3.6 项目实现迭代三:使用嵌套布局渲染“新闻中心”列表页
3.7 视图文件的存储路径
4.1 模块概述
4.2 使用Gii创建模块
4.3 模块中的资源文件
4.4 项目实现迭代四:文章管理
5.1 ActiveRecord模型概述
5.2 通过CRUD(增查改删)操作理解ActiveRecord类
5.2.1 文章表(ds_article)
5.2.2 在配置文件中初始化数据库连接
5.2.3 创建ActiveRecord模型
5.2.4 通过查询操作理解ActiveRecord类
5.2.5 通过插入和更新操作理解ActiveRecord类
5.2.6 通过删除操作理解ActiveRecord类
5.3 项目实现迭代五:首页“行业百科”数据查询
5.4 项目实现迭代六:在“文章添加”页面实现数据插入
6.1 ActiveRecord模型类的find()方法与查询执行流程
6.2 查询方法find()实例
6.2.1 实现带有逻辑运算符和比较运算符的查询
6.2.2 实现范围比较查询
6.2.3 实现模糊查询
6.3 查询构建类ActiveQuery
6.3.1 ActiveQuery成员属性简介
6.3.2 ActiveQuery成员方法简介
6.3.3 Query类where()成员方法简介
6.4 关联查询
6.5 项目实现迭代七:完成首页中的数据填充
6.5.1 实现幻灯片切换
6.5.2 实现成功案例
6.5.3 实现其他栏目的文章内容查询
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(上)
小册名称:Yii2框架从入门到精通(上)
### 3.6 项目实现迭代三:使用嵌套布局渲染“新闻中心”列表页 在Yii2框架的项目开发中,随着功能的不断扩展和细化,布局的管理变得尤为重要。嵌套布局是一种强大的技术,它允许开发者将页面结构划分为多个层次,每个层次负责不同的布局逻辑,从而提高了代码的可维护性和复用性。在本章节中,我们将详细探讨如何在Yii2项目中实现嵌套布局,并具体应用于“新闻中心”列表页的渲染上。 #### 3.6.1 理解嵌套布局 在Web开发中,布局通常指的是页面的结构框架,包括头部、导航栏、内容区、侧边栏和页脚等部分。传统的单级布局将所有这些元素直接组合在一个主布局文件中,但随着项目的复杂度增加,这种方式会导致布局文件变得庞大且难以维护。嵌套布局通过将布局拆分成多个层级来解决这个问题,每个层级负责一部分布局,然后通过嵌套的方式组合起来形成最终的页面结构。 在Yii2中,嵌套布局主要通过视图(Views)和布局(Layouts)文件来实现。Yii2的视图渲染机制支持在布局文件中再次调用`$this->render()`或`$this->renderPartial()`来渲染其他视图或布局,从而实现嵌套效果。 #### 3.6.2 设计新闻中心列表页布局 在“新闻中心”列表页的设计中,我们可以将其布局大致划分为以下几个部分: 1. **全局布局**:包含网站的通用元素,如头部、导航栏和页脚。 2. **内容区域布局**:位于全局布局的内容区,专门用于渲染新闻列表页特有的内容,如侧边栏(可能包含分类链接、热门文章等)和新闻列表主体。 为了实现嵌套布局,我们首先需要定义这些布局文件: - `main.php`:全局布局文件,位于`@app/views/layouts`目录下。 - `newsList.php`:内容区域布局文件,专门用于新闻列表页,同样位于`@app/views/layouts`目录下。 - `news/index.php`:新闻列表页的视图文件,位于`@app/views/news`目录下。 #### 3.6.3 实现嵌套布局 ##### 3.6.3.1 创建全局布局(`main.php`) 全局布局`main.php`可能包含以下结构: ```php <?php /* @var $this \yii\web\View */ /* @var $content string */ use yii\helpers\Html; ?> <?php $this->beginPage() ?> <!DOCTYPE html> <html lang="<?= Yii::$app->language ?>"> <head> <!-- 页面元信息和CSS引入 --> </head> <body> <?php $this->beginBody() ?> <header> <!-- 头部内容 --> </header> <nav> <!-- 导航栏内容 --> </nav> <div class="container"> <?= $content ?> </div> <footer> <!-- 页脚内容 --> </footer> <?php $this->endBody() ?> </body> </html> <?php $this->endPage() ?> ``` 在`$content`变量处,Yii2将自动插入由控制器指定的视图内容。 ##### 3.6.3.2 创建内容区域布局(`newsList.php`) 内容区域布局`newsList.php`则专门用于新闻列表页: ```php <?php /* @var $this \yii\web\View */ /* @var $content string */ use yii\helpers\Html; ?> <div class="row"> <div class="col-md-3"> <!-- 侧边栏内容,如分类、热门文章等 --> </div> <div class="col-md-9"> <?= $content ?> </div> </div> ``` 这里,我们将新闻列表的主体内容放置在了一个占9列的Bootstrap网格系统中,侧边栏占3列。 ##### 3.6.3.3 渲染新闻列表页(`news/index.php`) 在新闻列表页的视图文件`news/index.php`中,我们实际上不需要直接渲染`newsList.php`布局,而是通过控制器来指定使用它。控制器中的操作可能如下所示: ```php namespace app\controllers; use Yii; use yii\web\Controller; class NewsController extends Controller { public function actionIndex() { // 假设这里通过某种方式获取了新闻列表数据 $newsList = ...; // 示例代码,实际中应从数据库获取 // 渲染新闻列表页,并指定使用newsList布局 return $this->render('index', [ 'newsList' => $newsList, ], 'newsList'); // 注意这里的'newsList'参数指定了使用的布局 } } ``` 注意,在`render()`方法的第三个参数中,我们指定了使用`newsList`作为布局文件(不包括`.php`扩展名,Yii2会自动查找)。这样,Yii2就会先渲染`news/index.php`,然后将结果作为`$content`插入到`newsList.php`布局中,最后再将`newsList.php`的布局内容插入到`main.php`的全局布局中,形成最终的HTML页面。 #### 3.6.4 总结 通过本章节的学习,我们掌握了如何在Yii2框架中使用嵌套布局来渲染“新闻中心”列表页。嵌套布局不仅提高了代码的可维护性和复用性,还使得页面结构的组织更加清晰。在实际项目中,根据项目需求合理设计布局结构,是提升开发效率和用户体验的关键。 此外,我们还看到了如何在控制器中指定使用特定的布局文件,这是实现嵌套布局的关键步骤之一。通过灵活运用Yii2的视图和布局机制,我们可以构建出结构清晰、易于维护的Web应用。 最后,需要注意的是,虽然本章节以“新闻中心”列表页为例进行了说明,但嵌套布局的思想和实现方法同样适用于其他任何需要复杂页面布局的场景。
上一篇:
3.5 嵌套布局
下一篇:
3.7 视图文件的存储路径
该分类下的相关小册推荐:
PHP8入门与项目实战(2)
PHP高性能框架-Workerman
PHP高性能框架-Swoole
Laravel(10.x)从入门到精通(十九)
Swoole入门教程
HTTP权威指南
Laravel(10.x)从入门到精通(十七)
PHP8入门与项目实战(3)
Shopify应用实战开发
Laravel(10.x)从入门到精通(十一)
PHP程序员的设计模式
Laravel(10.x)从入门到精通(一)