Rumah >rangka kerja php >ThinkPHP >Bagaimana untuk melaksanakan paging dalam thinkphp
ThinkPHP ialah rangka kerja PHP berdasarkan model pembangunan MVC Memandangkan kami sedang membangunkan aplikasi MVC, fungsi paging sangat diperlukan. Jadi, bagaimanakah ThinkPHP melaksanakan paging? Biar saya perkenalkan kepada anda cara ThinkPHP melaksanakan paging.
1. Konsep asas paging ThinkPHP
Paging adalah untuk membahagikan koleksi data yang besar kepada N halaman, supaya pengguna hanya boleh melihat sebahagian daripadanya. Terdapat dua jenis paging dalam ThinkPHP, satu adalah paging biasa dan satu lagi adalah paging AJAX.
Paging biasa bermakna setiap halaman perlu menyegarkan keseluruhan halaman Data diperoleh daripada pelayan melalui kod PHP dan kemudian dikembalikan kepada klien Kaedah interaksi data ini tidak cekap, tetapi ia mudah untuk ditulis .
Paging AJAX adalah untuk meminta data secara tidak segerak melalui bahagian hadapan, dan memindahkan data ke pelayan melalui teknologi Ajax Selepas bahagian pelayan memperoleh data daripada pangkalan data, ia mengembalikan data ke hadapan-. tamat. Kaedah interaksi data ini sangat cekap, tetapi memerlukan penggunaan teknologi hadapan yang lebih kompleks.
2. Cara menggunakan paging dalam ThinkPHP
Secara khususnya, penggunaan paging dalam ThinkPHP terutamanya merangkumi dua modul: Modul model dan modul View. Dalam modul Model, kami menanyakan data daripada pangkalan data dengan menggunakan kelas Pertanyaan ThinkPHP atau kelas Db. Dalam modul View, kami melaksanakan operasi paparan data dengan menggunakan Penomboran kelas paging ThinkPHP dan kawalan Paginator terbina dalam.
Dalam modul Model, pertama sekali kita perlu menanyakan data daripada pangkalan data, dan kemudian menetapkan data mengikut saiz paging Query offset dan kuantiti pertanyaan untuk mengembalikan hanya halaman data yang diperlukan. Operasi khusus adalah seperti berikut:
<?php namespace Home\Model; use Think\Model; class UserModel extends Model{ public function getPageUsers($page=1,$rows=10){ $result = array(); $count = $this->count(); // 获取总记录数 $offset = ($page-1)*$rows; // 查询的起始位置 $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录 $pagination = new \Think\Paginator($count,$rows); // 实例化分页对象 $result['rows'] = $data; $result['pagination'] = $pagination->show(); // 获取分页显示的HTML代码 return $result; } }
Dalam kod di atas, kaedah count() digunakan untuk mendapatkan jumlah bilangan rekod, kaedah had() digunakan untuk mendapatkan rekod semasa halaman, dan kelas Penomboran digunakan untuk membuat instantiate objek paging. Perlu diingat bahawa kaedah had() menyokong operasi rantaian dan boleh digunakan bersama dengan kaedah where() untuk melaksanakan operasi pertanyaan yang lebih kompleks.
Dalam modul View, kita perlu menggunakan kawalan Paginator terbina dalam ThinkPHP untuk memaparkan maklumat halaman dan menggunakan Penomboran kelas paging ThinkPHP untuk menjana kod HTML penomboran. Operasi khusus adalah seperti berikut:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户信息管理</title> <link rel="stylesheet" type="text/css" href="__PUBLIC__/bootstrap/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="panel panel-default"> <div class="panel-heading">用户信息管理</div> <div class="panel-body"> <table class="table table-striped"> <thead> <tr> <th>ID</th> <th>用户名</th> <th>年龄</th> <th>电话</th> <th>邮箱</th> </tr> </thead> <tbody> <?php foreach($users['rows'] as $user):?> <tr> <td><?php echo $user['id'];?></td> <td><?php echo $user['name'];?></td> <td><?php echo $user['age'];?></td> <td><?php echo $user['phone'];?></td> <td><?php echo $user['email'];?></td> </tr> <?php endforeach;?> </tbody> </table> <nav aria-label="Page navigation"> <?php echo $users['pagination'];?> </nav> </div> </div> </div> </body> </html>
Dalam kod di atas, kami terutamanya menggunakan kawalan Paginator dan kelas Penomboran. Dalam kawalan Paginator, kita boleh menetapkan susun atur, gaya, dsb. kawalan. Dalam kelas Penomboran, kami memanggil kaedah show() untuk mendapatkan kod HTML penomboran untuk digunakan oleh kawalan Paginator. Pada masa yang sama, dalam gelung foreach, kami memaparkan tatasusunan $rows yang dipindahkan dari lapisan Model ke jadual.
3. Soalan lazim tentang paging ThinkPHP
Dalam kaedah getPageUsers lapisan Model, kita boleh menetapkan nombor lalai rekod setiap halaman, seperti berikut:
public function getPageUsers($page=1,$rows=10){ ... }
Di mana, $rows mewakili nombor lalai bagi rekod setiap halaman, kami Anda juga boleh terus memasukkan parameter dalam lapisan Lihat untuk menukar bilangan rekod setiap halaman.
Dalam lapisan Paparan, apabila pengguna mengklik pada halaman pertama, nilai parameter $page ialah 1 dan kami perlu menukar julat pertanyaan data dengan sewajarnya. Operasi khusus adalah seperti berikut:
public function getPageUsers($page=1,$rows=10){ $result = array(); $count = $this->count(); // 获取总记录数 $offset = ($page-1)*$rows; // 查询的起始位置 $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录 // 如果是第一页,直接返回第一页的数据 if($page == 1){ $pagination = new \Think\Paginator($count,$rows); $result['rows'] = $data; $result['pagination'] = $pagination->show(); return $result; } // 如果不是第一页,则查询第一页的数据,获取分页HTML代码 $firstPageData = $this->limit(0,$rows)->select(); $pagination = new \Think\Paginator($count,$rows); $result['rows'] = $data; $result['pagination'] = str_replace("1</a>",$firstPageData."</a>",$pagination->show()); return $result; }
Dalam kod di atas, apabila $halaman sama dengan 1, kami terus mengembalikan data halaman pertama. Apabila $page lebih besar daripada 1, kami menanya semula data halaman pertama, mendapatkan kod HTML halaman dan menggantikannya ke dalam "halaman pertama" halaman semasa. Dengan cara ini, anda boleh mengklik butang "Halaman Pertama" pada mana-mana halaman untuk kembali ke halaman pertama data.
Untuk halaman biasa, setiap pusingan halaman memerlukan permintaan semula keseluruhan halaman, yang jelas tidak cekap untuk set data yang besar, jadi kami sering menggunakan teknologi AJAX untuk mencapai halaman tanpa muat semula.
Anda perlu memberi perhatian kepada perkara berikut apabila menggunakan paging AJAX:
(1) Dalam lapisan View, anda perlu menambah kod jQuery yang serupa dengan yang di atas untuk memantau butang paging:
$(function () { // 加载页面时,注册分页事件 $("#page").on('click','a',function(){ var url = $(this).attr('href'); $("#table").load(url); return false; }); });
Dalam kod di atas, kami menambah pendengar acara klik pada butang paging Apabila butang diklik, permintaan AJAX dihantar untuk mengisi semula data ke kedudukan yang sepadan.
(2) Dalam lapisan Model, data format JSON perlu dikembalikan dalam kaedah getPageUsers, seperti berikut:
public function getPageUsers($page=1,$rows=10){ ... $result = array(); $pagination = new \Think\Paginator($count,$rows); $result['rows'] = $data; $result['pagination'] = $pagination->show(); return json_encode($result); }
Fungsi json_encode() digunakan di sini untuk memformat data ke dalam format JSON dikembalikan. Dengan cara ini, data boleh dihuraikan dengan mudah dalam lapisan Lihat.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan paging dalam thinkphp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!