Register Members List Search Today's Posts Mark Forums Read

Reply
 
Article Options
[HOW TO - vB4] Paginating Results
cellarius
Join Date: Aug 2005
Posts: 1,936

Augsburg, Germany
by cellarius cellarius is offline 24 Aug 2009
Rating: (3 votes - 3.67 average)

Introduction

Not very much has changed regarding how pagination works since vB 3.8, but quite enough to warrant an update of Revan's great tutorial, dating from 2006. Kudos to Revan.

As Revan I assume you know your way around php and can understand at least roughfly what each bit of the code does. There'll be explanations, of course, but this is for coders and mod developers.

The main work for pagination has to be done in the PHP-code, still no surprise there.

Cleaning URL parameters

We start off by cleaning the URL parameters that will tell our paginator how many entries to show per page and on which page of the resultset we're actually on


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

.
Counting results

The next step is to count the number of resuts that our actual database query will return (this query we will meet later on - it's an example that will throw all users with no posts).


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

.
Settings & sanitizing

Next we're off to do some settings: The first argument is our counting result. The last two arguments are the maximum number of results per page (100) and the default number of results per page (20). Note how the first argument is the result of the count query above. You can replace those with settings from the AdminCP by inserting the corresponding variables obviously.


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

.
Orientation - where are we?

Now some stuff to determine on which page we're on and which results to show. Note how you have to provide the results of our initial count query:


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

.
The main query

Now the query that throws all users with no posts - just an example, obviously. Note the LIMIT - this has to be added to the original query to delimit the resultset for the actual page


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

.
Constructing pagenav

The last (but one) thing to do in the PHP code is to finally call the function to construct the actual page-nav and saving it's output to a variable for passing to the template.
  • Some explanation for the arguments that must/can be passed to this function are in the code.
  • Of course, the name of the file (yourfile.php) needs to be adapted to the file name your using the pagination on.
  • Only the first four arguments are mandatory. You can leave the rest away if not needed, I added them for documentation.
  • The ? that starts the parameters after myfile.php needs to be there, since atm the page parameter always is prefixed with an &. If there are no other parameters present as is the case in this example, the links will look like "yourfile.php?&page=2". This is, of course, wrong, but works; without the ? the link would be "yourfile.php&page=2", which is even more wrong, since it does not work. In vB 3 pagination handled this correctly. I filed this as a bug in vB4 beta 3. Maybe I'm missing something, or this will be resolved - I'll keep you posted.

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

.
Registering pagenav for templates

As with all variables in vB4, the newly created $pagenav has to be registered to be used inside the template:


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

.
Template code

Now you just have to put the pagenav-code into your template, and we're done. Note that the id of the surrounding div should be changed to "pagination_bottom" or "pagination_top" accordingly.


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

Have fun!


-c
As of now (beta 3), there are still some issues that need to be resolved regarding pagination. They are minor and there should not be substantial changes, but be aware of that. For example, the setting of results shown per page does not work yet - 20 is hardcoded into the sanitizing function.

Last edited by cellarius; 15 Nov 2009 at 14:35..
Views: 7669
Reply With Quote
Comments
  #2  
Old 28 Dec 2009, 09:54
BBR-APBT's Avatar
BBR-APBT BBR-APBT is offline
 
Join Date: Feb 2009
How to get this to work with $_POST.

Every time I click a link in the pagination it resets the post variables.

When I use $_GET it shows either the security token or the session hash.

Thanks for any help.
Reply With Quote
  #3  
Old 28 Dec 2009, 11:41
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Real name: Sven
The pagination system, as far as I know, is designed to work with URL parameters only. If you want to preserve data entered via a form in post mode, you need to pass the data entered to the pagination class by adding parameters to the pagenav link, then you need to query it accordingly when the page gets reloaded upon page change. Anyway, wihtout seeing your code it's hard to say where you are going wrong.
__________________
Please note that there will be no further updates to my addons, especially they will not be upgraded for vB5. I'm leaving vB, since IB choose to go the banana-way yet again.

http://www.roma-antiqua.de
Reply With Quote
  #4  
Old 28 Dec 2009, 16:23
BBR-APBT's Avatar
BBR-APBT BBR-APBT is offline
 
Join Date: Feb 2009
here ya go http://pastebin.com/m5dd777d5

If I use $_get how do I remove the sessionhash or the securitytoken out of the url?

It loads the first page but each page after that has no variables.

Last edited by BBR-APBT; 28 Dec 2009 at 19:19.
Reply With Quote
  #5  
Old 28 Dec 2009, 19:47
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Real name: Sven
First, whenever you use get or post variables, you should always use the vbulletin input cleaner to make them safe. If you don't know how, there's an article somewhere here.

Second, why would you want to get rid of the sessionhash? It's only showing if you have cookies disabled, and if you remove it, it will break login for people w/o cookies.

Third, as I said, when you change pages, you basically reload them. Post variables won't survive that. You need to save the get parameters into variables, pass those variables as parameters to the pagination URL, and then read them from the URL parameters upon reload.

Basically (forgoing input cleaner here, for simplicity:


Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

__________________
Please note that there will be no further updates to my addons, especially they will not be upgraded for vB5. I'm leaving vB, since IB choose to go the banana-way yet again.

http://www.roma-antiqua.de
Reply With Quote
  #6  
Old 28 Dec 2009, 20:18
BBR-APBT's Avatar
BBR-APBT BBR-APBT is offline
 
Join Date: Feb 2009
I don't want to get rid of the session hash or security token I just want to hide it from the URL with $_GET for the simple fact is I don't want my users passing their sessionhash or security token around to each other.

On this search page only would it be safe to turn off CSRF_PROTECTION as long as I clean what can be inputed?
Reply With Quote
  #7  
Old 28 Dec 2009, 20:35
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Real name: Sven
Visibility of the security token is not a problem securitywise. It is visible in the source code anyway. The sessionhash is passed along via URL by vB if cookies are disabled, that's the way it is. And no, disabling CSRF protection is not a good idea, it's there for a reason.
__________________
Please note that there will be no further updates to my addons, especially they will not be upgraded for vB5. I'm leaving vB, since IB choose to go the banana-way yet again.

http://www.roma-antiqua.de
Reply With Quote
  #8  
Old 28 Dec 2009, 20:38
BBR-APBT's Avatar
BBR-APBT BBR-APBT is offline
 
Join Date: Feb 2009
Thanks so much for all your help man.

Last question do I need to add the following to $_GET forms?

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

Reply With Quote
  #9  
Old 28 Dec 2009, 20:45
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Real name: Sven
If you're using GET, you don't need the security token, but you do need the session (as I said, leaving that out will break log in for everyone with cookies disabled).

On CSRF protection, you may want to read http://www.vbulletin.org/forum/showthread.php?t=177013
__________________
Please note that there will be no further updates to my addons, especially they will not be upgraded for vB5. I'm leaving vB, since IB choose to go the banana-way yet again.

http://www.roma-antiqua.de
Reply With Quote
  #10  
Old 29 Dec 2009, 00:07
BBR-APBT's Avatar
BBR-APBT BBR-APBT is offline
 
Join Date: Feb 2009
Again Thanks for all the help Great Article.

Most of my problem boiled down to the sql statment.

I had

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

When I should have had.

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

So even with _GET it wasn't working correctly.

I used this same tutorial on several other pages of mine and it went flawlessly.

Thanks again for the fast answers and the great help.


P.S. I secure my code after its working just to narrow down problems.
Reply With Quote
  #11  
Old 05 Jan 2010, 01:48
S1OPP S1OPP is offline
 
Join Date: Jun 2005
I would really appreciate it if somebody could help me out.

I've built a page that pulls row from a sql db. Now I need to paginate the page as there are too many rows for one page.

I've followed the instructions as far as I can, changing only a few things, such as the sql queries.

The php is now limiting the number of rows to the correct perpage number. I've added the pagenav code to my custom template, but no matter what I do, the pagenav doesn't show.


Any help would be greatly appreciated.
S1OPP
Reply With Quote
  #12  
Old 05 Jan 2010, 07:07
BBR-APBT's Avatar
BBR-APBT BBR-APBT is offline
 
Join Date: Feb 2009
Originally Posted by S1OPP View Post
I would really appreciate it if somebody could help me out.

I've built a page that pulls row from a sql db. Now I need to paginate the page as there are too many rows for one page.

I've followed the instructions as far as I can, changing only a few things, such as the sql queries.

The php is now limiting the number of rows to the correct perpage number. I've added the pagenav code to my custom template, but no matter what I do, the pagenav doesn't show.


Any help would be greatly appreciated.
S1OPP
First off it would be good to post code when asking for help. If we can't see it and all your saying is it don't work, it makes it very hard to help you. There could be a million reasons why it isn't working for you. I used this tutorial several times and it works every time like a charm.
Reply With Quote
  #13  
Old 05 Jan 2010, 07:25
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Real name: Sven
^^What he said

Originally Posted by BBR-APBT View Post
I used this tutorial several times and it works every time like a charm.
Good to know
__________________
Please note that there will be no further updates to my addons, especially they will not be upgraded for vB5. I'm leaving vB, since IB choose to go the banana-way yet again.

http://www.roma-antiqua.de
Reply With Quote
  #14  
Old 05 Jan 2010, 08:24
S1OPP S1OPP is offline
 
Join Date: Jun 2005
no problem.

sightings.php

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

Templats : custom_sightings

Block Disabled:      (Update License Status)  
Suspended or Unlicensed Members Cannot View Code.

Reply With Quote
  #15  
Old 06 Jan 2010, 22:07
S1OPP S1OPP is offline
 
Join Date: Jun 2005
Worked it out now,

thanks.

Last edited by S1OPP; 06 Jan 2010 at 23:55.
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Article Options

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


New To Site? Need Help?

All times are GMT. The time now is 12:32.

Layout Options | Width: Wide Color: