SitePoint Sponsor

User Tag List

Results 1 to 3 of 3
  1. #1
    SitePoint Enthusiast
    Join Date
    Dec 2009
    Posts
    60
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    pagination without database help

    I have a simple pagination script that I have set up to go to page 2 which is more_apps_2.php but how can I get it to go to the last page? I cannot figure out where it put "more_apps_3.php"

    Code:
    <?php
    
    class display {
    	function pagination($rows, $per_page, $current_page, $page_link) {
    		global $core,$C;
    		
    		// Create a Page Listing
    		$this->pages = ceil($rows / $per_page);
    		
    		// If there's only one page, return now and don't bother
    		if($this->pages == 1) {
    			return;
    		}
    		
    		// Pagination Prefix
                    $output .= "<!-- Pagination by Dennis Pedrie. Used by Permission -->";
    		$output = "Pages: ";
    		
    		// Should we show the FIRST PAGE link?
    		if($current_page > 2) {
    			$output .= "<a href=\"". $page_link ."?page=1/\" title=\"First Page\">&lt;&lt;</a>";
    		}
    		
    		// Should we show the PREVIOUS PAGE link?
    		if($current_page > 1) {
    			$previous_page = $current_page - 1;
    			$output .= " <a href=\"". $page_link ."?page=". $previous_page ."/\" title=\"Previous Page\">&lt;</a>";
    		}
    		
    		// Current Page Number
    		$output .= "<strong>[ ". $current_page ." ]</strong>";
    		
    		// Should we show the NEXT PAGE link?
    		if($current_page < $this->pages) {
    			$next_page = $current_page + 1;
    			$output .= "<a href=\"". $page_link ."?page=". $next_page ."/\" title=\"Next Page\">&gt;</a>";
    		}
    		
    		// Should we show the LAST PAGE link?
    		if($current_page < $this->pages - 1) {
    			$output .= " <a href=\"". $page_link ."?page=". $this->pages ."/\" title=\"Last Page\">&gt;&gt;</a>";
    		}
    		
    		// Return the output.
    		return $output;
    	}
    }
    
    $display = new display;
    echo $display->pagination("45", "15", "1", "more_apps_2.php");
    ?>
    AllTopExchange - Banner Ad Network
    40,000+ Free Impressions When You Join.

    TrinityClicks Best GPT Site EVER! Join Now!

  2. #2
    Non-Member Kalon's Avatar
    Join Date
    Aug 2010
    Location
    At my computer
    Posts
    2,012
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    This is the pagination class I use to paginate rows retrieved from a database.

    feel free to use it or hopefully the logic I use will help you to debug your class.

    I've also included the sql to create the test data this demo uses.

    index.php

    Code PHP:
    //connect to the database 
    $DBUserName = "xxxx";     //database user account name 
    $DBPassword = "";     //database user account password    
    $DBName = "xxxx";   //name of database
    @$conn = mysql_connect("localhost", $DBUserName, $DBPassword) or die('<br />1-Cannot connect to the database at the moment.<br /><br />Please try again later.<br />');  //connect to mysql
    @$isDbSelected = mysql_select_db($DBName, $conn) or die('<br />1-Cannot connect to the database at the moment.<br /><br />Please try again later.<br />');        //connect to the db
    //---------------------------------------------------------------------------------------------------------------------- 
    include('Paginator.php');
    if (!isset($_SESSION['pageMaker'])) {
        $linesPerPage = 5;   //number of lines to print per page
        $numLinksDisplay = 5;    //number of page links to display at a time
        $query = 'select * from tblperson';
        $pageMaker = new Paginator($linesPerPage, $numLinksDisplay, $query, $conn);
    } else {
        $pageMaker = unserialize($_SESSION['pageMaker']);
    }
    //set current page 
    if (isset($_GET['type']))
        $pageMaker->setCurrPage($_GET['type'], $_GET['txtPgNum']);
    //------------------------------------------------------------ 
    //Code to retrieve the rows to display on the current page 
    //------------------------------------------------------------ 
    if (!$rs = $pageMaker->getPageRecords($conn))
        die('<p>**ERROR - cannot get records for the page at the moment.</p>');
    ?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
        "[URL]http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd[/URL]">
    <html xmlns="[URL]http://www.w3.org/1999/xhtml[/URL]"> 
        <head>
            <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
            <title>Pagination</title>
            <!-- add the stylesheet for the page links -->
    <?php echo $pageMaker->getLinkStyles(); ?> 
        </head>
        <body>
            <!-- Display the page links -->
            <div id="page_links_wrapper">
    <?php echo $pageMaker->showLinks(); ?>
            </div>
            <!-- Code block to display the DB records for this page-->
            <table>
                <?php
                while ($row = mysql_fetch_assoc($rs)) {
                    echo '<tr><td>' . $row['fldPersonID'] . '</td><td>' . $row['fldGivenName'] . '</td><td>' . $row['fldFamilyName'] . '</td></tr>';
                }
                mysql_free_result($rs);
                mysql_close($conn);
                ?>
            </table>
            <!-- End of code block to display the DB records for this page-->
            <?php
    //hide or display the 'previous' and 'next' buttons as required 
                $pageMaker->applyLinkStyles();
    //serialise the session's pageMaker object for the next call to this page 
                $_SESSION['pageMaker'] = serialize($pageMaker);
            ?>
        </body>
    </html>

    Paginator.php

    Code PHP:
    <?php
    class Paginator {
        // Properties
        protected $linesPerPage;    //number of lines to print per page
        protected $numLinksDisplay;    //number of page links to display at a time
        protected $query;
        protected $currPage;
        protected $totRows;
        protected $totPages;
        protected $offset;
        /*     * *********************************************************************
          Class Constructor
         * ********************************************************************* */
        public function __construct($numLines, $numLinks, $query, $conn) {
            $this->linesPerPage = ceil($numLines);
            $this->numLinksDisplay = ceil($numLinks);
            $this->query = $query;
            $this->currPage = 1;
            $this->offset = 0;
            $this->initialise($conn);
        }
        /*     * *********************************************************************
          Class Accessor Methods
         * ********************************************************************* */
        public function setQuery($query, $conn) {
            $this->query = $query;
            $this->initialise($conn);
        }
        //-------------------------------------------------------------------------
        public function setCurrPage($type, $pageNum) {
            $pageNum = ceil($pageNum);
            //check which link was clicked
            switch ($type) {
                case 'pageLink':
                    $this->currPage = $pageNum;
                    break;
                case 'prevNext':
                    $this->currPage = $this->currPage + $pageNum;
                    if ($this->currPage < 1) {
                        $this->currPage = 1;
                    }
                    if ($this->currPage > $this->totPages) {
                        $this->currPage = $this->totPages;
                    }
                    break;
                case 'firstPg':
                    $this->currPage = 1;
                    break;
                case 'lastPg':
                    $this->currPage = $this->totPages;
                    break;
            }
            //calculate the offset of the first record number to retrieve from the DB for this page
            $this->offset = ($this->currPage * $this->linesPerPage) - $this->linesPerPage;
            if ($this->offset < 0) {
                $this->offset = 0;
            }
            if ($this->offset > $this->totRows) {
                $this->offset = $this->totRows;
            }
        }
        //-----------------------------------------------
        public function getCurrPage() {
            return $this->currPage;
        }
        /*     * *********************************************************************
          Class Methods
         * ********************************************************************* */
        private function initialise($conn) {
            //count all the records to work out max number of rows and number of pages needed
            $rs = @mysql_query($this->query, $conn) or die("<p>3-Server is busy.<br />Please try again later.</p>");
            $this->totRows = mysql_num_rows($rs); //total number of rows to display
            @mysql_free_result($rs);
            if ($this->totRows % $this->linesPerPage == 0) {
                $this->totPages = $this->totRows / $this->linesPerPage;
            } else {
                $this->totPages = round(($this->totRows / $this->linesPerPage) + 0.5);  //total number of pages required
            }
            $this->numLinksDisplay = ($this->numLinksDisplay > $this->totPages) ? $this->totPages : $this->numLinksDisplay;
            //echo $this->totRows.'<br />'.$this->totPages.'<br />'.$this->numLinksDisplay;  die();
        }
        //-------------------------------------------------------------------------------------
        public function getPageRecords($conn) {
            $query = $this->query . ' limit ' . $this->offset . ',' . $this->linesPerPage;
            $rs = @mysql_query($query, $conn);
            if (!$rs) {
                return false;
            } else {
                return $rs;
            }
        }
        //-------------------------------------------------------------------------------------
        public function showLinks() {
            if ($this->totPages <= 1)
                return;  //no need to display any links
     $str = '<div id="page_links_wrap">' .
                    '<div id="page_links_summ">' .
                    '<p id="totPages">Total pages: ' . $this->totPages . '</p>' .
                    '<p id="totRows">Total records: ' . $this->totRows . '</p>' .
                    '</div>' .
                    '<div id="page-links-container">' .
                    '<ul id="page-links">' .
                    '<li id="liFirstPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=-1&amp;type=firstPg" title="Click to view first page">First</a></li>' .
                    '<li id="liPrevPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=-1&amp;type=prevNext" title="Click to view previous page">Previous</a></li>';
            //calculate the min and max link numbers to display for this page
            if ($this->numLinksDisplay % 2 == 0) { //even number of links to display
                $limit1 = $this->currPage - $this->numLinksDisplay / 2;
                $limit2 = $this->currPage + ($this->numLinksDisplay / 2) - 1;
            } else { //odd number of links to display
                $limit1 = $this->currPage - ($this->numLinksDisplay - 1) / 2;
                $limit2 = $this->currPage + ($this->numLinksDisplay - 1) / 2;
            }
            if ($limit1 < 1 && $this->currPage < $this->numLinksDisplay)
                $limit1 = 1;
            if ($limit2 > $this->totPages)
                $limit2 = $this->totPages;
            //adjust the link numbers for when we are within $_SESSION['numLinksDisplay']/2 of either end
            if ($this->currPage <= $this->numLinksDisplay / 2)
                $limit2 = $this->numLinksDisplay;
            if ($this->currPage > $this->totPages - $this->numLinksDisplay / 2)
                $limit1 = $this->totPages - $this->numLinksDisplay + 1;
            //echo '<br />'.$_SESSION['currPage'].'<br />'.$limit1.'<br />'.$limit2.'<br /><br />';
            //display the page links
            for ($i = $limit1; $i <= $limit2; $i = $i + 1) {
                $str = $str . '<li id="liPg' . $i . '"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=' . $i . '&amp;type=pageLink" title="Go to page ' . $i . '">' . $i . '</a></li>';
            }
            $str = $str . '<li id="liNextPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=1&amp;type=prevNext" title="Click to view next page">Next</a></li>' .
                    '<li id="liLastPage"><a href="' . $_SERVER['PHP_SELF'] . '?txtPgNum=-1&amp;type=lastPg" title="Click to view last page">Last</a></li>' .
                    '</ul>' .
                    '</div>' .
                    '</div>';
            return $str;
        }
        //-------------------------------------------------------------------------------------
        public function getLinkStyles() {
            if ($this->totPages <= 1) {
                return;  //no need to display any links
            }
            $str = '<style type="text/css"> ' .
                    '#page_links_wrap {' .
                    //'border: 1px solid green; ' .
                    'margin: 5px 0px 0px 0px; ' .
                    'padding: 0px 0px 0px 0px; ' .
                    'width: 270px}' .
                    '#page-links-container { ' .
                    'font-size: 8pt; ' .
                    'font-family: tahoma, arial, sans serif; ' .
                    'margin: 0px 0px 0px 0px; ' .
                    'padding: 0px 0px 0px 0px} ' .
                    '#page-links-container ul { ' .
                    'clear: both; ' .
                    'padding: 0px 0px 0px 0px; ' .
                    'margin: 0px 0px 10px 0px;' .
                    'list-style-type: none} ' .
                    '#page-links-container ul li { ' .
                    'display: inline; ' .
                    'color: rgb(0,0,205); ' .
                    'padding: 3px 4px 3px 4px; ' .
                    'margin: 0px 0px 0px 6px} ' .
                    '#page-links-container ul li a { ' .
                    'text-decoration: none; ' .
                    'font-size: 8pt} ' .
                    '#page-links-container ul li a:hover { ' .
                    'text-decoration: underline} ' .
                    '#page-links-container ul li a:visited { ' .
                    'color: rgb(0,0,205);} ' .
                    '#page_links_summ { ' .
                    'font-size: 8pt; ' .
                    'font-family: tahoma, arial, sans serif; ' .
                    'overflow: hidden} ' .
                    '#totPages { ' .
                    //'border: 1px solid blue; ' .
                    'margin: 5px 0px 5px 10px; padding: 0px 0px 0px 0px;' .
                    'float: left} ' .
                    '#totRows { ' .
                    //'border: 1px solid red; ' .
                    'margin: 5px 10px 5px 0px; padding: 0px 0px 0px 0px;' .
                    'float: right} ' .
                    '</style> ';
            return $str;
        }
        //--------------------------------------------------------------------------------------
        public function applyLinkStyles() {
            if ($this->totPages <= 1)
                return;  //no need to display any links
                //hide or display the 'previous' and 'next' buttons as required
     if ($this->totPages == 1)
                echo '<script type="text/javascript">document.getElementById("page-links-container").style.display="none";</script>';
            if ($this->currPage == 1) {
                echo '<script type="text/javascript">document.getElementById("liPrevPage").disabled = true;</script>';
            } else {
                echo '<script type="text/javascript">document.getElementById("liPrevPage").disabled = false;</script>';
            }
            if ($this->currPage == $this->totPages) {
                echo '<script type="text/javascript">document.getElementById("liNextPage").disabled = true;</script>';
            } else {
                echo '<script type="text/javascript">document.getElementById("liNextPage").disabled = false;</script>';
            }
            //highlight the current page's page link
            echo '<script type="text/javascript">document.getElementById("liPg' . $this->currPage . '").style.backgroundColor="rgb(200,200,200)";</script>';
            echo '<script type="text/javascript">document.getElementById("liPg' . $this->currPage . '").style.border="1px solid rgb(0,0,0)";</script>';
        }
        //--------------------------------------------------------------------------------------
    }
    //end of class
    ?>

    sql to create the test database table

    Code SQL:
    CREATE TABLE `tblperson` (
      `fldPersonID` INT(11) NOT NULL AUTO_INCREMENT,
      `fldFamilyName` VARCHAR(20) DEFAULT NULL,
      `fldGivenName` VARCHAR(20) DEFAULT NULL,
      PRIMARY KEY (`fldPersonID`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
    /*Data for the table `tblperson` */
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Sui','Steven');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Mary');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Sam');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Malik','Moore');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','fred');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('rubble','barney');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','wilma');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','pebbles');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('smart','maxwell');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Sui','Steven');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Mary');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Sam');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Malik','Moore');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','fred');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('rubble','barney');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','wilma');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','pebbles');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('smart','maxwell');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Sui','Steven');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Mary');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Sam');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Malik','Moore');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','fred');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('rubble','barney');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','wilma');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','pebbles');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('smart','maxwell');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Sui','Steven');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Mary');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Student','Sam');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Malik','Moore');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','fred');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('rubble','barney');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','wilma');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('flinstone','pebbles');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('smart','maxwell');
    INSERT  INTO `tblperson`(`fldFamilyName`,`fldGivenName`) VALUES ('Soo','Malinda');

  3. #3
    SitePoint Enthusiast
    Join Date
    Dec 2009
    Posts
    60
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks Kalon but I am not using a database
    AllTopExchange - Banner Ad Network
    40,000+ Free Impressions When You Join.

    TrinityClicks Best GPT Site EVER! Join Now!


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •