首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
7.1 调用小部件的两种方式
7.1.1 调用widget()方法使用小部件DatePicker
7.1.2 调用begin()和end()方法使用小部件ActiveForm
7.2 项目实现迭代八:使用ActiveForm小部件替换添加文章视图
7.2.1 调用小部件ActiveForm
7.2.2 “文章标题”文本输入框
7.2.3 “文章栏目”下拉列表框
7.2.4 “文章图片”上传文件输入框
7.2.5 “内容”文本输入域
7.3 自定义小部件
7.3.1 继承Widget
7.3.2 自定义小部件的MVC结构
7.4 项目实现迭代九:自定义首页幻灯片小部件
7.5 项目实现迭代十:分页显示列表页
7.5.1 分页组件Pagination
7.5.2 新闻中心列表页实现数据填充
7.5.3 分页的超链接列表小部件LinkPager
8.1 初识资源包类
8.2 Yii2框架资源管理代码分析
8.2.1 视图中注册资源包类
8.2.2 注册资源文件
8.2.3 输出缓冲区的数据
8.3 AssetBundle类的成员属性
8.4 项目实现迭代十一:本书配套项目实现前端资源管理
8.4.1 实现首页前端资源管理
8.4.2 实现新闻中心列表页前端资源管理
9.1 模型中编写验证规则
9.2 控制器中安全赋值
9.3 控制器中触发验证
9.4 视图中提取错误信息
9.5 项目实现迭代十二:完成“添加文章”页面中的模型验证
10.1 AJAX简介
10.2 传统的JavaScript实现AJAX验证
10.2.1 创建AJAX引擎XMLHttpRequest对象
10.2.2 创建HTTP请求
10.2.3 设置响应HTTP请求状态变化的方法
10.2.4 设置获取服务器返回数据的语句
10.2.5 发送HTTP请求
10.3 jQuery实现AJAX验证
10.4 项目实现迭代十三:完成“添加用户”页面的AJAX验证
11.1 用户登录-表单模型
11.2 用户登录-客户端验证
11.2.1 ActiveForm实现客户端验证代码分析
11.2.2 项目实现迭代十四:完成登录页面的客户端验证
11.3 模型中的自定义方法作为rules()验证器
11.4 用于验证用户名和密码的身份类UserIdentity
11.5 项目实现迭代十五:完成用户登录
11.6 保存用户登录状态的yii\web\User类
12.1 访问控制技术综述
12.2 RBAC简介
12.3 RBAC需求分析及功能概述
12.4 项目实现迭代十六:最简方式实现RBAC
12.4.1 数据库设计
12.4.2 用户管理
12.4.3 角色管理
12.4.4 权限管理
12.4.5 用户—角色配置管理
12.4.6 角色—权限配置管理
12.5 项目实现迭代十七:使用yii\rbac\DbManager实现 RBAC
12.5.1 基本概念
12.5.2 用户管理
12.5.3 角色管理
12.5.4 权限管理
12.5.5 权限管理系统验证
12.6 项目实现迭代十八:使用yii2-admin扩展实现RBAC
12.6.1 配置
12.6.2 使用的数据库表
12.6.3 路由列表
12.6.4 角色列表
12.6.5 用户列表
12.6.6 菜单列表
12.6.7 集成AdminLTE后台主题及菜单展示
12.6.8 基于存取控制过滤器(ACF)的用户登录页面
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(中)
小册名称:Yii2框架从入门到精通(中)
### 7.5.2 新闻中心列表页实现数据填充 在Yii2框架中,开发一个新闻中心(News Center)模块时,列表页的数据填充是实现用户友好界面的关键步骤之一。本章节将详细阐述如何在Yii2项目中实现新闻列表页的数据填充,包括数据模型的建立、控制器的编写、视图的渲染以及数据源的配置,确保你能从零开始构建一个功能完备的新闻列表页。 #### 7.5.2.1 数据模型设计 首先,我们需要为新闻数据设计数据模型(Model)。在Yii2中,数据模型通常继承自`\yii\db\ActiveRecord`类,用于表示数据库中的一张表。假设我们的新闻表名为`news`,包含字段如`id`(主键)、`title`(标题)、`content`(内容)、`created_at`(创建时间)等。 ```php namespace app\models; use Yii; use yii\db\ActiveRecord; class News extends ActiveRecord { /** * @return string 返回当前模型关联的数据库表名 */ public static function tableName() { return '{{%news}}'; } /** * 验证规则 * @return array */ public function rules() { return [ [['title', 'content'], 'required'], [['title'], 'string', 'max' => 255], // 可以添加更多验证规则 ]; } // 可以添加其他方法,如获取关联数据等 } ``` #### 7.5.2.2 控制器编写 接下来,在控制器中编写用于处理新闻列表页请求的动作(Action)。假设你的控制器位于`app\controllers`命名空间下,控制器名为`NewsController`。 ```php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\News; class NewsController extends Controller { /** * 显示新闻列表 * @return string */ public function actionIndex() { // 使用ActiveQuery查询新闻列表 $newsList = News::find()->orderBy(['created_at' => SORT_DESC])->all(); // 将新闻列表传递给视图 return $this->render('index', [ 'newsList' => $newsList, ]); } // 可以添加其他动作,如添加新闻、删除新闻等 } ``` 在上面的代码中,`actionIndex`方法通过`News::find()`构建了一个查询,使用`orderBy`方法对查询结果按`created_at`字段降序排序,并通过`all()`方法获取所有新闻记录。最后,使用`render`方法渲染`index`视图,并将新闻列表传递给视图。 #### 7.5.2.3 视图渲染 视图文件通常位于`views/news`目录下,文件名为`index.php`。在这个视图中,我们将遍历控制器传递过来的新闻列表,并展示每条新闻的标题、部分内容或摘要等信息。 ```php <?php use yii\helpers\Html; use yii\widgets\LinkPager; /* @var $this yii\web\View */ /* @var $newsList app\models\News[] */ $this->title = '新闻中心'; ?> <div class="news-index"> <h1><?= Html::encode($this->title) ?></h1> <ul> <?php foreach ($newsList as $news): ?> <li> <h2><?= Html::encode($news->title) ?></h2> <p><?= mb_substr(strip_tags($news->content), 0, 200) . '...' ?></p> <p><small>发布时间:<?= Yii::$app->formatter->asDate($news->created_at) ?></small></p> <a href="<?= Yii::$app->urlManager->createUrl(['news/view', 'id' => $news->id]) ?>">查看详情</a> </li> <?php endforeach; ?> </ul> <?= LinkPager::widget([ 'pagination' => new \yii\data\Pagination(['totalCount' => count($newsList)]), ]) ?> </div> ``` 在视图中,我们使用了`Html`和`UrlManager`助手类来生成HTML元素和URL地址。通过`mb_substr`和`strip_tags`函数处理新闻内容,仅展示前200个字符并去除HTML标签,作为新闻的摘要。同时,使用了`LinkPager`小部件来分页显示新闻列表,虽然在这个例子中分页逻辑较为简单(仅根据总数创建分页对象),实际开发中你可能需要根据查询构建更复杂的分页逻辑。 #### 7.5.2.4 数据源配置与优化 虽然在本节的示例中,我们直接通过`News::find()`查询了所有新闻数据,但在实际应用中,你可能需要考虑对数据源进行更复杂的配置和优化,如使用缓存减少数据库查询次数、通过条件查询过滤特定新闻、配置分页参数等。 - **缓存**:可以使用Yii2的缓存组件(如FileCache、RedisCache等)来缓存新闻列表数据,减少数据库压力。 - **条件查询**:根据用户输入或请求参数(如分类ID、关键字等)构建条件查询,展示特定新闻。 - **分页与排序**:使用Yii2的分页组件(`yii\data\Pagination`)和排序组件(`yii\data\Sort`)实现更复杂的分页和排序逻辑。 #### 总结 通过本章节的学习,你应该能够掌握在Yii2框架中实现新闻中心列表页数据填充的基本流程,包括数据模型的设计、控制器的编写、视图的渲染以及数据源的配置与优化。在实际项目中,你可能需要根据具体需求对代码进行适当的调整和扩展,以满足不同的业务场景和用户需求。希望本章节的内容能为你的Yii2开发之路提供有力的帮助。
上一篇:
7.5.1 分页组件Pagination
下一篇:
7.5.3 分页的超链接列表小部件LinkPager
该分类下的相关小册推荐:
PHP程序员面试笔试真题与解析
Laravel(10.x)从入门到精通(十五)
HTTP权威指南
Laravel(10.x)从入门到精通(五)
Laravel(10.x)从入门到精通(十六)
PHP8入门与项目实战(5)
Laravel(10.x)从入门到精通(三)
Magento零基础到架构师(产品管理)
Laravel(10.x)从入门到精通(十一)
PHP高性能框架-Workerman
Laravel(10.x)从入门到精通(十七)
Laravel(10.x)从入门到精通(十三)