Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle ich eine benutzerdefinierte Paginierung in CakePHP?

Wie erstelle ich eine benutzerdefinierte Paginierung in CakePHP?

WBOY
WBOYOriginal
2023-06-04 08:32:391049Durchsuche

CakePHP ist ein leistungsstarkes PHP-Framework, das Entwicklern viele nützliche Tools und Funktionen bietet. Eine davon ist das Paging, das uns hilft, große Datenmengen auf mehrere Seiten aufzuteilen und so das Durchsuchen und Bearbeiten zu erleichtern.

Standardmäßig bietet CakePHP einige grundlegende Paginierungsmethoden, aber manchmal müssen Sie möglicherweise einige benutzerdefinierte Paginierungsmethoden erstellen. In diesem Artikel erfahren Sie, wie Sie in CakePHP eine benutzerdefinierte Paginierung erstellen.

Schritt 1: Erstellen Sie eine benutzerdefinierte Paginierungsklasse

Zuerst müssen wir eine benutzerdefinierte Paginierungsklasse erstellen. Diese Klasse ist für die Handhabung der gesamten Paging-bezogenen Logik verantwortlich. Erstellen Sie eine neue Datei mit dem Namen CustomPaginator.php im Verzeichnis app/Lib/Utility und fügen Sie der Datei den folgenden Code hinzu:

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

Diese benutzerdefinierte Paginierungsklasse basiert auf der Standard-Paginatorklasse PaginatorComponent von CakePHP. Wir haben die Methode paginate() überschrieben, um eine benutzerdefinierte Paginierungslogik zu implementieren. Es benötigt die folgenden Parameter:

  • $object: Das zu paginierende Modellobjekt.
  • $scope: Abfragebedingungen, die zum Filtern der zu paginierenden Datensätze verwendet werden.
  • $whitelist: Whitelist-Array, das zum Zulassen oder Verweigern bestimmter Abfrageparameter verwendet wird

In unserer Implementierung ermitteln wir zunächst die Nummer der aktuellen Seite und legen dann die Standardanzahl der Datensätze pro Seite und die Anzahl der Startdatensätze fest. Als nächstes verwenden wir die Methode find(), um die Gesamtzahl der Datensätze zu ermitteln und berechnen dann die Gesamtzahl der Seiten und die Anzahl der Enddatensätze. Schließlich setzen wir alle Paging-Daten auf die „Paging“-Variable des Controllers und geben die paginierten Datensätze zurück.

Schritt 2: Instanziieren Sie die benutzerdefinierte Paginierungsklasse

Da wir nun die benutzerdefinierte Paginierungsklasse erstellt haben, müssen wir sie im Controller instanziieren. Dazu müssen wir den folgenden Code zu unserem Controller hinzufügen:

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

Wir verwenden App::uses(), um die benutzerdefinierte Paginierungsklasse zu laden und sie dann im Controller zu instanziieren. Wir haben dem Controller auch die benutzerdefinierte Paginierungsklasse hinzugefügt, indem wir die Attribute $components und $paginate verwendet haben.

In unserer index()-Aktion rufen wir $CustomPaginator->paginate() auf und übergeben ihr unser Benutzermodellobjekt. Anschließend setzen wir die paginierten Benutzerdaten in Ansichtsvariablen.

Schritt 3: Erstellen Sie eine paginierte Ansicht

Zuletzt müssen wir eine Ansicht erstellen, um die paginierten Daten anzuzeigen. Fügen Sie den folgenden Code in die Datei „views/users/index.ctp“ ein:

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

Diese Ansicht ist nur eine einfache Liste von Benutzern und zeigt dann paginierte Navigationslinks an.

Wir verwenden die Methoden prev(), number() und next() von PaginatorHelper, um Navigationslinks zu generieren. Diese Methoden generieren Links basierend auf der „$CustomPaginator“-Komponente, die wir im Controller definiert haben.

Fazit

Benutzerdefinierte Paginierung kann Ihnen mehr Kontrolle und Flexibilität geben, um Ihre spezifischen Anforderungen zu erfüllen. In diesem Artikel zeigen wir Ihnen, wie Sie in CakePHP eine benutzerdefinierte Paginierung erstellen. Jetzt können Sie dieses Wissen anwenden, um individuellere Anwendungen zu entwickeln.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine benutzerdefinierte Paginierung in CakePHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn