国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison développement back-end Tutoriel C#.Net Yii2 implémente la pagination, exemple de fonction de pagination avec recherche

Yii2 implémente la pagination, exemple de fonction de pagination avec recherche

Jan 13, 2017 pm 03:53 PM

1. 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(),[&#39;id&#39; => &#39;cid&#39;]);
  }
?>

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 [
      [[&#39;cid&#39;,&#39;created_at&#39;, &#39;updated_at&#39;], &#39;integer&#39;],
      [[&#39;id&#39;, &#39;desc&#39;,&#39;title&#39;,&#39;cover&#39;,&#39;content&#39;], &#39;safe&#39;],
    ];
  }
 
  /**
   * @inheritdoc
   */
  public function scenarios()
  {
    // bypass scenarios() implementation in the parent class
    return Model::scenarios();
  }
 
  //搜索
  public function search($params)
  {
    $query = Article::find();
    // $query->joinWith([&#39;cate&#39;]);//關(guān)聯(lián)文章類別表
    // $query->joinWith([&#39;author&#39; => function($query) { $query->from([&#39;author&#39; => &#39;users&#39;]); }]);
 
    $dataProvider = new ActiveDataProvider([
      &#39;query&#39; => $query,
      &#39;pagination&#39; => [
        &#39;pageSize&#39; => 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(&#39;0=1&#39;);
      return $dataProvider;
    }
 
    // 增加過濾條件來調(diào)整查詢對象
    $query->andFilterWhere([
      // &#39;cname&#39; => $this->cate.cname,
      &#39;title&#39; => $this->title,
    ]);
 
    $query->andFilterWhere([&#39;like&#39;, &#39;title&#39;, $this->title]);
    //$query->andFilterWhere([&#39;like&#39;, &#39;cate.cname&#39;, $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(&#39;cate&#39;);
    $pagination = new Pagination([
      &#39;defaultPageSize&#39; => 3,
      &#39;totalCount&#39; => $model->count(),
    ]);
 
    $model = $model->orderBy(&#39;id ASC&#39;)
      ->offset($pagination->offset)
      ->limit($pagination->limit)
      ->all();
 
    return $this->render(&#39;index&#39;, [
      &#39;model&#39; => $model,
      &#39;pagination&#39; => $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([
  &#39;pagination&#39; => $pagination,
  &#39;firstPageLabel&#39;=>"First",
  &#39;prevPageLabel&#39;=>&#39;Prev&#39;,
  &#39;nextPageLabel&#39;=>&#39;Next&#39;,
  &#39;lastPageLabel&#39;=>&#39;Last&#39;,
]);
?>

Méthode 2

Contr?leur :

<?php
    $query = Article::find()->with(&#39;cate&#39;);
 
    $provider = new ActiveDataProvider([
      &#39;query&#39; => $query,
      &#39;pagination&#39; => [
        &#39;pageSize&#39; => 3,
      ],
      &#39;sort&#39; => [
        &#39;defaultOrder&#39; => [
          //&#39;created_at&#39; => SORT_DESC,
          //&#39;title&#39; => SORT_ASC,
        ]
      ],
    ]);
    return $this->render(&#39;index&#39;, [
      &#39;model&#39; => $query,
      &#39;dataProvider&#39; => $provider
    ]);
?>

Vue :

<?php
use yii\grid\GridView;
echo GridView::widget([
  &#39;dataProvider&#39; => $dataProvider,
  //每列都有搜索框 控制器傳過來$searchModel = new ArticleSearch();
  //&#39;filterModel&#39; => $searchModel,
  &#39;layout&#39;=> &#39;{items}<div class="text-right tooltip-demo">{pager}</div>&#39;,
   &#39;pager&#39;=>[
        //&#39;options&#39;=>[&#39;class&#39;=>&#39;hidden&#39;]//關(guān)閉自帶分頁
        &#39;firstPageLabel&#39;=>"First",
        &#39;prevPageLabel&#39;=>&#39;Prev&#39;,
        &#39;nextPageLabel&#39;=>&#39;Next&#39;,
         &#39;lastPageLabel&#39;=>&#39;Last&#39;,
   ],
  &#39;columns&#39; => [
    //[&#39;class&#39; => &#39;yii\grid\SerialColumn&#39;],//序列號從1開始
    // 數(shù)據(jù)提供者中所含數(shù)據(jù)所定義的簡單的列
    // 使用的是模型的列的數(shù)據(jù)
    &#39;id&#39;,
    &#39;username&#39;,
    [&#39;label&#39;=>&#39;文章類別&#39;, /*&#39;attribute&#39; => &#39;cid&#39;,產(chǎn)生一個a標簽,點擊可排序*/ &#39;value&#39; => &#39;cate.cname&#39; ],
    [&#39;label&#39;=>&#39;發(fā)布日期&#39;,&#39;format&#39; => [&#39;date&#39;, &#39;php:Y-m-d&#39;],&#39;value&#39; => &#39;created_at&#39;],
    // 更復雜的列數(shù)據(jù)
    [&#39;label&#39;=>&#39;封面圖&#39;,&#39;format&#39;=>&#39;raw&#39;,&#39;value&#39;=>function($m){
     return Html::img($m->cover,[&#39;class&#39; => &#39;img-circle&#39;,&#39;width&#39; => 30]);
    }],
    [
      &#39;class&#39; => &#39;yii\grid\DataColumn&#39;, //由于是默認類型,可以省略
      &#39;value&#39; => function ($data) {
        return $data->name;
        // 如果是數(shù)組數(shù)據(jù)則為 $data[&#39;name&#39;] ,例如,使用
 
SqlDataProvider 的情形。
      },
    ],
    [
     &#39;class&#39; => &#39;yii\grid\ActionColumn&#39;,
     &#39;header&#39; => &#39;操作&#39;,
     &#39;template&#39; => &#39;{delete} {update}&#39;,//只需要展示刪除和更新
     /*&#39;headerOptions&#39; => [&#39;width&#39; => &#39;80&#39;],*/
     &#39;buttons&#39; => [
       &#39;delete&#39; => function($url, $model, $key){
           return Html::a(&#39;<i class="glyphicon glyphicon-trash"></i> 刪除&#39;,
               [&#39;artdel&#39;, &#39;id&#39; => $key],
               [&#39;class&#39; => &#39;btn btn-default btn-xs&#39;,
               &#39;data&#39; => [&#39;confirm&#39; => &#39;你確定要刪除文章嗎?&#39;,]
               ]);
       },
      &#39;update&#39; => function($url, $model, $key){
           return Html::a(&#39;<i class="fa fa-file"></i> 更新&#39;,
              [&#39;artedit&#39;, &#39;id&#39; => $key],
              [&#39;class&#39; => &#39;btn btn-default btn-xs&#39;]);
       },
      ],
     ],
  ],
]);
?>

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(&#39;index&#39;, [
    &#39;searchModel&#39; => $searchModel,
    &#39;dataProvider&#39; => $dataProvider,
  ]);
 }
?>

Afficher?:

<?php $form = ActiveForm::begin([
  &#39;action&#39; => [&#39;index&#39;],
   &#39;method&#39; => &#39;get&#39;,
   &#39;id&#39; => &#39;cateadd-form&#39;,
   &#39;options&#39; => [&#39;class&#39; => &#39;form-horizontal&#39;],
]); ?>
           
<?= $form->field($searchModel, &#39;title&#39;,[
   &#39;options&#39;=>[&#39;class&#39;=>&#39;&#39;],
   &#39;inputOptions&#39; => [&#39;placeholder&#39; => &#39;文章搜索&#39;,&#39;class&#39; => &#39;input-sm form-control&#39;],
])->label(false) ?>
  <?= Html::submitButton(&#39;Go!&#39;, [&#39;class&#39; => &#39;btn btn-sm btn-primary&#39;]) ?>
<?php ActiveForm::end(); ?>
<?= GridView::widget([
          &#39;dataProvider&#39; => $dataProvider,
          &#39;layout&#39;=> &#39;{items}<div class="text-right tooltip-demo">{pager}</div>&#39;,
          &#39;pager&#39;=>[
            //&#39;options&#39;=>[&#39;class&#39;=>&#39;hidden&#39;]//關(guān)閉自帶分頁
            &#39;firstPageLabel&#39;=>"First",
            &#39;prevPageLabel&#39;=>&#39;Prev&#39;,
            &#39;nextPageLabel&#39;=>&#39;Next&#39;,
            &#39;lastPageLabel&#39;=>&#39;Last&#39;,
          ],
       //這部分和上面的分頁是一樣的

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?!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Quelle est la signification du mot clé de rendement en C # pour créer des itérateurs? Quelle est la signification du mot clé de rendement en C # pour créer des itérateurs? Jun 19, 2025 am 12:17 AM

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

Qu'est-ce que l'injection de dépendance (DI), et comment peut-elle être implémentée en C # (par exemple, en utilisant DI intégrée dans ASP.NET Core)? Qu'est-ce que l'injection de dépendance (DI), et comment peut-elle être implémentée en C # (par exemple, en utilisant DI intégrée dans ASP.NET Core)? Jun 30, 2025 am 02:06 AM

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

Quel est le but de l'interface iDisposable et de l'instruction d'utilisation en C # pour la gestion des ressources? Quel est le but de l'interface iDisposable et de l'instruction d'utilisation en C # pour la gestion des ressources? Jun 27, 2025 am 02:18 AM

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).

Comment les expressions de Lambda et Linq (Language Intégrée Intégrée) améliorent-elles la manipulation des données en C #? Comment les expressions de Lambda et Linq (Language Intégrée Intégrée) améliorent-elles la manipulation des données en C #? Jun 20, 2025 am 12:16 AM

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

Quels sont les types de référence (NRT) nullables en C # 8, et comment aident-ils à prévenir NullReferenceException? Quels sont les types de référence (NRT) nullables en C # 8, et comment aident-ils à prévenir NullReferenceException? Jun 21, 2025 am 12:36 AM

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

Quels sont les pièges ou les anti-motifs communs à éviter lors du développement avec C #? Quels sont les pièges ou les anti-motifs communs à éviter lors du développement avec C #? Jun 23, 2025 am 12:05 AM

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.

Comment Span  et Memory  peuvent-ils être utilisés en C # pour optimiser l'utilisation de la mémoire et réduire les allocations? Comment Span et Memory peuvent-ils être utilisés en C # pour optimiser l'utilisation de la mémoire et réduire les allocations? Jun 18, 2025 am 12:11 AM

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 ().

Pouvez-vous expliquer les principes solides et leur application dans la conception axée sur les objets C #? Pouvez-vous expliquer les principes solides et leur application dans la conception axée sur les objets C #? Jun 25, 2025 am 12:47 AM

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

See all articles