找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 771|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2617

主题

2617

帖子

7789

积分

论坛元老

Rank: 8Rank: 8

积分
7789
跳转到指定楼层
楼主
发表于 2018-2-14 05:29:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            一、模型配置
事例会用到三个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',
]);
?>
方式二
控制器:
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',
              ],
           //这部分和上面的分页是一样的
    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
                
                
    您可能感兴趣的文章:
  • Yii框架结合sphinx,Ajax实现搜索分页功能示例
  • YII框架中搜索分页jQuery写法详解
  • yii框架搜索分页modle写法
  • 详解Yii2.0使用AR联表查询实例
  • Yii 2.0实现联表查询加搜索分页的方法示例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端