最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

yii2實現分頁,帶搜索的分頁功能示例

 更新時間:2017年01月07日 18:00:54   作者:路飛  
本篇文章主要介紹了yii2實現分頁,帶搜索的分頁功能示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

一、模型配置

事例會用到三個models。文章類別表和文章表用gii生成下即可,最后一個是搜索驗證模型。其中,只講下一個聯表和搜索驗證。其他不用操作。

1.文章表關聯

<?php
//...other code
//關聯
public function getCate(){
    return $this->hasOne(ArticleCate::className(),['id' => 'cid']);
  }
?>

2.搜索模型

common/models/search/創(chuàng)建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;
  }
}

二、分頁使用

方式一

首先在控制器的動作中,創(chuàng)建分頁對象并且為其填充數據:

<?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'=>'發(fā)布日期','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']);
       },
      ],
     ],
  ],
]);
?>

三、搜索帶分頁功能

  • 創(chuàng)建搜索模型(前面己做)
  • 控制傳入數據
  • 視圖顯示控制器代碼:
<?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) ?>
  <?= Html::submitButton('Go!', ['class' => 'btn btn-sm btn-primary']) ?>
<?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',
          ],
       //這部分和上面的分頁是一樣的

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • laravel框架中間件 except 和 only 的用法示例

    laravel框架中間件 except 和 only 的用法示例

    這篇文章主要介紹了laravel框架中間件 except 和 only 的用法,簡單說明了中間件 except 和 only的功能,并結合實例形式分析了laravel框架中間件 except 和 only 相關使用技巧,需要的朋友可以參考下
    2019-07-07
  • laravel withCount 統計關聯數量的方法

    laravel withCount 統計關聯數量的方法

    今天小編就為大家分享一篇laravel withCount 統計關聯數量的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 珊瑚蟲IP庫淺析

    珊瑚蟲IP庫淺析

    珊瑚蟲IP庫淺析...
    2007-02-02
  • laravel框架上傳圖片實現實時預覽功能

    laravel框架上傳圖片實現實時預覽功能

    今天小編就為大家分享一篇laravel框架上傳圖片實現實時預覽功能,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 深入淺析PHP7.0新特征(五大新特征)

    深入淺析PHP7.0新特征(五大新特征)

    PHP7將在2015年10月正式發(fā)布,PHP7 ,將會是PHP腳本語言的重大版本更新,同時將帶來大幅的性能改進和新的特性,以及改進一些過時功能。該發(fā)布版本將會專注在性能加強,源自PHP版本樹中的phpng分支
    2015-10-10
  • TP5框架安全機制實例分析

    TP5框架安全機制實例分析

    這篇文章主要介紹了TP5框架安全機制,結合實例形式分析了thinkPHP5防止SQL注入以及表單合法性檢測的安全性操作技巧,需要的朋友可以參考下
    2020-04-04
  • PHP開發(fā)框架kohana3 自定義路由設置示例

    PHP開發(fā)框架kohana3 自定義路由設置示例

    這篇文章主要介紹了PHP開發(fā)框架kohana3 自定義路由設置示例,kohana是一個純PHP5的開發(fā)框架,需要的朋友可以參考下
    2014-07-07
  • 利用php做服務器和web前端的界面進行交互

    利用php做服務器和web前端的界面進行交互

    PHP與Web頁面交互是實現PHP網站與用戶交互的重要手段。本篇文章主要介紹了利用php做服務器和web前端的界面進行交互,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • 如何用PHP實現插入排序?

    如何用PHP實現插入排序?

    本篇文章,小編為大家介紹一下關于如何用PHP實現插入排序的方法,有需要的朋友可以參考一下
    2013-04-04
  • laravel日志優(yōu)化實例講解

    laravel日志優(yōu)化實例講解

    這篇文章主要介紹了laravel日志優(yōu)化實例講解,日志是查找代碼問題的重要的文件,有感興趣的同學可以學習下
    2021-03-03

最新評論

南丰县| 建宁县| 仪征市| 东乡| 无锡市| 平谷区| 霍林郭勒市| 乌什县| 开化县| 海城市| 信宜市| 丰宁| 马公市| 江达县| 英德市| 华容县| 建阳市| 吴旗县| 平远县| 双峰县| 汾西县| 桂东县| 平和县| 安宁市| 景谷| 渭源县| 杭州市| 柯坪县| 大关县| 高雄县| 鹰潭市| 报价| 乐亭县| 布拖县| 诸城市| 新田县| 健康| 合江县| 洮南市| 德庆县| 贡嘎县|