首页
技术小册
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.1 分页组件Pagination 在Web开发中,当数据量非常大时,一次性加载所有数据到页面上不仅会导致加载时间过长,还可能因为数据量过大而消耗过多的服务器资源和带宽,进而影响用户体验。为了解决这个问题,分页技术应运而生。Yii2框架作为一个高效、灵活的PHP开发框架,提供了强大的分页组件`Pagination`,帮助开发者轻松实现数据的分页显示。 #### 7.5.1.1 Pagination组件概述 `Pagination`组件是Yii2中用于处理数据分页的一个核心组件,它位于`yii\data`命名空间中。通过该组件,开发者可以指定每页显示的记录数、当前页码等参数,`Pagination`会自动计算出总页数、起始记录位置等信息,并可以根据需要生成分页链接。这些分页链接可以嵌入到视图文件中,以便用户通过点击链接来浏览不同页的数据。 #### 7.5.1.2 配置Pagination组件 在Yii2中,`Pagination`组件可以通过配置数组或直接在控制器中实例化后配置其属性。常见的配置属性包括: - `pageSize`:每页显示的记录数,默认为20。 - `totalCount`:数据总数,这是分页计算的基础。 - `defaultPageSize`:如果没有明确设置`pageSize`且请求中也没有`per-page`参数时,将使用此值作为每页的记录数。 - `validatePage`:是否验证请求的页码是否有效(例如,不超出总页数范围),默认为true。 - `forcePageParam`:自定义用于传递当前页码的GET参数名,默认为`page`。 - `route`:用于生成分页链接的URL路由信息,可以是字符串或数组。 - `params`:生成分页链接时附加到URL的额外参数。 #### 7.5.1.3 使用Pagination组件实现分页 实现分页通常涉及几个步骤:查询数据总数、配置`Pagination`组件、根据`Pagination`组件的提示获取当前页的数据、在视图中渲染分页链接和数据。 ##### 示例场景 假设我们有一个用户表,现在需要根据用户的ID或用户名进行搜索,并显示搜索结果的分页列表。 **步骤1:查询数据总数** 首先,需要查询出符合搜索条件的用户总数。这通常是通过SQL的`COUNT`函数实现的。 ```php $count = User::find()->where(['like', 'username', $search])->count(); ``` 这里`$search`是用户输入的搜索词,用于过滤用户名。 **步骤2:配置Pagination组件** 在控制器中,根据查询到的总数配置`Pagination`组件。 ```php use yii\data\Pagination; $pagination = new Pagination([ 'totalCount' => $count, 'pageSize' => 10, // 每页显示10条记录 ]); ``` **步骤3:获取当前页的数据** 使用`Pagination`组件的`offset`和`limit`属性来设置查询的起始位置和记录数,从而获取当前页的数据。 ```php $users = User::find() ->where(['like', 'username', $search]) ->offset($pagination->offset) ->limit($pagination->limit) ->all(); ``` **步骤4:在视图中渲染分页链接和数据** 将`$users`和`$pagination`传递到视图文件中,并使用`LinkPager`小部件来渲染分页链接。 ```php // 控制器中 return $this->render('index', [ 'users' => $users, 'pagination' => $pagination, ]); // 视图文件中 use yii\widgets\LinkPager; // 显示用户数据... echo LinkPager::widget([ 'pagination' => $pagination, ]); ``` `LinkPager`小部件会根据`$pagination`对象自动生成分页链接,并将其嵌入到HTML中。 #### 7.5.1.4 进阶使用 - **自定义分页样式**:`LinkPager`小部件支持通过配置数组来自定义分页链接的样式,如`options`、`linkOptions`、`prevPageLabel`、`nextPageLabel`等。 - **Ajax分页**:Yii2支持通过Ajax实现无刷新分页。这通常需要在客户端使用JavaScript监听分页链接的点击事件,并发送Ajax请求获取新页的数据,然后更新页面内容。Yii2的`Pjax`小部件可以简化这一过程。 - **结合ActiveDataProvider**:在更复杂的场景中,可以使用`ActiveDataProvider`来替代直接配置`Pagination`。`ActiveDataProvider`不仅包含分页逻辑,还集成了排序和过滤功能,是处理复杂数据列表的推荐方式。 #### 7.5.1.5 总结 Yii2的`Pagination`组件提供了灵活且强大的分页功能,通过简单的配置即可实现数据的分页显示。在实际开发中,根据具体需求选择合适的分页实现方式,可以极大地提升用户体验和系统性能。无论是通过直接配置`Pagination`组件,还是使用`ActiveDataProvider`结合`LinkPager`小部件,Yii2都提供了丰富的API和灵活的配置选项,以满足不同场景下的分页需求。
上一篇:
7.5 项目实现迭代十:分页显示列表页
下一篇:
7.5.2 新闻中心列表页实现数据填充
该分类下的相关小册推荐:
PHP8入门与项目实战(1)
HTTP权威指南
PHP程序员面试笔试真题与解析
PHP8入门与项目实战(3)
PHP高并发秒杀入门与实战
PHP合辑2-高级进阶
Swoole入门教程
Laravel(10.x)从入门到精通(十三)
Shopify应用实战开发
Laravel(10.x)从入门到精通(十)
Laravel(10.x)从入门到精通(九)
全栈工程师修炼指南