Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat penomboran tersuai dalam CakePHP?

Bagaimana untuk membuat penomboran tersuai dalam CakePHP?

WBOY
WBOYasal
2023-06-04 08:32:391071semak imbas

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:

  • $objek: Objek model yang akan dinomborkan.
  • $skop: Syarat pertanyaan, digunakan untuk menapis rekod untuk dinomborkan.
  • $whitelist: tatasusunan senarai putih untuk membenarkan atau menafikan parameter pertanyaan tertentu

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!

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