CakePHP ialah rangka kerja PHP yang berkuasa yang menyediakan pembangun dengan banyak alat dan ciri berguna. Salah satu daripadanya ialah penomboran, yang membantu kami membahagikan sejumlah besar data kepada beberapa halaman, menjadikan penyemakan imbas dan manipulasi lebih mudah.
Secara lalai, CakePHP menyediakan beberapa kaedah penomboran asas, tetapi kadangkala anda mungkin perlu mencipta beberapa kaedah penomboran tersuai. Artikel ini akan menunjukkan kepada anda cara membuat penomboran tersuai dalam CakePHP.
Langkah 1: Buat kelas penomboran tersuai
Pertama, kita perlu mencipta kelas penomboran tersuai. Kelas ini akan bertanggungjawab untuk mengendalikan semua logik berkaitan paging. Cipta fail baharu bernama CustomPaginator.php dalam direktori app/Lib/Utility dan tambahkan kod berikut pada fail:
<?php App::uses('PaginatorComponent', 'Controller/Component'); class CustomPaginator extends PaginatorComponent { // Override the default method to customize the pagination logic public function paginate($object = null, $scope = array(), $whitelist = array()) { // Get the current page number $page = isset($this->Controller->request->params['named']['page']) ? $this->Controller->request->params['named']['page'] : 1; // Set the default pagination values $perPage = 10; $start = ($page - 1) * $perPage; // Get the total count of records $count = $object->find('count', array('conditions' => $scope)); // Build the pagination data $result = array( 'count' => $count, 'perPage' => $perPage, 'page' => $page, 'totalPages' => ceil($count / $perPage), 'start' => $start, 'end' => ($start + $perPage) > $count ? $count : ($start + $perPage - 1), 'hasPrevPage' => $page > 1, 'hasNextPage' => ($start + $perPage) < $count ); // Set the pagination data in the controller $this->Controller->set('paging', $result); // Return the paginated records return $object->find('all', array('conditions' => $scope, 'limit' => $perPage, 'offset' => $start)); } }
Kelas penomboran tersuai ini adalah berdasarkan kelas penomboran lalai CakePHP PaginatorComponent. Kami mengatasi kaedah paginate() untuk melaksanakan logik penomboran tersuai. Ia mengambil parameter berikut:
Dalam pelaksanaan kami, kami mula-mula mendapat nombor halaman semasa, dan kemudian menetapkan lalai setiap halaman Nombor rekod dan nombor rekod permulaan. Seterusnya, kami menggunakan kaedah find() untuk mendapatkan jumlah bilangan rekod, dan kemudian mengira jumlah bilangan halaman dan bilangan rekod tamat. Akhir sekali, kami menetapkan semua data paging kepada pembolehubah 'paging' pengawal dan mengembalikan rekod bernombor.
Langkah 2: Instantiate kelas penomboran tersuai
Sekarang kita telah mencipta kelas penomboran tersuai, kita perlu membuat instantiate dalam pengawal. Untuk melakukan ini, kami perlu menambah kod berikut pada pengawal kami:
<?php App::uses('AppController', 'Controller'); App::uses('CustomPaginator', 'Lib/Utility'); class UsersController extends AppController { public $components = array('CustomPaginator'); public $paginate = array('CustomPaginator'); public function index() { // Get all users $this->set('users', $this->CustomPaginator->paginate($this->User)); } }
Kami menggunakan App::uses() untuk memuatkan kelas penomboran tersuai dan kemudian membuat instantiat dalam pengawal. Kami juga menambah kelas penomboran tersuai pada pengawal menggunakan atribut $components dan $paginate.
Dalam tindakan index() kami, kami memanggil $CustomPaginator->paginate() dan menyerahkan objek model Pengguna kami kepadanya. Kami kemudiannya menetapkan data pengguna bernombor ke dalam pembolehubah paparan.
Langkah 3: Buat paparan bernombor
Akhir sekali, kita perlu mencipta paparan untuk memaparkan data bernombor. Tambahkan kod berikut dalam fail 'views/users/index.ctp':
<h1> Users </h1> <ul> <?php foreach ($users as $user): ?> <li> <?php echo $user['User']['name']; ?> </li> <?php endforeach; ?> </ul> <div class="pagination"> <?php echo $this->Paginator->prev('<< ' . __('Previous'), array(), null, array('class' => 'disabled')); echo $this->Paginator->numbers(); echo $this->Paginator->next(__('Next') . ' >>', array(), null, array('class' => 'disabled')); ?> </div>
Paparan ini hanyalah senarai ringkas Pengguna dan kemudian memaparkan pautan navigasi bernombor.
Kami menggunakan kaedah prev(), numbers() dan next() PaginatorHelper untuk menjana pautan navigasi. Kaedah ini akan menghasilkan pautan berdasarkan komponen '$CustomPaginator' yang kami takrifkan dalam pengawal.
Kesimpulan
Penomboran tersuai boleh memberi anda kawalan dan fleksibiliti yang lebih besar untuk memenuhi keperluan khusus anda. Dalam artikel ini, kami menunjukkan kepada anda cara membuat penomboran tersuai dalam CakePHP. Kini anda boleh menggunakan pengetahuan ini untuk membangunkan lebih banyak aplikasi tersuai.
Atas ialah kandungan terperinci Bagaimana untuk membuat penomboran tersuai dalam CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!