一、模型配置
事例會用到三個(gè)models。文章類別表和文章表用gii生成下即可,最后一個(gè)是搜索驗(yàn)證模型。其中,只講下一個(gè)聯(lián)表和搜索驗(yàn)證。其他不用操作。
1.文章表關(guān)聯(lián)
<?php //...other code //關(guān)聯(lián) 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']);//關(guān)聯(lián)文章類別表 // $query->joinWith(['author' => function($query) { $query->from(['author' => 'users']); }]); $dataProvider = new ActiveDataProvider([ 'query' => $query, 'pagination' => [ 'pageSize' => 2, ], ]); // 從參數(shù)的數(shù)據(jù)中加載過濾條件,并驗(yàn)證 $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; } // 增加過濾條件來調(diào)整查詢對象 $query->andFilterWhere([ // 'cname' => $this->cate.cname, 'title' => $this->title, ]); $query->andFilterWhere(['like', 'title', $this->title]); //$query->andFilterWhere(['like', 'cate.cname', $this->cname]) ; return $dataProvider; } }
二、分頁使用
方式一
首先在控制器的動(dòng)作中,創(chuàng)建分頁對象并且為其填充數(shù)據(jù):
<?php //other code use yii\data\Pagination; public function actionArticlelist() { //分頁讀取類別數(shù)據(jù) $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, ]); } ?>
其次在視圖中我們輸出的模板為當(dāng)前頁并通過分頁對象鏈接到該頁:
<?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']//關(guān)閉自帶分頁 'firstPageLabel'=>"First", 'prevPageLabel'=>'Prev', 'nextPageLabel'=>'Next', 'lastPageLabel'=>'Last', ], 'columns' => [ //['class' => 'yii\grid\SerialColumn'],//序列號從1開始 // 數(shù)據(jù)提供者中所含數(shù)據(jù)所定義的簡單的列 // 使用的是模型的列的數(shù)據(jù) 'id', 'username', ['label'=>'文章類別', /*'attribute' => 'cid',產(chǎn)生一個(gè)a標(biāo)簽,點(diǎn)擊可排序*/ 'value' => 'cate.cname' ], ['label'=>'發(fā)布日期','format' => ['date', 'php:Y-m-d'],'value' => 'created_at'], // 更復(fù)雜的列數(shù)據(jù) ['label'=>'封面圖','format'=>'raw','value'=>function($m){ return Html::img($m->cover,['class' => 'img-circle','width' => 30]); }], [ 'class' => 'yii\grid\DataColumn', //由于是默認(rèn)類型,可以省略 'value' => function ($data) { return $data->name; // 如果是數(shù)組數(shù)據(jù)則為 $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' => '你確定要?jiǎng)h除文章嗎?',] ]); }, '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)建搜索模型(前面己做)
控制傳入數(shù)據(jù)
視圖顯示控制器代碼:
<?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']//關(guān)閉自帶分頁 'firstPageLabel'=>"First", 'prevPageLabel'=>'Prev', 'nextPageLabel'=>'Next', 'lastPageLabel'=>'Last', ], //這部分和上面的分頁是一樣的
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持PHP中文網(wǎng)。
更多yii2實(shí)現(xiàn)分頁,帶搜索的分頁功能示例相關(guān)文章請關(guān)注PHP中文網(wǎng)!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

TheyieldkeywordinC#simplifiesiteratorcreationbyautomaticallygeneratingastatemachinethatenableslazyevaluation.1.Itallowsreturningitemsoneatatimeusingyieldreturn,pausingexecutionbetweeneachitem,whichisidealforlargeordynamicsequences.2.yieldbreakcanbeus

DependencyInjection(DI)inC#isadesignpatternthatenhancesmodularity,testability,andmaintainabilitybyallowingclassestoreceivedependenciesexternally.1.DIpromotesloosecouplingbydecouplingobjectcreationfromusage.2.Itsimplifiestestingthroughmockobjectinject

