Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 01-30-2006, 03:15 PM
misterfade misterfade is offline
 
Join Date: Jun 2003
Location: MTL
Posts: 64
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Pagination help

I'm trying to query the vbulletin database on a custom table, and paginate the results. From the code I have, for some reason it only returns 40 total results. I'm having trouble with the $total_results part, can anyone help me out?

Thanks.

PHP Code:
<?php
// If current page number, use it, if not, set one.
    
if(!isset($_GET['page'])){
    
$page 1;
    } else {
    
$page $_GET['page'];
    }

// Define the number of results per page.
$max_results 10;

$from = (($page $max_results) - $max_results);

    
$query $vbulletin->db->query_read("SELECT test1.test_name,
         test1.test_ID, test2.test_name, test2.test_ID 
         WHERE test1.test_ID =
         test2.test_ID ORDER BY test1.test_name ASC LIMIT 
         
$from$max_results");
    
// Figure out the total number of results in DB.
$total_results $vbulletin->db->query_read("SELECT COUNT(*) 
FROM test1,
test2"
); 

    if (
$total_results !=0) {

    while(
$row_test $vbulletin->db->fetch_array($test1))
    {
      echo 
$row_test['test1_name'];
    }
    
// Figure out the total number of pages.
$total_pages ceil($total_results/$max_results);

// Page of page.
    
echo "<div align=right>";
    echo 
"Page $page of $total_pages";

// Build Previous Link.
        
$first 1;
    if (
$page != 1) {
        
$prev = ($page 1);
echo 
"<a href=\"".$_SERVER['PHP_SELF']."?page=$prev\"><<
</a> "
;
echo 
"[ <a href=\"".$_SERVER['PHP_SELF']."?page=$first\">
First</a> ] "
;
        }

for (
$i 1$i <= $total_pages$i++){
if (
$page == $i){
echo 
"<strong>$i</strong> ";
} else {
echo 
"<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
}
}

// Build Next Link.
    
if($page $total_pages){
        
$next = ($page 1);
echo 
"<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">>>
</a> "
;
echo 
"[ <a href=\"".$_SERVER['PHP_SELF']."?page=$total_pages\">
Last
</a> ] "
;
    echo 
"</div>";
      } else { 
    echo 
'Sorry.';
    }
    }
?>
Reply With Quote
  #2  
Old 03-04-2006, 07:23 PM
misterfade misterfade is offline
 
Join Date: Jun 2003
Location: MTL
Posts: 64
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

No one??
Reply With Quote
  #3  
Old 03-04-2006, 08:21 PM
Princeton's Avatar
Princeton Princeton is offline
 
Join Date: Nov 2001
Location: Vineland, NJ
Posts: 6,693
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

this should get you in the right direction: NOTE: change the QUERY as I changed it to do a test
PHP Code:
$vbulletin->input->clean_gpc('r''page'TYPE_UINT);
$page = (empty($vbulletin->GPC['page'])) ? $vbulletin->GPC['page'];

// Define the number of results per page.
$max_results 10;

// Figure out the total number of results in DB.
$total_results $vbulletin->db->query_first("SELECT COUNT(*) AS threads FROM " TABLE_PREFIX "thread"); 
echo 
'Total Rows To Display:  '$total_results['threads']. '<br /><br />';

// *********************************************************************************
// initialise some stuff...
$from = ($page 1) * $max_results;

