前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Yii2 学习笔记之分页

Yii2 学习笔记之分页

作者头像
guanguans
发布2018-05-09 16:30:47
1.1K0
发布2018-05-09 16:30:47
举报
文章被收录于专栏:琯琯博客

一、使用LinkPager

1.1 模型方式
代码语言:javascript
复制
<?php
// Controller 中写入代码
$query = User::find();
$pagination = new Pagination(['totalCount' => $query->count(), 'defaultPageSize' => 2]);
$models = $query->offset($pagination->offset)->limit($pagination->limit)->all();
return $this->render('test', [
    'models' => $models,
    'pagination' => $pagination,
]);

对应view代码

代码语言:javascript
复制
<?php foreach ($models as $model): ?>
   <?= $model->id; ?>
   <?= $model->username; ?>
   <?= $model->email; ?>
   <br/>
<?php endforeach; ?>

<?php echo LinkPager::widget([
    'pagination' => $pagination,
]); ?>
1.2 SQL方式

当单表无法满足需求时,就需要用到原生SQL进行实现,比如多表级联。 第1步 - SiteController 添加 actionTest() 方法

代码语言:javascript
复制
<?php
public function actionTest(){
    $connection = Yii::$app->db;
    $sql = "SELECT * FROM user";
    $rows = $connection->createCommand($sql)->queryAll();
    $pagination = new Pagination(['totalCount' => count($rows), 'defaultPageSize' => 2]);

    $models = $connection->createCommand($sql." limit ".$pagination->limit." offset ".$pagination->offset."")->queryAll();

    return $this->render('test',[
        'models' => $models,
        'pagination' => $pagination,
    ]);
}

对应view代码

代码语言:javascript
复制
<?php
    use yii\widgets\LinkPager;
?>
<?php foreach ($models as $model): ?>
    <?= $model['id']; ?>
    <?= $model['username']; ?>
    <?= $model['email']; ?>
    <br/>
<?php endforeach; ?>

<?php
    echo LinkPager::widget([
      'pagination' => $pagination,
    ]);
?>

后台经常使用到GridView,因为GridView自带检索、排序、增删改查,很适合后台使用,所以这里讲一讲和GridView的结合。

二、使用 GridView

2.1 模型方式
代码语言:javascript
复制
<?php
// Controller 中写入代码
$dataProvider = new ActiveDataProvider([
	'query' => User::find(),
]);

return $this->render('test', [
	      'dataProvider' => $dataProvider,
    ]);

对应view代码

代码语言:javascript
复制
<?php
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'id',
        'username',
        'email',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>
2.2 SQL方式
代码语言:javascript
复制
<?php
// Controller中写入代码
$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user WHERE status=:status', [':status' => 1])->queryScalar();

// 这里用的是SqlDataProvider,更多可参考([数据提供者](http://www.kancloud.cn/wangking/yii2/211308))
$dataProvider = new SqlDataProvider([
    'sql' => 'SELECT * FROM user WHERE status=:status',
    'params' => [':status' => 1],
    'totalCount' => $count,
    'pagination' => [
         'pageSize' => 20,
    ],
]);

return $this->render('test', [
	  'dataProvider' => $dataProvider,
]);

对应view代码

代码语言:javascript
复制
<?php
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'id',
        'username',
        'email',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

(完)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、使用LinkPager
    • 1.1 模型方式
      • 1.2 SQL方式
      • 二、使用 GridView
        • 2.1 模型方式
          • 2.2 SQL方式
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档