blob: 8c5c2c63a9a5cd4237674a6adf34835f5f7fd652 [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
James L Parryc4a59572014-11-24 01:33:16 -080076**$config['uri_segment'] = 3;**
Derek Jones8ede1a22011-10-05 13:34:52 -050077
78The pagination function automatically determines which segment of your
79URI contains the page number. If you need something different you can
80specify it.
81
James L Parryc4a59572014-11-24 01:33:16 -080082**$config['num_links'] = 2;**
Derek Jones8ede1a22011-10-05 13:34:52 -050083
84The number of "digit" links you would like before and after the selected
85page number. For example, the number 2 will place two digits on either
86side, as in the example links at the very top of this page.
87
James L Parryc4a59572014-11-24 01:33:16 -080088**$config['use_page_numbers'] = TRUE;**
Derek Jones8ede1a22011-10-05 13:34:52 -050089
90By default, the URI segment will use the starting index for the items
91you are paginating. If you prefer to show the the actual page number,
92set this to TRUE.
93
James L Parryc4a59572014-11-24 01:33:16 -080094**$config['page_query_string'] = TRUE;**
Derek Jones8ede1a22011-10-05 13:34:52 -050095
96By default, the pagination library assume you are using :doc:`URI
97Segments <../general/urls>`, and constructs your links something
Andrey Andreevf4bee9b2014-01-03 13:19:49 +020098like::
Derek Jones8ede1a22011-10-05 13:34:52 -050099
100 http://example.com/index.php/test/page/20
101
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200102If you have ``$config['enable_query_strings']`` set to TRUE your links
Derek Jones8ede1a22011-10-05 13:34:52 -0500103will automatically be re-written using Query Strings. This option can
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200104also be explictly set. Using ``$config['page_query_string']`` set to TRUE,
105the pagination link will become::
Derek Jones8ede1a22011-10-05 13:34:52 -0500106
107 http://example.com/index.php?c=test&m=page&per_page=20
108
Derek Jones8ede1a22011-10-05 13:34:52 -0500109Note that "per_page" is the default query string passed, however can be
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200110configured using ``$config['query_string_segment'] = 'your_string'``
Derek Jones8ede1a22011-10-05 13:34:52 -0500111
James L Parryc4a59572014-11-24 01:33:16 -0800112**$config['reuse_query_string'] = FALSE;**
Phil Sturgeonf82b9292012-06-23 15:49:23 +0100113
Marco Monteiro4b84d622012-06-26 11:53:20 +0100114By default your Query String arguments (nothing to do with other
115query string options) will be ignored. Setting this config to
116TRUE will add existing query string arguments back into the
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200117URL after the URI segment and before the suffix.::
Phil Sturgeonf82b9292012-06-23 15:49:23 +0100118
119 http://example.com/index.php/test/page/20?query=search%term
120
121This helps you mix together normal :doc:`URI Segments <../general/urls>`
122as well as query string arguments, which until 3.0 was not possible.
123
James L Parryc4a59572014-11-24 01:33:16 -0800124**$config['prefix'] = '';**
Marco Monteiro4b84d622012-06-26 11:53:20 +0100125
126A custom prefix added to the path. The prefix value will be right before
127the offset segment.
128
James L Parryc4a59572014-11-24 01:33:16 -0800129**$config['suffix'] = '';**
Marco Monteiro4b84d622012-06-26 11:53:20 +0100130
131A custom suffix added to the path. The sufix value will be right after
132the offset segment.
133
Derek Jones8ede1a22011-10-05 13:34:52 -0500134***********************
135Adding Enclosing Markup
136***********************
137
138If you would like to surround the entire pagination with some markup you
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200139can do it with these two preferences:
Derek Jones8ede1a22011-10-05 13:34:52 -0500140
James L Parryc4a59572014-11-24 01:33:16 -0800141**$config['full_tag_open'] = '<p>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500142
143The opening tag placed on the left side of the entire result.
144
James L Parryc4a59572014-11-24 01:33:16 -0800145**$config['full_tag_close'] = '</p>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500146
147The closing tag placed on the right side of the entire result.
148
149**************************
150Customizing the First Link
151**************************
152
James L Parryc4a59572014-11-24 01:33:16 -0800153**$config['first_link'] = 'First';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500154
155The text you would like shown in the "first" link on the left. If you do
156not want this link rendered, you can set its value to FALSE.
157
Andrey Andreevaef63e52014-02-13 14:49:55 +0200158.. note:: This value can also be translated via a language file.
159
James L Parryc4a59572014-11-24 01:33:16 -0800160**$config['first_tag_open'] = '<div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500161
162The opening tag for the "first" link.
163
James L Parryc4a59572014-11-24 01:33:16 -0800164**$config['first_tag_close'] = '</div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500165
166The closing tag for the "first" link.
167
James L Parryc4a59572014-11-24 01:33:16 -0800168**$config['first_url'] = '';**
Andrey Andreev8e814ee2014-04-04 13:21:07 +0300169
170An alternative URL to use for the "first page" link.
171
Derek Jones8ede1a22011-10-05 13:34:52 -0500172*************************
173Customizing the Last Link
174*************************
175
James L Parryc4a59572014-11-24 01:33:16 -0800176**$config['last_link'] = 'Last';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500177
178The text you would like shown in the "last" link on the right. If you do
179not want this link rendered, you can set its value to FALSE.
180
Andrey Andreevaef63e52014-02-13 14:49:55 +0200181.. note:: This value can also be translated via a language file.
182
James L Parryc4a59572014-11-24 01:33:16 -0800183**$config['last_tag_open'] = '<div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500184
185The opening tag for the "last" link.
186
James L Parryc4a59572014-11-24 01:33:16 -0800187**$config['last_tag_close'] = '</div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500188
189The closing tag for the "last" link.
190
191***************************
192Customizing the "Next" Link
193***************************
194
James L Parryc4a59572014-11-24 01:33:16 -0800195**$config['next_link'] = '&gt;';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500196
197The text you would like shown in the "next" page link. If you do not
198want this link rendered, you can set its value to FALSE.
199
Andrey Andreevaef63e52014-02-13 14:49:55 +0200200.. note:: This value can also be translated via a language file.
201
James L Parryc4a59572014-11-24 01:33:16 -0800202**$config['next_tag_open'] = '<div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500203
204The opening tag for the "next" link.
205
James L Parryc4a59572014-11-24 01:33:16 -0800206**$config['next_tag_close'] = '</div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500207
208The closing tag for the "next" link.
209
210*******************************
211Customizing the "Previous" Link
212*******************************
213
James L Parryc4a59572014-11-24 01:33:16 -0800214**$config['prev_link'] = '&lt;';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500215
216The text you would like shown in the "previous" page link. If you do not
217want this link rendered, you can set its value to FALSE.
218
Andrey Andreevaef63e52014-02-13 14:49:55 +0200219.. note:: This value can also be translated via a language file.
220
James L Parryc4a59572014-11-24 01:33:16 -0800221**$config['prev_tag_open'] = '<div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500222
223The opening tag for the "previous" link.
224
James L Parryc4a59572014-11-24 01:33:16 -0800225**$config['prev_tag_close'] = '</div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500226
227The closing tag for the "previous" link.
228
229***********************************
230Customizing the "Current Page" Link
231***********************************
232
James L Parryc4a59572014-11-24 01:33:16 -0800233**$config['cur_tag_open'] = '<b>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500234
235The opening tag for the "current" link.
236
James L Parryc4a59572014-11-24 01:33:16 -0800237**$config['cur_tag_close'] = '</b>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500238
239The closing tag for the "current" link.
240
241****************************
242Customizing the "Digit" Link
243****************************
244
James L Parryc4a59572014-11-24 01:33:16 -0800245**$config['num_tag_open'] = '<div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500246
247The opening tag for the "digit" link.
248
James L Parryc4a59572014-11-24 01:33:16 -0800249**$config['num_tag_close'] = '</div>';**
Derek Jones8ede1a22011-10-05 13:34:52 -0500250
251The closing tag for the "digit" link.
252
253****************
254Hiding the Pages
255****************
256
257If you wanted to not list the specific pages (for example, you only want
258"next" and "previous" links), you can suppress their rendering by
259adding::
260
261 $config['display_pages'] = FALSE;
262
Andrey Andreev88c47272012-06-17 02:32:31 +0300263****************************
264Adding attributes to anchors
265****************************
Derek Jones8ede1a22011-10-05 13:34:52 -0500266
Andrey Andreev88c47272012-06-17 02:32:31 +0300267If you want to add an extra attribute to be added to every link rendered
268by the pagination class, you can set them as key/value pairs in the
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200269"attributes" config::
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300270
Andrey Andreev88c47272012-06-17 02:32:31 +0300271 // Produces: class="myclass"
272 $config['attributes'] = array('class' => 'myclass');
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300273
Andrey Andreev88c47272012-06-17 02:32:31 +0300274.. note:: Usage of the old method of setting classes via "anchor_class"
275 is deprecated.
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300276
Andrey Andreev88c47272012-06-17 02:32:31 +0300277*****************************
278Disabling the "rel" attribute
279*****************************
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300280
Andrey Andreev88c47272012-06-17 02:32:31 +0300281By default the rel attribute is dynamically generated and appended to
282the appropriate anchors. If for some reason you want to turn it off,
283you can pass boolean FALSE as a regular attribute
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300284
Andrey Andreev88c47272012-06-17 02:32:31 +0300285::
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300286
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200287 $config['attributes']['rel'] = FALSE;
288
289***************
290Class Reference
291***************
292
293.. class:: CI_Pagination
294
295 .. method:: initialize([$params = array()])
296
Andrey Andreev28c2c972014-02-08 04:27:48 +0200297 :param array $params: Configuration parameters
Andrey Andreev6f6102c2014-02-08 19:11:40 +0200298 :returns: CI_Pagination instance (method chaining)
299 :rtype: CI_Pagination
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200300
301 Initializes the Pagination class with your preferred options.
302
303 .. method:: create_links()
304
Andrey Andreev28c2c972014-02-08 04:27:48 +0200305 :returns: HTML-formatted pagination
306 :rtype: string
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200307
308 Returns a "pagination" bar, containing the generated links or an empty string if there's just a single page.