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