国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-04 23:54:18
字體:
來源:轉載
供稿:網友

一、模型配置

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

1.文章表關聯

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

2.搜索模型

common/models/search/創建ArticleSearch.php

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

其次在視圖中我們輸出的模板為當前頁并通過分頁對象鏈接到該頁:

<?phpuse yii/widgets/LinkPager;use yii/helpers/Html;use yii/helpers/Url;//other codeforeach ($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    ]);?>

視圖:

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

三、搜索帶分頁功能

  • 創建搜索模型(前面己做)
  • 控制傳入數據
  • 視圖顯示控制器代碼:
<?phppublic 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',          ],       //這部分和上面的分頁是一樣的

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


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 灵丘县| 绥宁县| 神农架林区| 巩义市| 水城县| 信丰县| 云林县| 乐东| 石台县| 独山县| 朝阳区| 常山县| 姜堰市| 封开县| 剑河县| 夏邑县| 建瓯市| 开鲁县| 和静县| 湘乡市| 手机| 扎鲁特旗| 瑞安市| 乐昌市| 宜丰县| 高青县| 永德县| 抚宁县| 宁陵县| 安溪县| 萝北县| 卫辉市| 宝丰县| 新邵县| 五指山市| 尼木县| 云龙县| 太白县| 和静县| 吴忠市| 灯塔市|