Peranan idisposable dan menggunakan dalam C# adalah dengan cekap dan deterministik menguruskan sumber yang tidak diurus. 1. Idisposable menyediakan kaedah pelupusan (), supaya kelas dapat dengan jelas menentukan cara melepaskan sumber yang tidak diurus; 2. Pernyataan yang menggunakan memastikan yang melupuskan () secara automatik dipanggil apabila objek itu keluar dari skop, memudahkan pengurusan sumber dan mengelakkan kebocoran; 3. Apabila menggunakannya, sila ambil perhatian bahawa objek mesti melaksanakan idisposable, boleh mengisytiharkan pelbagai objek, dan harus selalu menggunakan menggunakan jenis seperti Streamreader; 4. Amalan terbaik biasa termasuk tidak bergantung kepada pemusnah untuk membersihkan, mengendalikan objek bersarang dengan betul, dan melaksanakan corak pelupusan (bool).

Lambdaexpressionsandlinqsimplifydatamanipulationinc#byenablingconcise, boleh dibaca, andefficientcode.1.LambdaExpressionsAllowinFunctionDefinitions, MakingeasierToPasslogicasArgumentsForfiltering, transforming, dangregatasi

NullableReferenceTypes (NRTS) Inc#8 HelpCatchNulleFerenceExceptionErrorsatCompileTimeByMakeRereCetypesNon-nullByDefault, MemerlukanExplicitDeclarationFornulability.nrtsmustBeenableDile.csprojfileShileHenableShenabeShen

Empat masalah "anti-corak" dalam pembangunan C# perlu dielakkan. Pertama, penggunaan async/menunggu yang tidak munasabah membawa kepada kebuntuan atau kemerosotan prestasi. Kita harus mematuhi prinsip asynchronousness penuh, mengkonfigurasi configureAwait (palsu) dan menyeragamkan penamaan; Kedua, kebergantungan yang berlebihan terhadap VAR mempengaruhi kebolehbacaan, dan secara eksplisit mengisytiharkan dan menyatukan spesifikasi pasukan apabila jenisnya tidak jelas; Ketiga, penggunaan pelupusan dan pengurusan sumber yang tidak betul menyebabkan kebocoran, dan pernyataan penggunaan harus digunakan dengan betul dan mod standard idisposable harus dilaksanakan; Keempat, penyalahgunaan kelas statik atau singleton menyebabkan kesukaran ujian, dan keutamaan harus diberikan kepada suntikan ketergantungan, ketenteraan, atau kitaran hayat yang diuruskan oleh bekas. Mengelakkan salah faham ini dapat meningkatkan kualiti dan penyelenggaraan kod dengan ketara.

Span dan memori meningkatkan prestasi C# dengan mengurangkan peruntukan memori. 1. Span mengelakkan penyalinan array dan memberikan rujukan cahaya kepada memori yang sedia ada, yang sesuai untuk parsing protokol binari, operasi rentetan dan pengurusan penampan berprestasi tinggi; 2. Memori menyokong lulus irisan memori merentasi kaedah tak segerak, yang sesuai untuk senario di mana kitaran hayat yang lebih fleksibel diperlukan; 3. Kedua -duanya mengurangkan tekanan GC, mengoptimumkan prestasi dengan menggunakan semula buffer dan mengelakkan penyalinan sementara; 4. Span adalah terhad untuk digunakan pada timbunan dan tidak dapat disimpan dalam kelas atau digunakan dalam kaedah asynchronous. Berhati -hati untuk mengelakkan operasi penugasan semula seperti calls.toarray ().

Prinsip pepejal adalah lima prinsip reka bentuk untuk meningkatkan pemeliharaan kod dan skalabilitas dalam pengaturcaraan berorientasikan objek. Mereka adalah: 1. Prinsip Tanggungjawab Tunggal (SRP) menghendaki kelas hanya menganggap satu tanggungjawab, seperti memisahkan generasi laporan dan menghantar e -mel; 2. Prinsip pembukaan dan penutupan (OCP) menekankan bahawa lanjutan disokong melalui antara muka atau kelas abstrak tanpa mengubah kod asal, seperti menggunakan antara muka ishape untuk merealisasikan pengiraan kawasan grafik yang berbeza; 3. Prinsip Penggantian Richter (LSP) menghendaki subkelas boleh menggantikan kelas induk tanpa memusnahkan logik, seperti persegi tidak boleh tersilap mewarisi segi empat tepat, mengakibatkan tingkah laku yang tidak normal; 4. Prinsip Pengasingan Antara Muka (ISP) menganjurkan definisi antara muka halus, seperti percetakan dan fungsi pengimbasan untuk mengelakkan kebergantungan yang berlebihan; 5. Prinsip Inversi Ketergantungan (DIP) menganjurkan
