cari
Rumahpembangunan bahagian belakangtutorial phpyii2实现分页和带搜索的分页功能

本篇文章主要介绍了yii2实现分页,带搜索的分页功能示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

一、模型配置

事例会用到三个models。文章类别表和文章表用gii生成下即可,最后一个是搜索验证模型。其中,只讲下一个联表和搜索验证。其他不用操作。

1.文章表关联

<?php
//...other code
//关联
public function getCate(){
    return $this->hasOne(ArticleCate::className(),[&#39;id&#39; => &#39;cid&#39;]);
  }
?>

2.搜索模型

common/models/search/创建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;]);//关联文章类别表
    // $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,
      ],
    ]);
    // 从参数的数据中加载过滤条件,并验证
    $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;
    }

    // 增加过滤条件来调整查询对象
    $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;
  }
}

二、分页使用

方式一

首先在控制器的动作中,创建分页对象并且为其填充数据:

<?php
//other code
use yii\data\Pagination;
public function actionArticlelist()
  {
    //分页读取类别数据
    $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,
    ]);
  }
?>

其次在视图中我们输出的模板为当前页并通过分页对象链接到该页:

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

方式二

控制器:

<?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
    ]);
?>

视图:

<?php
use yii\grid\GridView;
echo GridView::widget([
  &#39;dataProvider&#39; => $dataProvider,
  //每列都有搜索框 控制器传过来$searchModel = new ArticleSearch(); 
  //&#39;filterModel&#39; => $searchModel,
  &#39;layout&#39;=> &#39;{items}<p class="text-right tooltip-demo">{pager}</p>&#39;,
   &#39;pager&#39;=>[
        //&#39;options&#39;=>[&#39;class&#39;=>&#39;hidden&#39;]//关闭自带分页
        &#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开始
    // 数据提供者中所含数据所定义的简单的列
    // 使用的是模型的列的数据
    &#39;id&#39;,
    &#39;username&#39;,
    [&#39;label&#39;=>&#39;文章类别&#39;, /*&#39;attribute&#39; => &#39;cid&#39;,产生一个a标签,点击可排序*/ &#39;value&#39; => &#39;cate.cname&#39; ],
    [&#39;label&#39;=>&#39;发布日期&#39;,&#39;format&#39; => [&#39;date&#39;, &#39;php:Y-m-d&#39;],&#39;value&#39; => &#39;created_at&#39;],
    // 更复杂的列数据
    [&#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; 
        // 如果是数组数据则为 $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;]);
       },
      ],
     ],
  ],
]);
?>

三、搜索带分页功能

  • 创建搜索模型(前面己做)

  • 控制传入数据

  • 视图显示控制器代码:

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

视图:

<?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}<p class="text-right tooltip-demo">{pager}</p>&#39;,
          &#39;pager&#39;=>[
            //&#39;options&#39;=>[&#39;class&#39;=>&#39;hidden&#39;]//关闭自带分页
            &#39;firstPageLabel&#39;=>"First",
            &#39;prevPageLabel&#39;=>&#39;Prev&#39;,
            &#39;nextPageLabel&#39;=>&#39;Next&#39;,
            &#39;lastPageLabel&#39;=>&#39;Last&#39;,
          ],
       //这部分和上面的分页是一样的

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于YII框架中搜索分页jQuery写法

Yii使用CLinkPager进行的分页

Atas ialah kandungan terperinci yii2实现分页和带搜索的分页功能. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Di luar gembar -gembur: Menilai peranan PHP hari iniDi luar gembar -gembur: Menilai peranan PHP hari iniApr 12, 2025 am 12:17 AM

PHP kekal sebagai alat yang kuat dan digunakan secara meluas dalam pengaturcaraan moden, terutamanya dalam bidang pembangunan web. 1) PHP mudah digunakan dan diintegrasikan dengan lancar dengan pangkalan data, dan merupakan pilihan pertama bagi banyak pemaju. 2) Ia menyokong penjanaan kandungan dinamik dan pengaturcaraan berorientasikan objek, sesuai untuk membuat dan mengekalkan laman web dengan cepat. 3) Prestasi PHP dapat ditingkatkan dengan caching dan mengoptimumkan pertanyaan pangkalan data, dan komuniti yang luas dan ekosistem yang kaya menjadikannya masih penting dalam timbunan teknologi hari ini.

Apakah rujukan yang lemah dalam PHP dan bilakah mereka berguna?Apakah rujukan yang lemah dalam PHP dan bilakah mereka berguna?Apr 12, 2025 am 12:13 AM

Dalam PHP, rujukan lemah dilaksanakan melalui kelas lemah dan tidak akan menghalang pemungut sampah daripada menebus objek. Rujukan lemah sesuai untuk senario seperti sistem caching dan pendengar acara. Harus diingat bahawa ia tidak dapat menjamin kelangsungan hidup objek dan pengumpulan sampah mungkin ditangguhkan.

Terangkan kaedah sihir __invoke dalam PHP.Terangkan kaedah sihir __invoke dalam PHP.Apr 12, 2025 am 12:07 AM

Kaedah \ _ \ _ membolehkan objek dipanggil seperti fungsi. 1. Tentukan kaedah \ _ \ _ supaya objek boleh dipanggil. 2. Apabila menggunakan sintaks $ OBJ (...), PHP akan melaksanakan kaedah \ _ \ _ invoke. 3. Sesuai untuk senario seperti pembalakan dan kalkulator, meningkatkan fleksibiliti kod dan kebolehbacaan.

Terangkan serat dalam Php 8.1 untuk keserasian.Terangkan serat dalam Php 8.1 untuk keserasian.Apr 12, 2025 am 12:05 AM

Serat diperkenalkan dalam Php8.1, meningkatkan keupayaan pemprosesan serentak. 1) Serat adalah model konkurensi ringan yang serupa dengan coroutine. 2) Mereka membenarkan pemaju mengawal aliran pelaksanaan tugas secara manual dan sesuai untuk mengendalikan tugas I/O-intensif. 3) Menggunakan serat boleh menulis kod yang lebih cekap dan responsif.

Komuniti PHP: Sumber, Sokongan, dan PembangunanKomuniti PHP: Sumber, Sokongan, dan PembangunanApr 12, 2025 am 12:04 AM

Komuniti PHP menyediakan sumber dan sokongan yang kaya untuk membantu pemaju berkembang. 1) Sumber termasuk dokumentasi rasmi, tutorial, blog dan projek sumber terbuka seperti Laravel dan Symfony. 2) Sokongan boleh didapati melalui saluran StackOverflow, Reddit dan Slack. 3) Trend pembangunan boleh dipelajari dengan mengikuti RFC. 4) Integrasi ke dalam masyarakat dapat dicapai melalui penyertaan aktif, sumbangan kepada kod dan perkongsian pembelajaran.

PHP vs Python: Memahami PerbezaanPHP vs Python: Memahami PerbezaanApr 11, 2025 am 12:15 AM

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

PHP: Adakah ia mati atau hanya menyesuaikan diri?PHP: Adakah ia mati atau hanya menyesuaikan diri?Apr 11, 2025 am 12:13 AM

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.

Masa Depan PHP: Adaptasi dan InovasiMasa Depan PHP: Adaptasi dan InovasiApr 11, 2025 am 12:01 AM

Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini