blob: 8a62376f18b278cbcd630de9a954fa023ef6642b [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
Andrey Andreevaef63e52014-02-13 14:49:55 +0200168.. note:: This value can also be translated via a language file.
169
Derek Jones8ede1a22011-10-05 13:34:52 -0500170$config['first_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200171====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500172
173The opening tag for the "first" link.
174
175$config['first_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200176======================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500177
178The closing tag for the "first" link.
179
Andrey Andreev8e814ee2014-04-04 13:21:07 +0300180$config['first_url'] = '';
181==========================
182
183An alternative URL to use for the "first page" link.
184
Derek Jones8ede1a22011-10-05 13:34:52 -0500185*************************
186Customizing the Last Link
187*************************
188
189$config['last_link'] = 'Last';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200190==============================
Derek Jones8ede1a22011-10-05 13:34:52 -0500191
192The text you would like shown in the "last" link on the right. If you do
193not want this link rendered, you can set its value to FALSE.
194
Andrey Andreevaef63e52014-02-13 14:49:55 +0200195.. note:: This value can also be translated via a language file.
196
Derek Jones8ede1a22011-10-05 13:34:52 -0500197$config['last_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200198===================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500199
200The opening tag for the "last" link.
201
202$config['last_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200203=====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500204
205The closing tag for the "last" link.
206
207***************************
208Customizing the "Next" Link
209***************************
210
211$config['next_link'] = '&gt;';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200212==============================
Derek Jones8ede1a22011-10-05 13:34:52 -0500213
214The text you would like shown in the "next" page link. If you do not
215want this link rendered, you can set its value to FALSE.
216
Andrey Andreevaef63e52014-02-13 14:49:55 +0200217.. note:: This value can also be translated via a language file.
218
Derek Jones8ede1a22011-10-05 13:34:52 -0500219$config['next_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200220===================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500221
222The opening tag for the "next" link.
223
224$config['next_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200225=====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500226
227The closing tag for the "next" link.
228
229*******************************
230Customizing the "Previous" Link
231*******************************
232
233$config['prev_link'] = '&lt;';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200234==============================
Derek Jones8ede1a22011-10-05 13:34:52 -0500235
236The text you would like shown in the "previous" page link. If you do not
237want this link rendered, you can set its value to FALSE.
238
Andrey Andreevaef63e52014-02-13 14:49:55 +0200239.. note:: This value can also be translated via a language file.
240
Derek Jones8ede1a22011-10-05 13:34:52 -0500241$config['prev_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200242===================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500243
244The opening tag for the "previous" link.
245
246$config['prev_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200247=====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500248
249The closing tag for the "previous" link.
250
251***********************************
252Customizing the "Current Page" Link
253***********************************
254
255$config['cur_tag_open'] = '<b>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200256================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500257
258The opening tag for the "current" link.
259
260$config['cur_tag_close'] = '</b>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200261==================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500262
263The closing tag for the "current" link.
264
265****************************
266Customizing the "Digit" Link
267****************************
268
269$config['num_tag_open'] = '<div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200270==================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500271
272The opening tag for the "digit" link.
273
274$config['num_tag_close'] = '</div>';
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200275====================================
Derek Jones8ede1a22011-10-05 13:34:52 -0500276
277The closing tag for the "digit" link.
278
279****************
280Hiding the Pages
281****************
282
283If you wanted to not list the specific pages (for example, you only want
284"next" and "previous" links), you can suppress their rendering by
285adding::
286
287 $config['display_pages'] = FALSE;
288
Andrey Andreev88c47272012-06-17 02:32:31 +0300289****************************
290Adding attributes to anchors
291****************************
Derek Jones8ede1a22011-10-05 13:34:52 -0500292
Andrey Andreev88c47272012-06-17 02:32:31 +0300293If you want to add an extra attribute to be added to every link rendered
294by the pagination class, you can set them as key/value pairs in the
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200295"attributes" config::
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300296
Andrey Andreev88c47272012-06-17 02:32:31 +0300297 // Produces: class="myclass"
298 $config['attributes'] = array('class' => 'myclass');
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300299
Andrey Andreev88c47272012-06-17 02:32:31 +0300300.. note:: Usage of the old method of setting classes via "anchor_class"
301 is deprecated.
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300302
Andrey Andreev88c47272012-06-17 02:32:31 +0300303*****************************
304Disabling the "rel" attribute
305*****************************
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300306
Andrey Andreev88c47272012-06-17 02:32:31 +0300307By default the rel attribute is dynamically generated and appended to
308the appropriate anchors. If for some reason you want to turn it off,
309you can pass boolean FALSE as a regular attribute
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300310
Andrey Andreev88c47272012-06-17 02:32:31 +0300311::
Andrey Andreev5a1e5e32012-06-12 11:28:26 +0300312
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200313 $config['attributes']['rel'] = FALSE;
314
315***************
316Class Reference
317***************
318
319.. class:: CI_Pagination
320
321 .. method:: initialize([$params = array()])
322
Andrey Andreev28c2c972014-02-08 04:27:48 +0200323 :param array $params: Configuration parameters
Andrey Andreev6f6102c2014-02-08 19:11:40 +0200324 :returns: CI_Pagination instance (method chaining)
325 :rtype: CI_Pagination
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200326
327 Initializes the Pagination class with your preferred options.
328
329 .. method:: create_links()
330
Andrey Andreev28c2c972014-02-08 04:27:48 +0200331 :returns: HTML-formatted pagination
332 :rtype: string
Andrey Andreevf4bee9b2014-01-03 13:19:49 +0200333
334 Returns a "pagination" bar, containing the generated links or an empty string if there's just a single page.