yii2-搜索带分页,分页的两种方式
1.文章表关联
<?php
//...other code
//关联
public function getCate(){
return $this->hasOne(ArticleCate::className(),['id' => 'cid']);
}
?>
2.搜索模型
common/models/search/创建ArticleSearch.php
<?php
namespace common\models\search;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use common\models\Article;
class ArticleSearch extends Article
{
//public $cname;//文章类别名
/**
* @inheritdoc
*/
public function rules()
{
return [
[['cid','created_at', 'updated_at'], 'integer'],
[['id', 'desc','title','cover','content'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
//搜索
public function search($params)
{
$query = Article::find();
// $query->joinWith(['cate']);//关联文章类别表
// $query->joinWith(['author' => function($query) { $query->from(['author' => 'users']); }]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 2,
],
]);
// 从参数的数据中加载过滤条件,并验证
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// 增加过滤条件来调整查询对象
$query->andFilterWhere([
// 'cname' => $this->cate.cname,
'title' => $this->title,
]);
$query->andFilterWhere(['like', 'title', $this->title]);
//$query->andFilterWhere(['like', 'cate.cname', $this->cname]) ;
return $dataProvider;
}
}
二、分页使用
方式一
首先在控制器的动作中,创建分页对象并且为其填充数据:
<?php
//other code
use yii\data\Pagination;
public function actionArticlelist()
{
//分页读取类别数据
$model = Article::find()->with('cate');
$pagination = new Pagination([
'defaultPageSize' => 3,
'totalCount' => $model->count(),
]);
$model = $model->orderBy('id ASC')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'model' => $model,
'pagination' => $pagination,
]);
}
?>
其次在视图中我们输出的模板为当前页并通过分页对象链接到该页:
<?php
use yii\widgets\LinkPager;
use yii\helpers\Html;
use yii\helpers\Url;
//other code
foreach ($models as $model) {
// 在这里显示 $model
}
// 显示分页
echo LinkPager::widget([
'pagination' => $pagination,
'firstPageLabel'=>"First",
'prevPageLabel'=>'Prev',
'nextPageLabel'=>'Next',
'lastPageLabel'=>'Last',
]);
?>
方式二
控制器:
<?php
$query = Article::find()->with('cate');
$provider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 3,
],
'sort' => [
'defaultOrder' => [
//'created_at' => SORT_DESC,
//'title' => SORT_ASC,
]
],
]);
return $this->render('index', [
'model' => $query,
'dataProvider' => $provider
]);
?>
视图:
<?php
use yii\grid\GridView;
echo GridView::widget([
'dataProvider' => $dataProvider,
//每列都有搜索框 控制器传过来$searchModel = new ArticleSearch();
//'filterModel' => $searchModel,
'layout'=> '{items}<div class="text-right tooltip-demo">{pager}</div>',
'pager'=>[
//'options'=>['class'=>'hidden']//关闭自带分页
'firstPageLabel'=>"First",
'prevPageLabel'=>'Prev',
'nextPageLabel'=>'Next',
'lastPageLabel'=>'Last',
],
'columns' => [
//['class' => 'yii\grid\SerialColumn'],//序列号从1开始
// 数据提供者中所含数据所定义的简单的列
// 使用的是模型的列的数据
'id',
'username',
['label'=>'文章类别', /*'attribute' => 'cid',产生一个a标签,点击可排序*/ 'value' => 'cate.cname' ],
['label'=>'发布日期','format' => ['date', 'php:Y-m-d'],'value' => 'created_at'],
// 更复杂的列数据
['label'=>'封面图','format'=>'raw','value'=>function($m){
return Html::img($m->cover,['class' => 'img-circle','width' => 30]);
}],
[
'class' => 'yii\grid\DataColumn', //由于是默认类型,可以省略
'value' => function ($data) {
return $data->name;
// 如果是数组数据则为 $data['name'] ,例如,使用
SqlDataProvider 的情形。
},
],
[
'class' => 'yii\grid\ActionColumn',
'header' => '操作',
'template' => '{delete} {update}',//只需要展示删除和更新
/*'headerOptions' => ['width' => '80'],*/
'buttons' => [
'delete' => function($url, $model, $key){
return Html::a('<i class="glyphicon glyphicon-trash"></i> 删除',
['artdel', 'id' => $key],
['class' => 'btn btn-default btn-xs',
'data' => ['confirm' => '你确定要删除文章吗?',]
]);
},
'update' => function($url, $model, $key){
return Html::a('<i class="fa fa-file"></i> 更新',
['artedit', 'id' => $key],
['class' => 'btn btn-default btn-xs']);
},
],
],
],
]);
?>
三、搜索带分页功能
创建搜索模型(前面己做)
控制传入数据
视图显示
控制器代码:
<?php
public function actionIndex()
{
$searchModel = new ArticleSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
?>
视图:
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
'id' => 'cateadd-form',
'options' => ['class' => 'form-horizontal'],
]); ?>
<?= $form->field($searchModel, 'title',[
'options'=>['class'=>''],
'inputOptions' => ['placeholder' => '文章搜索','class' => 'input-sm form-control'],
])->label(false) ?>
<span class="input-group-btn">
<?= Html::submitButton('Go!', ['class' => 'btn btn-sm btn-primary']) ?>
</span>
<?php ActiveForm::end(); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'layout'=> '{items}<div class="text-right tooltip-demo">{pager}</div>',
'pager'=>[
//'options'=>['class'=>'hidden']//关闭自带分页
'firstPageLabel'=>"First",
'prevPageLabel'=>'Prev',
'nextPageLabel'=>'Next',
'lastPageLabel'=>'Last',
],
//这部分和上面的分页是一样的
yii2-搜索带分页,分页的两种方式的更多相关文章
- 自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用
闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分 ...
- bootstrap-paginator分页插件的两种使用方式
分页有两种方式: 1. 前台分页:ajax一次请求获取全部数据,适合少量数据(万条数据以下): $.ajax({ type: "GET", url: "",// ...
- bootstrap table分页(前后端两种方式实现)
bootstrap table分页的两种方式: 前端分页:一次性从数据库查询所有的数据,在前端进行分页(数据量小的时候或者逻辑处理不复杂的话可以使用前端分页) 服务器分页:每次只查询当前页面加载所需要 ...
- 基于layPage分页插件浅析两种分页方式
最近在开发过程中经常用到分页,今天挤出些时间来捋一捋自己的经验 在web开发中,一般显示数据列表页时,我们会用到分页控件来显示数据.采用分页一般基于两种不同的需求,一种是数据量不算很大,但是在页面展示 ...
- 模块导入及使用,关键字,模块搜索路径,python文件的两种用途
06.05自我总结 一.模块导入及使用 1.模块导入的两种方式 我们拿time模块并使用其中的time功能进行举例 a)第一种 import time print(time.time) import首 ...
- Sql Server 聚集索引扫描 Scan Direction的两种方式------FORWARD 和 BACKWARD
最近发现一个分页查询存储过程中的的一个SQL语句,当聚集索引列的排序方式不同的时候,效率差别达到数十倍,让我感到非常吃惊 由此引发出来分页查询的情况下对大表做Clustered Scan的时候, 不同 ...
- 传递引用类型参数的两种方式(转自 MSDN)
引用类型的变量不直接包含其数据:它包含的是对其数据的引用.当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值(更改属性的值),但是无法更改引用本身的值:也就是说,不能使用相同的引 ...
- pb对Web Service的操作可使用两种方式实现
从PB8.0/9.0开始,就已经提供Web Service Proxy功能,能够直接进行相关程序的编写. 但是,部分老项目使用PB6.5开发 研究后发现,其实PB6.5要操作Web Service也挺 ...
- 在springboot中使用Mybatis Generator的两种方式
介绍 Mybatis Generator(MBG)是Mybatis的一个代码生成工具.MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率.如果需要联合查询仍然需要手写sql. ...
- 两种方式,花五分钟就能构建一个 Spring Boot 应用
前言 Spring Boot 的好处自然不必多说,对于想要从事 Java 工作的朋友们来说,可谓是必学的技能. 在我看来,它的优势就是多快好省. 功能多,很多常用的能力都有集成: 接入快,简单的几行代 ...
随机推荐
- Unix网络编程--卷二:FAQ
1.编译unpipc库. 执行./configure时报错: checking host system type... Invalid configuration `x86_64-pc-linux-g ...
- PetaPoco的几个特性
在PetaPoco中,Brad并没有定义太多Attribute来修饰Models或Fields.这些为数不多的几个Attribute如下: ColumnAttribute ExplicitColumn ...
- ajax (返回类型:text)
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- centos7 nginx配置httpsCenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx环境部署(二)
1.yum安装nginx 下载对应当前系统版本的nginx包(package) # wget http://nginx.org/packages/centos/7/noarch/RPMS/ngin ...
- 《BI那点儿事》数据仓库建模:星型模式、雪片模式
数据仓库建模 — 星型模式Example of Star Schema 数据仓库建模 — 雪片模式Example of Snowflake Schema 节省存储空间 一定程度上的范式 星形 vs.雪 ...
- Flex debug版本浏览器选定问题
原来都用IE进行调试的,今天安装了火狐浏览器,结果出现调试器找不到的错误,如下图 需要做下面设置 "窗口"—>"首选参数",下图位置勾选项改为IE,问题就 ...
- (六)文件操作的主要接口API
1.什么是操作系统API (1)API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用. (2)应用层程序通过调用API来调用操作系统中的各种功能,来干活. (3)学习一个操作系统 ...
- linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...
- stm32cube--通用定时器--输入捕获
用定时器输入捕获做红外线接收实验.(此次试验以通道2为例) ①stm32cube配置 ② ③ ④程序中主要用到的输入捕获相关寄存器 uint16_t tim_sr,tim_ccer,tim_ccr; ...
- tfs 分支
集团-IT部张强 11:15:211.主干时刻处于稳定状态,随时可以发布.设专门人员对主干代码进行管理,普通开发人员只读. 2.为开发任务建立开发分支.常规的可以以小组为单位建立分支,较大的任务可以建 ...