PX : code

Paging.php by Pierre-Yves Lemaire
Download this code


<?php
// =====================================================
// FILE: Paging.php
//
// =====================================================
// Description: This class handles the paging to be print to the browser.
//
// This is distribute as is. Free of use and free to do anything you want.
// 
// PLEASE REPORT ANY BUG TO ME BY EMAIL :)
//
// =========================
// Programmer:      Pierre-Yves Lemaire
//                                            py@ottawa.com
// =========================
// Date:            2001-03-25
// Version: 1.0
// =====================================================
class Paging {
    var 
$int_num_result;                                            // Number of result to show per page
    
var $int_nbr_row;                                                    // Total number of items (generally a sql count from db)
    
var $int_cur_position;                                        // Current position in recordset
    
var $str_table_bgcolor;                                    // Color of the html table contour, default to black
    
var $str_table_width;                                            // Width of the HTML table, default to 400 pixel
    
var $img_source_next "<img src=\\\"paging_r_arrow.gif\\\" width=\\\"7\\\" height=\\\"9\\\" border=0 alt=\\\"Previous\\\">\"; 
    var $img_source_previous = \"<img src=\\\"paging_l_arrow.gif\\\" width=\\\"7\\\" height=\\\"9\\\" border=0 alt=\\\"Next\\\">\";

    // ------------------------------------------------------------------------------------------ Constructor
    //
    function Paging( $int_nbr_row, $int_cur_position, $int_num_result, $str_table_bgcolor = \"#000000\", $str_table_width = 400 ){
        $this->int_nbr_row = $int_nbr_row;
        $this->int_num_result = $int_num_result;
        $this->int_cur_position = $int_cur_position;
        $this->str_table_bgcolor = $str_table_bgcolor;
        $this->str_table_width = $str_table_width;
    } // End constructor

    // ------------------------------------------------------------------------------------------ getNumberOfPage()
    // This function returns the total number of page to display.
    function getNumberOfPage(){
        $int_nbr_page = $this->int_nbr_row / $this->int_num_result;
        if( $int_nbr_page % 2 != 0 ){
            $int_nbr_page += 1;
        }
        return $int_nbr_page;
    } // end function
    
    // ------------------------------------------------------------------------------------------ getCurrentPage()
    // This function returns the current page number.
    function getCurrentPage(){
        $int_cur_page = ( $this->int_cur_position * $this->getNumberOfPage() ) / $this->int_nbr_row;
        return number_format( $int_cur_page, 0 );
    } // end function

    // --------------------------------------------------------------------------------------------------- openTable()
    // This function simply opens the HTML table.
    function openTable(){
        $ret = \"<table cellspacing=0 cellpadding=1 border=0 width=\\\"\". $this->str_table_width .\"\\\">\\n<tr>\\n<td align=center bgcolor=\\\"\". $this->str_table_bgcolor .\"\\\">\"
        .\"<table cellspacing=0 cellpadding=1 border=0 width=\\\"100%\\\">\\n<tr bgcolor=\\\"#FFFFFF\\\">\\n\";
        return $ret;
    } // end function

    // --------------------------------------------------------------------------------------------------- closeTable()
    // This function simply close the HTML table.
    function closeTable(){
        $ret = \"</tr></table></td></tr></table>\";
        return $ret;
    } // end function

    // -------------------------------------------------------------------------------------------------- printPaging()
    // This function print the paging to the screen. 
    function printPaging(){
        global $PHP_SELF;

        // Open the html table
        print $this->openTable();

        print \"<td align=center bgcolor=\\\"#efefef\\\" valign=top>&#183; File \". ( $this->int_cur_position + 1 );
        print \" - \";
        if( $this->int_cur_position + $this->int_num_result >= $this->int_nbr_row ){
            print $this->int_nbr_row;
        }else{ print ( $this->int_cur_position + $this->int_num_result ); }
        print  \" of \". $this->int_nbr_row .\"</td>\\n\";
        
        print \"<td align=center valign=top>\\n\";

        // Previous link here
        if ( $this->int_cur_position != 0 ){
            print \"<a href=\\\"$PHP_SELF?int_cur_position=\". ( $this->int_cur_position - $this->int_num_result ).\"\\\">\\n\";
            print $this->img_source_previous .\"</a>\\n\";
            print \"&nbsp;&nbsp;&nbsp;\\n\";
        }            
        // Printing all pages as a link
        for( $i=0; $i<$this->getNumberOfPage(); $i++ ){
            // On current page, do not print the link
            if( $i == $this->getCurrentPage() ){
                print $i+1;
            }else{
                $int_new_position = ( $i * $this->int_num_result );
                print \" <a href=\\\"\". $PHP_SELF .\"?int_cur_position=$int_new_position\\\">\". ($i+1) .\"</a> \\n\";
            }
        }
        print \"&nbsp;&nbsp;&nbsp;\\n\";

        // next link here
        if( ( $this->int_nbr_row - $this->int_cur_position ) > $this->int_num_result ){
            $int_new_position = $this->int_cur_position + $this->int_num_result;    
            print \"<a href=\\\"$PHP_SELF?int_cur_position=$int_new_position\\\">\\n\";
            print $this->img_source_next .\"</a></td>\\n\";
        }

            // close html table
            print $this->closeTable();
    } // End function printPaging

}; // End Class

// ==============================================================
// Exemple Usage
if( !isset( $int_cur_position ) ){
    $int_cur_position = 0;
}

// Usually, the 2 queries to the database would look like this:
// Get the total number of result from db
// $sql1 = \"Select count( field_primary_key ) as nb FROM table\";

// Select only fields needed according to paging
// $sql2 = \"Select * FROM table ORDER BY row \"
// .\"LIMIT $int_cur_position, $int_num_result\";

$result_from_sql1 = 100;        // exemple with a hundred fields

$p = new Paging( $result_from_sql1, $int_cur_position, 10 ,\"#336699\", \"400\" );
$p->printPaging();

?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.