


Yii2 implémente la pagination, exemple de fonction de pagination avec recherche
Jan 13, 2017 pm 03:53 PM1. Configuration du modèle
L'exemple utilisera trois modèles. La table des catégories d'articles et la table des articles peuvent être générées avec gii, et la dernière est le modèle de vérification de recherche. Parmi eux, nous ne parlons que de la prochaine table commune et de la vérification de la recherche. Aucune autre opération n'est requise.
1. Association de table d'articles
<?php //...other code //關(guān)聯(lián) public function getCate(){ return $this->hasOne(ArticleCate::className(),['id' => 'cid']); } ?>
2. Modèle de recherche
common/models/search/Create 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ù)中加載過濾條件,并驗證 $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; } }
2. Utiliser la pagination
Méthode 1
Tout d'abord, dans l'action du contr?leur, créez la pagination objet et remplissez-le avec des données?:
<?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, ]); } ?>
Deuxièmement, dans la vue, le modèle que nous produisons est la page actuelle et est lié à la page via la pagination objet :
<?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', ]); ?>
Méthode 2
Contr?leur :
<?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 ]); ?>
Vue :
<?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)生一個a標簽,點擊可排序*/ 'value' => 'cate.cname' ], ['label'=>'發(fā)布日期','format' => ['date', 'php:Y-m-d'],'value' => 'created_at'], // 更復雜的列數(shù)據(jù) ['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; // 如果是數(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' => '你確定要刪除文章嗎?',] ]); }, 'update' => function($url, $model, $key){ return Html::a('<i class="fa fa-file"></i> 更新', ['artedit', 'id' => $key], ['class' => 'btn btn-default btn-xs']); }, ], ], ], ]); ?>
3. Recherche avec fonction de pagination
Créer un modèle de recherche (déjà fait auparavant)
Contr?ler les données entrantes
Afficher le code du contr?leur d'affichage?:
<?php public function actionIndex() { $searchModel = new ArticleSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } ?>
Afficher?:
<?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', ], //這部分和上面的分頁是一樣的
Ce qui précède est Tout le contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun, et j'espère également que tout le monde soutiendra le site Web PHP chinois.
Pour plus d'implémentations yii2 de la pagination, des exemples de fonctions de pagination avec recherche et des articles connexes, veuillez faire attention au site Web PHP chinois?!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

TheyieldKeywordInc # SimplifieSiteratorCreationyByAutomAticygeneratingastateMArnEtHaTenablesLayEvaluation.1.itallowsreturningItemSonEatatimeusingyElDreturn, PausingExecutionbetweenEachItem, qui estsidéalforlargeordynynamicesences.yieldbreakCanbem, qui estsidéalforgargeordynamicSequences.yieldbreakCanbenem, qui estsidéal pour la réduction

DependencyInjection (DI) Inc # IsadesignPatterntHatenhancesmodularité, testabilité et responsabilité par la fa?on dont les dépenses de contr?le

Le r?le d'idisposable et de l'utilisation dans C # est de gérer efficacement et de manière déterministe des ressources non gérées. 1. IDisposable fournit la méthode Dispose (), afin que la classe puisse clairement définir comment libérer des ressources non gérées; 2. L'instruction d'utilisation garantit que Disser () est automatiquement appelé lorsque l'objet est hors de portée, simplifiant la gestion des ressources et évitant les fuites; 3. Lorsque vous l'utilisez, veuillez noter que l'objet doit implémenter iDisposable, peut déclarer plusieurs objets et utiliser toujours en utilisant pour des types tels que StreamReader; 4. Les meilleures pratiques courantes incluent ne pas s'appuyer sur les destructeurs pour nettoyer, gérer correctement les objets imbriqués et mettre en ?uvre le modèle de disposition (bool).

LambdaExpressionsandLinqsimpplifyDatamanipulationIn # byenablingConcise, lisible et efficacecode.1.LambdaExpressionsallowinlineFunctionDctiondfinitions, faisant en sorte que

NullableReferenceTypes (NRTS) Inc # 8 HelpCatchNullReferenceExceptionErrorSatCompileTimeByMakingreferenceTySnon NullableByDefault, obligeant la disposition de laclaration

Quatre problèmes "anti-motifs" courants dans le développement C # doivent être évités. Premièrement, l'utilisation déraisonnable d'Async / Await conduit à des impasses ou à une dégradation des performances. Nous devons adhérer au principe de l'asynchrone complète, configurer la configurationaWait (false) et standardiser la dénomination; Deuxièmement, une dépendance excessive à l'égard de la VAR affecte la lisibilité et déclare et unifie explicitement les spécifications de l'équipe lorsque le type n'est pas clair; Troisièmement, l'utilisation incorrecte de la gestion des dispositions et des ressources provoque des fuites, et l'instruction d'utilisation doit être utilisée correctement et le mode standard IDISPOSable doit être mis en ?uvre; Quatrièmement, l'abus des classes statiques ou des singletons provoque des difficultés de test, et la priorité devrait être accordée à l'injection de dépendance, à l'état sans état ou au cycle de vie géré par des conteneurs. éviter ces malentendus peut considérablement améliorer la qualité et la maintenance du code.

Span et la mémoire améliorent les performances C # en réduisant l'allocation de mémoire. 1. Span évite la copie du tableau et fournit des références légères à la mémoire existante, ce qui convient aux protocoles binaires d'analyse, aux opérations de cha?ne et à la gestion des tampons haute performance; 2. La mémoire prend en charge le passage des tranches de mémoire sur les méthodes asynchrones, qui conviennent aux scénarios où des cycles de vie plus flexibles sont nécessaires; 3. Les deux réduisent la pression GC, optimisent les performances en réutilisant les tampons et en évitant la copie temporaire; 4. La portée est limitée à l'utilisation sur la pile et ne peut pas être stockée dans les classes ou utilisée dans des méthodes asynchrones. Soyez prudent pour éviter les opérations de réaffectation telles que Call.ToArray ().

Le principe solide est cinq principes de conception pour améliorer la maintenabilité et l'évolutivité du code dans la programmation orientée objet. Ce sont: 1. Le principe de responsabilité unique (SRP) exige que la classe n'assume qu'une seule responsabilité, comme la séparation de la génération de rapports et l'envoi d'e-mails; 2. Le principe d'ouverture et de cl?ture (OCP) souligne que l'extension est prise en charge par des interfaces ou des classes abstraites sans modifier le code d'origine, comme l'utilisation de l'interface ishape pour réaliser le calcul de la zone de différents graphiques; 3. Le principe de remplacement de Richter (LSP) exige que la sous-classe puisse remplacer la classe parent sans détruire la logique, comme le carré ne doit pas hériter à tort du rectangle, entra?nant un comportement anormal; 4. Le principe d'isolement d'interface (ISP) préconise la définition des interfaces à grain fin, telles que les fonctions d'impression et de balayage divisées pour éviter les dépendances redondantes; 5. Le principe d'inversion de dépendance (DIP) préconise le
