Blätterfunktion in Codeigniter erstellen
Eine einfache Blätterfunktion, auch Seitenfunktion genannt – dafür gibt es recht viele Namen, innerhalb des Codeigniter Frameworks zu erstellen ist recht simpel und mit nicht allzu großem Aufwand verbunden. Das Framework bietet fertige Helper und Libraries, sodass in kurzer Zeit die Möglichkeit zum Blättern erstellt werden kann. In diesem Post werde ich ein einfaches Codeigniter Model verwenden. Die Datensätze kommen aus einer MySQL Datenbank.
In meinem Controller „Webpage“ übergebe ich der Einstiegsfunktion index den Zusätzlichen Parameter page. Sollte dieser GET-Parameter beim Aufruf der Webseite nicht gesetzt sein, so ist dieser standardmäßig bereits auf 0 gesetzt ($page = 0). Wie man merken wird, dient diese Variable zur Angabe welche Seite von mehreren Seiten gerade beim Blättern aufgerufen wird. Pro Seite wird eine festgelegte, begrenzte Anzahl an Einträgen aus der Datenbank abgerufen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); class Webpage extends CI_Controller { var $data; public function index($page = 0) { // Model laden $this->load->model('Entry_Model'); // Anzahl der Einträge pro Seite festlegen $limit = 10; // Einträge aus der Datenbank laden und Seitenanzahl berechnen $this->data['entries'] = $this->Entry_Model->get_all($limit, $page * $limit); $this->data['pages'] = ceil($this->Entry_Model->get_count() / $limit); // View laden und mit Variablen ausgeben $this->load->view('index', $this->data); } } |
Zuerst Laden wir unser einfaches Model. Anschließend wird in einer Variable festgelegt, wie viele Einträge pro Seite angezeigt werden sollen. Der Wert könnte auch in einer Konstanten festgelegt werden. Unter dem Key „entries“ des data-Arrays, welches an das View übergeben wird, werden die geladenen Einträge aus der Datenbank abgelegt.
Anschließend berechnen wir noch die Seitenanzahl mit der Funktion ceil. Zur Hilfe haben wir eine Zählfunktion get_count im Model. Bei zum Beispiel 15 Datensätzen und 10 eingestellten, anzuzeigenden Einträgen je Seite würde die Funktion als Wert „2“ unter $this->data[‚pages‘] ablegen. Diesen Wert benötigen wir im View-Template, um die Seitenzahlen für die Navigation zu generieren.
Das Model sieht folgendermaßen aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); class Entry_Model extends CI_Model { public function get_count() { return $this->db->count_all_results('entries'); } public function get_all($limit, $offset) { $this->db->select('id, title'); $this->db->limit($limit, $offset); $query = $this->db->get('entries'); return $query->result_array(); } } |
Die Active Record Funktionen von Codeigniter helfen beim Erstellen eines MySQL-Query. Selektiert werden im Beispiel die Felder id und title. Mit der limit-Funktion begrenzen wird die angezeigten Einträge. Die Modelfunktion get_all() gibt hier das Ergebnis als Array zurück.
Als letzter Schritt fehlt noch das Template / View für die Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<html> ... <body> <?php foreach($entries as $entry): ?> <div> <?php echo $entry['id'] ?> - <?php echo $entry['title'] ?> </div> <?php endforeach ?> <div> <?php for($i = 0; $i < $pages; $i++): ?> <a href="/page/index/<?php echo $i ?>"><?php echo $i+1 ?></a> <?php endfor ?> </div> ... </body> </html> |
Die erste Seite kann man dann unter der URL /webpage/index (oder auch /webpage/index/0) aufrufen. Unterhalb werden die Seitenzahlen in einer einfachen for-Schleife generiert. Das Ganze kann man natürlich zwecks Usability so anpassen wie man es gerne hätte. Beim Generieren der Seitennavigation könnte hier zum Beispiel die aktuelle Seitenzahl als Text statt richtigen Link ausgeben.
Bei Verbesserungen oder Fehlern kann gerne die Kommentarfunktion genutzt werden. 🙂
Die letzten Kommentare