Pagination mit CodeIgniter

Seit einiger Zeit verwende ich das PHP-Framework CodeIgniter zur Erstellung einer Web-Applikation. CodeIgniter bringt für das sog. Pagination (zeigt sowas ähnliches wie

« First < 1 2 3 4 5 > Last »

zum Darstellen grosser Listen auf mehrern Seiten) eine coole Library mit.

Kurzes Tutorial zur Verwendung der Pagination-Library mit zusätzlichen Argumenten (sort order, sort direction):

1. Erstellen der Links:

$this->load->library(‚pagination‘);
$config[‚base_url‘] = base_url().’/controller/index/‘.$data[’sortCol‘].’/‘.$data[’sortDir‘].’/‘;
$config[‚uri_segment‘] = 5;
$config[‚total_rows‘] = $this->model->getNofRecords($id);
$config[‚per_page‘] = $this->config->item(‚itemsPerPage‘);
$this->pagination->initialize($config);
$data[‚links‘] = $this->pagination->create_links();

Damit wird in $data [‚links‘] die Links für das Navigieren gespeichert. In base_url wird die URL angegeben, an die anschliessend das Pagination-Argument (=start index) angehängt wird. Nach der Variable sortCol und sortDir wird eine Zahl angehängt, welche den Startindex darstellt. uri_segment muss in diesem Fall 5 sein, da dieser Startindex das 5. Segment sein wird (controller ist 1.). total_rows wird aus der Datenbank gelesen (insgesamte Anzahl Datensätze), per_page wird aus der Konfiguration gelesen.

2. Konstruktor des Controllers

Der Konstruktor des Controllers nimmt 3 Argumente auf: sortCol, sortDir und startIndex. Alle drei haben Default-Werte, müssen also nicht zwingend mitgegeben werden. Insebesondere das letzte Argument (startIndex) sollte einen Default-Wert haben, da auf der 1. Seite die Pagination-Library keinen Wert mitgibt:

function index($sortCol=’vehicle.carNumber‘,$sortDir=’ASC‘, $startInd=0){…

Die Parameter werden in internen Variablen gespeichert bis zur Verwendung.

3. Verwendung:

Dem Model werden die obigen drei Parameter mitgegeben. Der Aufruf sieht folgendermassen aus:

$data[‚data‘] = $this->model->getList($id, $this->sortColumn, $this->sortDirection, $this->startIndex);

4. Das Model

Im Model wird die Query mit dem Limit-Operator angereichert:

$this->db->select(‚field‘)->from(‚table‘)->Where(‚user_id‘, $user_id)->order_by($sortColumn, $sortDirection)->limit($this->config->item(‚itemsPerPage‘), $startIndex);

3 Gedanken zu „Pagination mit CodeIgniter

  1. Fabian Wesner

    CodeIgniters Pagination Library ist wirklich extrem cool. Ich freue mich über jeden deutschen Beitrag zu diesem grandiosen Framework.

    In Deinem Tutorial ist mir aufgefallen, dass die User die zu sortierende Spalte bestimmen können. Stell Dir vor das macht jemand bei einer großen Tabelle und einer Spalte ohne Index…

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.