$query $vbulletin->db->query_read("
                SELECT threadid, title, dateline
                FROM " 
TABLE_PREFIX "thread AS thread
                ORDER BY dateline ASC 
                LIMIT 
$from$max_results");


if (
$total_results['threads'] !=0
{            
    
$count=1;
    while(
$row $vbulletin->db->fetch_array($query))
    {
        echo 
'<div>'$count .')__ '$row['title'] . '  (ID: '$row['threadid'] .')</div>';
    
$count++;
    }
    
    
// Figure out the total number of pages.
    
$total_pages ceil($total_results['threads']/$max_results);    
    echo 
"<div align=\"right\">Page $page of $total_pages:  ";  
                  
    
// Build Previous Link.
    
$first 1;
    if (
$page != 1
    {
       
$prev = ($page 1);
       echo 
"[ <a href=\"".$_SERVER['PHP_SELF']."?page=$first\">First</a> ] ";
       echo 
"<a href=\"".$_SERVER['PHP_SELF']."?page=$prev\" style=\"font-size:10px\"><<</a> ";
    }
    
    for (
$i 1$i <= $total_pages$i++)
    {
        if (
$page == $i)
        {
           echo 
"<strong>$i</strong> ";
        } 
        else 
        {
           echo 
"<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
        }
    }
    
    
// Build Next Link.
    
if ($page $total_pages)
    {
            
$next = ($page 1);
            echo 
"<a href=\"".$_SERVER['PHP_SELF']."?page=$next\" style=\"font-size:10px\">>></a> ";
            echo 
"[ <a href=\"".$_SERVER['PHP_SELF']."?page=$total_results[threads]\">Last</a> ]</div>";
    } 

Reply With Quote
  #4  
Old 03-05-2006, 01:46 PM
misterfade misterfade is offline
 
Join Date: Jun 2003
Location: MTL
Posts: 64
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for the response. I tried your code and it looks like it's working fine.

Can you explain what this part is doing?
PHP Code:
$vbulletin->input->clean_gpc('r''page'TYPE_UINT);
$page = (empty($vbulletin->GPC['page'])) ? $vbulletin->GPC['page']; 
I don't understand those lines, is that what I have to use with vbulletin? Or is this just for testing purposes?

Thanks again!
Reply With Quote
  #5  
Old 03-05-2006, 02:05 PM
Princeton's Avatar
Princeton Princeton is offline
 
Join Date: Nov 2001
Location: Vineland, NJ
Posts: 6,693
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
$vbulletin->input->clean_gpc('r''page'TYPE_UINT); 
you should get into the habit of "cleaning" any $_GET, $_REQUEST, and $_POST data .... the above is a vb function that cleans/converts data that will be used

if you study the vb files or any product/plugin found here (vb.org) you will find the above line more frequently

This:
PHP Code:
$page = (empty($vbulletin->GPC['page'])) ? $vbulletin->GPC['page']; 
does the same thing as
PHP Code:
   if(!isset($_GET['page'])){
    
$page 1;
    } else {
    
$page $_GET['page'];
    } 
The ?: operator is used as a shorthand replacement for the if-then-else conditional statement; the general form is condition ? op1 : op2. If condition is true, the statement evaluates as op1; otherwise, it evaluates as op2.
Reply With Quote
  #6  
Old 03-05-2006, 02:10 PM
misterfade misterfade is offline
 
Join Date: Jun 2003
Location: MTL
Posts: 64
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ok thanks for the tip!

I was just trying the code again, and for some reason it's only showing a certain amount of rows. The table that I'm querying should be showing 65 results (rows), but it always stops at 40. I have it set for 10 results per page, and it keeps showing only 4 pages, so 40 rows. I ran my query in PHPMyAdmin and it works fine, so it's got to be the pagination with vbulletin. Any ideas as to why that would be happening?

Even the query from your code, it seems to work, but it shows 5 results per page, 6 pages total. That doesn't seem right.
Reply With Quote
  #7  
Old 03-05-2006, 02:12 PM
Princeton's Avatar
Princeton Princeton is offline
 
Join Date: Nov 2001
Location: Vineland, NJ
Posts: 6,693
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

the code was meant to be a starting point for you
Reply With Quote
  #8  
Old 03-05-2006, 02:14 PM
misterfade misterfade is offline
 
Join Date: Jun 2003
Location: MTL
Posts: 64
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Yeah I know but that's the main problem I was having originally, only showing a certain amount of results. I was just wondering if you had an idea as to why it would be doing that.

Thanks though.
Reply With Quote
  #9  
Old 03-05-2006, 02:55 PM
Princeton's Avatar
Princeton Princeton is offline
 
Join Date: Nov 2001
Location: Vineland, NJ
Posts: 6,693
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I edited the above code.

try
$from = ($vbulletin->GPC['page'] - 1) * $max_results;
Reply With Quote
  #10  
Old 03-05-2006, 04:10 PM
misterfade misterfade is offline
 
Join Date: Jun 2003
Location: MTL
Posts: 64
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

The new code you posted works great except for one thing. This works:
$from = (($page * $max_results) - $max_results);

Not this one:
$from = ($vbulletin->GPC['page'] - 1) * $max_results;

Thanks for all the help! So glad I got this working.
Reply With Quote
Reply


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


All times are GMT. The time now is 09:29 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07214 seconds
  • Memory Usage 2,304KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (6)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete