blob: 34ca221411cde50914b578db4c2948146ca74674 [file] [log] [blame]
Derek Jones8ede1a22011-10-05 13:34:52 -05001################
2Pagination Class
3################
4
5CodeIgniter's Pagination class is very easy to use, and it is 100%
6customizable, either dynamically or via stored preferences.
7
Andrey Andreevcc042092014-01-03 17:08:27 +02008.. contents::
9 :local:
10
11.. raw:: html
12
13 <div class="custom-index container"></div>
14
Derek Jones8ede1a22011-10-05 13:34:52 -050015If you are not familiar with the term "pagination", it refers to links
16that allows you to navigate from page to page, like this::
17
18 « First  < 1 2 3 4 5 >  Last »
19
20*******
21Example
22*******
23
24Here is a simple example showing how to create pagination in one of your
Andrey Andreevf4bee9b2014-01-03 13:19:49 +020025:doc:`controller <../general/controllers>` methods::
Derek Jones8ede1a22011-10-05 13:34:52 -050026
Derek Jones36be9692011-10-05 15:52:41 -050027 $this->load->library('pagination');
28
29 $config['base_url'] = 'http://example.com/index.php/test/page/';
30 $config['total_rows'] = 200;
Marco Monteiro4b84d622012-06-26 11:53:20 +010031 $config['per_page'] = 20;
Derek Jones36be9692011-10-05 15:52:41 -050032
Marco Monteiro4b84d622012-06-26 11:53:20 +010033 $this->pagination->initialize($config);
Derek Jones36be9692011-10-05 15:52:41 -050034
35 echo $this->pagination->create_links();
Derek Jones8ede1a22011-10-05 13:34:52 -050036
37Notes
38=====
39
Andrey Andreevf4bee9b2014-01-03 13:19:49 +020040The ``$config`` array contains your configuration variables. It is passed to
41the ``$this->pagination->initialize()`` method as shown above. Although
Derek Jones8ede1a22011-10-05 13:34:52 -050042there are some twenty items you can configure, at minimum you need the
43three shown. Here is a description of what those items represent:
44
45- **base_url** This is the full URL to the controller class/function
46 containing your pagination. In the example above, it is pointing to a
47 controller called "Test" and a function called "page". Keep in mind
48 that you can :doc:`re-route your URI <../general/routing>` if you
49 need a different structure.
50- **total_rows** This number represents the total rows in the result
51 set you are creating pagination for. Typically this number will be
52 the total rows that your database query returned.
53- **per_page** The number of items you intend to show per page. In the
54 above example, you would be showing 20 items per page.
55
Andrey Andreevf4bee9b2014-01-03 13:19:49 +020056The ``create_links()`` method returns an empty string when there is no
Derek Jones8ede1a22011-10-05 13:34:52 -050057pagination to show.
58
59Setting preferences in a config file
60====================================
61
62If you prefer not to set preferences using the above method, you can
63instead put them into a config file. Simply create a new file called
Andrey Andreevf4bee9b2014-01-03 13:19:49 +020064pagination.php, add the ``$config`` array in that file. Then save the file
65in *application/config/pagination.php* and it will be used automatically.
66You will NOT need to use ``$this->pagination->initialize()`` if you save
Derek Jones8ede1a22011-10-05 13:34:52 -050067your preferences in a config file.
68
69**************************
70Customizing the Pagination
71**************************
72
73The following is a list of all the preferences you can pass to the
74initialization function to tailor the display.
75
76$config['uri_segment'] = 3;
Andrey Andreevf4bee9b2014-01-03 13:19:49 +020077===========================
Derek Jones8ede1a22011-10-05 13:34:52 -050078
79The pagination function automatically determines which segment of your
80URI contains the page number. If you need something different you can
81specify it.
82
83$config['num_links'] = 2;
Andrey Andreevf4bee9b2014-01-03 13:19:49 +020084=========================
Derek Jones8ede1a22011-10-05 13:34:52 -050085
86The number of "digit" links you would like before and after the selected
87page number. For example, the number 2 will place two digits on either
88side, as in the example links at the very top of this page.
89
Bo-Yi Wu65bdaf52012-09-21 13:49:09 +080090$config['use_page_numbers'] = TRUE;
Andrey Andreev73766c22012-10-05 20:32:14 +030091===================================
Derek Jones8ede1a22011-10-05 13:34:52 -050092
93By default, the URI segment will use the starting index for the items
94you are paginating. If you prefer to show the the actual page number,
95set this to TRUE.
96
97$config['page_query_string'] = TRUE;
98====================================
99
100By default, the pagination library assume you are using :doc:`URI
101Segments <../general/urls>`, and constructs your links something
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200102like::
Derek Jones8ede1a22011-10-05 13:34:52 -0500103
104 http://example.com/index.php/test/page/20
105
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200106If you have ``$config['enable_query_strings']`` set to TRUE your links
Derek Jones8ede1a22011-10-05 13:34:52 -0500107will automatically be re-written using Query Strings. This option can
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200108also be explictly set. Using ``$config['page_query_string']`` set to TRUE,
109the pagination link will become::
Derek Jones8ede1a22011-10-05 13:34:52 -0500110
111 http://example.com/index.php?c=test&m=page&per_page=20
112
Derek Jones8ede1a22011-10-05 13:34:52 -0500113Note that "per_page" is the default query string passed, however can be
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200114configured using ``$config['query_string_segment'] = 'your_string'``
Derek Jones8ede1a22011-10-05 13:34:52 -0500115
Phil Sturgeonf82b9292012-06-23 15:49:23 +0100116$config['reuse_query_string'] = FALSE;
Derek Jonesce79be02012-06-25 23:23:46 -0700117======================================
Phil Sturgeonf82b9292012-06-23 15:49:23 +0100118
Marco Monteiro4b84d622012-06-26 11:53:20 +0100119By default your Query String arguments (nothing to do with other
120query string options) will be ignored. Setting this config to
121TRUE will add existing query string arguments back into the
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200122URL after the URI segment and before the suffix.::
Phil Sturgeonf82b9292012-06-23 15:49:23 +0100123
124 http://example.com/index.php/test/page/20?query=search%term
125
126This helps you mix together normal :doc:`URI Segments <../general/urls>`
127as well as query string arguments, which until 3.0 was not possible.
128
Marco Monteiro4b84d622012-06-26 11:53:20 +0100129$config['prefix'] = '';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200130=======================
Marco Monteiro4b84d622012-06-26 11:53:20 +0100131
132A custom prefix added to the path. The prefix value will be right before
133the offset segment.
134
135$config['suffix'] = '';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200136=======================
Marco Monteiro4b84d622012-06-26 11:53:20 +0100137
138A custom suffix added to the path. The sufix value will be right after
139the offset segment.
140
Derek Jones8ede1a22011-10-05 13:34:52 -0500141***********************
142Adding Enclosing Markup
143***********************
144
145If you would like to surround the entire pagination with some markup you
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200146can do it with these two preferences:
Derek Jones8ede1a22011-10-05 13:34:52 -0500147
148$config['full_tag_open'] = '<p>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200149=================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500150
151The opening tag placed on the left side of the entire result.
152
153$config['full_tag_close'] = '</p>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200154===================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500155
156The closing tag placed on the right side of the entire result.
157
158**************************
159Customizing the First Link
160**************************
161
162$config['first_link'] = 'First';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200163================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500164
165The text you would like shown in the "first" link on the left. If you do
166not want this link rendered, you can set its value to FALSE.
167
168$config['first_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200169====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500170
171The opening tag for the "first" link.
172
173$config['first_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200174======================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500175
176The closing tag for the "first" link.
177
178*************************
179Customizing the Last Link
180*************************
181
182$config['last_link'] = 'Last';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200183==============================
Derek Jones8ede1a22011-10-05 13:34:52 -0500184
185The text you would like shown in the "last" link on the right. If you do
186not want this link rendered, you can set its value to FALSE.
187
188$config['last_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200189===================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500190
191The opening tag for the "last" link.
192
193$config['last_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200194=====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500195
196The closing tag for the "last" link.
197
198***************************
199Customizing the "Next" Link
200***************************
201
202$config['next_link'] = '&gt;';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200203==============================
Derek Jones8ede1a22011-10-05 13:34:52 -0500204
205The text you would like shown in the "next" page link. If you do not
206want this link rendered, you can set its value to FALSE.
207
208$config['next_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200209===================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500210
211The opening tag for the "next" link.
212
213$config['next_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200214=====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500215
216The closing tag for the "next" link.
217
218*******************************
219Customizing the "Previous" Link
220*******************************
221
222$config['prev_link'] = '&lt;';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200223==============================
Derek Jones8ede1a22011-10-05 13:34:52 -0500224
225The text you would like shown in the "previous" page link. If you do not
226want this link rendered, you can set its value to FALSE.
227
228$config['prev_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200229===================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500230
231The opening tag for the "previous" link.
232
233$config['prev_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200234=====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500235
236The closing tag for the "previous" link.
237
238***********************************
239Customizing the "Current Page" Link
240***********************************
241
242$config['cur_tag_open'] = '<b>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200243================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500244
245The opening tag for the "current" link.
246
247$config['cur_tag_close'] = '</b>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200248==================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500249
250The closing tag for the "current" link.
251
252****************************
253Customizing the "Digit" Link
254****************************
255
256$config['num_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200257==================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500258
259The opening tag for the "digit" link.
260
261$config['num_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200262====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500263
264The closing tag for the "digit" link.
265
266****************
267Hiding the Pages
268****************
269
270If you wanted to not list the specific pages (for example, you only want
271"next" and "previous" links), you can suppress their rendering by
272adding::
273
274 $config['display_pages'] = FALSE;
275
Andrey Andreev88c47272012-06-17 02:32:31 +0300276****************************
277Adding attributes to anchors
278****************************
Derek Jones8ede1a22011-10-05 13:34:52 -0500279
Andrey Andreev88c47272012-06-17 02:32:31 +0300280If you want to add an extra attribute to be added to every link rendered
281by the pagination class, you can set them as key/value pairs in the
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200282"attributes" config::
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300283
Andrey Andreev88c47272012-06-17 02:32:31 +0300284 // Produces: class="myclass"
285 $config['attributes'] = array('class' => 'myclass');
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300286
Andrey Andreev88c47272012-06-17 02:32:31 +0300287.. note:: Usage of the old method of setting classes via "anchor_class"
288 is deprecated.
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300289
Andrey Andreev88c47272012-06-17 02:32:31 +0300290*****************************
291Disabling the "rel" attribute
292*****************************
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300293
Andrey Andreev88c47272012-06-17 02:32:31 +0300294By default the rel attribute is dynamically generated and appended to
295the appropriate anchors. If for some reason you want to turn it off,
296you can pass boolean FALSE as a regular attribute
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300297
Andrey Andreev88c47272012-06-17 02:32:31 +0300298::
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300299
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200300 $config['attributes']['rel'] = FALSE;
301
302***************
303Class Reference
304***************
305
306.. class:: CI_Pagination
307
308 .. method:: initialize([$params = array()])
309
310 :param array $params: Configuration parameters
311 :returns: void
312
313 Initializes the Pagination class with your preferred options.
314
315 .. method:: create_links()
316
317 :returns: string
318
319 Returns a "pagination" bar, containing the generated links or an empty string if there's just a single page.