0

0

yii2实现分页,带搜索的分页功能示例

高洛峰

高洛峰

发布时间:2017-01-13 15:53:43

|

1499人浏览过

|

来源于php中文网

原创

一、模型配置

事例会用到三个models。文章类别表和文章表用gii生成下即可,最后一个是搜索验证模型。其中,只讲下一个联表和搜索验证。其他不用操作。

1.文章表关联

hasOne(ArticleCate::className(),['id' => 'cid']);
  }
?>

2.搜索模型

common/models/search/创建ArticleSearch.php

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;
  }
}

   

二、分页使用

方式一

首先在控制器的动作中,创建分页对象并且为其填充数据:

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,
    ]);
  }
?>

   

其次在视图中我们输出的模板为当前页并通过分页对象链接到该页:

 $pagination,
  'firstPageLabel'=>"First",
  'prevPageLabel'=>'Prev',
  'nextPageLabel'=>'Next',
  'lastPageLabel'=>'Last',
]);
?>

方式二

控制器:

jQuery文字高亮过滤插件jcTextHighlighterFilter
jQuery文字高亮过滤插件jcTextHighlighterFilter

jcTextHighlighterFilter是一款文字高亮过滤插件,可以实现用户输入字符后页面上指定区域高亮显示,当然此插件也可以部分代替浏览器自带的搜索功能。

下载
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
    ]);
?>

   

视图:

 $dataProvider,
  //每列都有搜索框 控制器传过来$searchModel = new ArticleSearch();
  //'filterModel' => $searchModel,
  'layout'=> '{items}
{pager}
', '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(' 删除', ['artdel', 'id' => $key], ['class' => 'btn btn-default btn-xs', 'data' => ['confirm' => '你确定要删除文章吗?',] ]); }, 'update' => function($url, $model, $key){ return Html::a(' 更新', ['artedit', 'id' => $key], ['class' => 'btn btn-default btn-xs']); }, ], ], ], ]); ?>

   

三、搜索带分页功能

创建搜索模型(前面己做)

控制传入数据

视图显示控制器代码:

search(Yii::$app->request->queryParams);
 
  return $this->render('index', [
    'searchModel' => $searchModel,
    'dataProvider' => $dataProvider,
  ]);
 }
?>

视图:

 ['index'],
   'method' => 'get',
   'id' => 'cateadd-form',
   'options' => ['class' => 'form-horizontal'],
]); ?>
           
field($searchModel, 'title',[
   'options'=>['class'=>''],
   'inputOptions' => ['placeholder' => '文章搜索','class' => 'input-sm form-control'],
])->label(false) ?>
   'btn btn-sm btn-primary']) ?>

 $dataProvider,
          'layout'=> '{items}
{pager}
', 'pager'=>[ //'options'=>['class'=>'hidden']//关闭自带分页 'firstPageLabel'=>"First", 'prevPageLabel'=>'Prev', 'nextPageLabel'=>'Next', 'lastPageLabel'=>'Last', ], //这部分和上面的分页是一样的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多yii2实现分页,带搜索的分页功能示例相关文章请关注PHP中文网!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_前端开发
第二十四期_前端开发

共161课时 | 4.4万人学习

UNI-APP开发(仿饿了么)
UNI-APP开发(仿饿了么)

共32课时 | 8.8万人学习

CSS梅兰商城网页设计项目视频教程
CSS梅兰商城网页设计项目视频教程

共18课时 | 5.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号