Limit pagination page number Limit pagination page number sql sql

Limit pagination page number


Ok if you mean show something like

Prev 1 2 3 4 5 6 .. 40 41 Next Prev 1 2 .. 6 7 8 9 10 .. 40 41 Next

First thing we need to is create a function that can process what we need to output the pagination. Heres a function I use and it works well.

function get_paging_info($tot_rows,$pp,$curr_page){    $pages = ceil($tot_rows / $pp); // calc pages    $data = array(); // start out array    $data['si']        = ($curr_page * $pp) - $pp; // what row to start at    $data['pages']     = $pages;                   // add the pages    $data['curr_page'] = $curr_page;               // Whats the current page    return $data; //return the paging data}

Now this function is pretty solid and works very well for me.

So you pass this function

  • $tot_rows = counted rows for query
  • $pp = items per page
  • $curr_page = the current page number

Ok, now that you have the data you need, you'll need to display it.

Heres what I use and please read it before you think, 'ah, it's too long'. It's actually very simple.

Heres a snapshot of what it will return

enter image description here

    <!-- Create the query -->    <?php $count = mysql_fetch_assoc( mysql_query ( "SELECT COUNT( rows ) as count FROM table" ) ) ;    <?php $count = $count[0]['count']; ?><!-- Call our function from above --><?php $paging_info = get_paging_info($count,5,34); ?><p>    <!-- If the current page is more than 1, show the First and Previous links -->    <?php if($paging_info['curr_page'] > 1) : ?>        <a href='' title='Page 1'>First</a>        <a href='' title='Page <?php echo ($paging_info['curr_page'] - 1); ?>'>Prev</a>    <?php endif; ?>    <?php        //setup starting point        //$max is equal to number of links shown        $max = 7;        if($paging_info['curr_page'] < $max)            $sp = 1;        elseif($paging_info['curr_page'] >= ($paging_info['pages'] - floor($max / 2)) )            $sp = $paging_info['pages'] - $max + 1;        elseif($paging_info['curr_page'] >= $max)            $sp = $paging_info['curr_page']  - floor($max/2);    ?>    <!-- If the current page >= $max then show link to 1st page -->    <?php if($paging_info['curr_page'] >= $max) : ?>        <a href='' title='Page 1'>1</a>        ..    <?php endif; ?>    <!-- Loop though max number of pages shown and show links either side equal to $max / 2 -->    <?php for($i = $sp; $i <= ($sp + $max -1);$i++) : ?>        <?php            if($i > $paging_info['pages'])                continue;        ?>        <?php if($paging_info['curr_page'] == $i) : ?>            <span class='bold'><?php echo $i; ?></span>        <?php else : ?>            <a href='' title='Page <?php echo $i; ?>'><?php echo $i; ?></a>        <?php endif; ?>    <?php endfor; ?>    <!-- If the current page is less than say the last page minus $max pages divided by 2-->    <?php if($paging_info['curr_page'] < ($paging_info['pages'] - floor($max / 2))) : ?>        ..        <a href='' title='Page <?php echo $paging_info['pages']; ?>'><?php echo $paging_info['pages']; ?></a>    <?php endif; ?>    <!-- Show last two pages if we're not near them -->    <?php if($paging_info['curr_page'] < $paging_info['pages']) : ?>        <a href='<?php echo str_replace('/page'.$paging_info['curr_page'], '', $paging_info['curr_url']) . '/page'.($paging_info['curr_page'] + 1); ?>' title='Page <?php echo ($paging_info['curr_page'] + 1); ?>'>Next</a>        <a href='<?php echo str_replace('/page'.$paging_info['curr_page'], '', $paging_info['curr_url']) . '/page'.$paging_info['pages']; ?>' title='Page <?php echo $paging_info['pages']; ?>'>Last</a>    <?php endif; ?></p>


$count_pages = ceil($total / $items_per_page);


I solved a very similar issue for someone else with a very similar script here: How to limit pages shown in pagination script

Also, I noticed a few other anomalies with your script (besides the unreadable formatting that I fixed). You should change all occurrences of $_SERVER[SCRIPT_NAME] to $_SERVER['SCRIPT_NAME']. In your script, for instance:

echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=...";

Would become:

echo " <a href ='{$_SERVER['SCRIPT_NAME']}?Page=...";