zoukankan      html  css  js  c++  java
  • 一个分页导航类

    简介:这是一个分页导航类的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=325341' scrolling='no'> <?php
    // +----------------------------------------------------------------------+
    // | PHP Version 4                                                        |
    // +----------------------------------------------------------------------+
    // | Copyright (c) 1997-2002 The PHP Group                                |
    // +----------------------------------------------------------------------+
    // | This source file is subject to version 2.02 of the PHP license,      |
    // | that is bundled with this package in the file LICENSE, and is        |
    // | available at through the world-wide-web at                           |
    // | http://www.php.net/license/2_02.txt.                                 |
    // | If you did not receive a copy of the PHP license and are unable to   |
    // | obtain it through the world-wide-web, please send a note to          |
    // | license@php.net so we can mail you a copy immediately.               |
    // +----------------------------------------------------------------------+
    // | Authors: Richard Heyes <richard@phpguru.org>                         |
    // +----------------------------------------------------------------------+

    /**
    * Pager class
    *
    * Handles paging a set of data. For usage see the example.php provided.
    *
    */

    class Pager {

        /**
        * Current page
        * @var integer
        */
        var $_currentPage;

        /**
        * Items per page
        * @var integer
        */
        var $_perPage;

        /**
        * Total number of pages
        * @var integer
        */
        var $_totalPages;

        /**
        * Item data. Numerically indexed array...
        * @var array
        */
        var $_itemData;

        /**
        * Total number of items in the data
        * @var integer
        */
        var $_totalItems;

        /**
        * Page data generated by this class
        * @var array
        */
        var $_pageData;

        /**
        * Constructor
        *
        * Sets up the object and calculates the total number of items.
        *
        * @param $params An associative array of parameters This can contain:
        *                  currentPage   Current Page number (optional)
        *                  perPage       Items per page (optional)
        *                  itemData      Data to page
        */
        function pager($params = array())
        {
            global $HTTP_GET_VARS;

            $this->_currentPage = max((int)@$HTTP_GET_VARS['pageID'], 1);
            $this->_perPage     = 8;
            $this->_itemData    = array();

            foreach ($params as $name => $value) {
                $this->{'_' . $name} = $value;
            }

            $this->_totalItems = count($this->_itemData);
        }

        /**
        * Returns an array of current pages data
        *
        * @param $pageID Desired page ID (optional)
        * @return array Page data
        */
        function getPageData($pageID = null)
        {
            if (isset($pageID)) {
                if (!empty($this->_pageData[$pageID])) {
                    return $this->_pageData[$pageID];
                } else {
                    return FALSE;
                }
            }

            if (!isset($this->_pageData)) {
                $this->_generatePageData();
            }

            return $this->getPageData($this->_currentPage);
        }

        /**
        * Returns pageID for given offset
        *
        * @param $index Offset to get pageID for
        * @return int PageID for given offset
        */
        function getPageIdByOffset($index)
        {
            if (!isset($this->_pageData)) {
                $this->_generatePageData();
            }

            if (($index % $this->_perPage) > 0) {
                $pageID = ceil((float)$index / (float)$this->_perPage);
            } else {
                $pageID = $index / $this->_perPage;
            }

            return $pageID;
        }

        /**
        * Returns offsets for given pageID. Eg, if you
        * pass it pageID one and your perPage limit is 10
        * it will return you 1 and 10. PageID of 2 would
        * give you 11 and 20.
        *
        * @params pageID PageID to get offsets for
        * @return array  First and last offsets
        */
        function getOffsetByPageId($pageid = null)
        {
            $pageid = isset($pageid) ? $pageid : $this->_currentPage;
            if (!isset($this->_pageData)) {
                $this->_generatePageData();
            }

            if (isset($this->_pageData[$pageid])) {
                return array(($this->_perPage * ($pageid - 1)) + 1, min($this->_totalItems, $this->_perPage * $pageid));
            } else {
                return array(0,0);
            }
        }

        /**
        * Returns back/next and page links
        *
        * @param  $back_html HTML to put inside the back link
        * @param  $next_html HTML to put inside the next link
        * @return array Back/pages/next links
        */
        function getLinks($back_html = '<< Back', $next_html = 'Next >>')
        {
            $url   = $this->_getLinksUrl();
            $back  = $this->_getBackLink($url, $back_html);
            $pages = $this->_getPageLinks($url);
            $next  = $this->_getNextLink($url, $next_html);

            return array($back, $pages, $next, 'back' => $back, 'pages' => $pages, 'next' => $next);
        }

        /**
        * Returns number of pages
        *
        * @return int Number of pages
        */
        function numPages()
        {
            return $this->_totalPages;
        }

        /**
        * Returns whether current page is first page
        *
        * @return bool First page or not
        */
        function isFirstPage()
        {
            return ($this->_currentPage == 1);
        }

        /**
        * Returns whether current page is last page
        *
        * @return bool Last page or not
        */
        function isLastPage()
        {
            return ($this->_currentPage == $this->_totalPages);
        }

        /**
        * Returns whether last page is complete
        *
        * @return bool Last age complete or not
        */
        function isLastPageComplete()
        {
            return !($this->_totalItems % $this->_perPage);
        }

        /**
        * Calculates all page data
        */
        function _generatePageData()
        {
            $this->_totalItems = count($this->_itemData);
            $this->_totalPages = ceil((float)$this->_totalItems / (float)$this->_perPage);
            $i = 1;
            if (!empty($this->_itemData)) {
                foreach ($this->_itemData as $value) {
                    $this->_pageData[$i][] = $value;
                    if (count($this->_pageData[$i]) >= $this->_perPage) {
                        $i++;
                    }
                }
            } else {
                $this->_pageData = array();
            }
        }

        /**
        * Returns the correct link for the back/pages/next links
        *
        * @return string Url
        */
        function _getLinksUrl()
        {
            global $HTTP_SERVER_VARS;

            // Sort out query string to prevent messy urls
            $querystring = array();
            if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
                $qs = explode('&', $HTTP_SERVER_VARS['QUERY_STRING']);            
                for ($i = 0, $cnt = count($qs); $i < $cnt; $i++) {
                    list($name, $value) = explode('=', $qs[$i]);
                    if ($name != 'pageID') {
                        $qs[$name] = $value;
                    }
                    unset($qs[$i]);
                }
            }
        if(is_array($qs)){
                foreach ($qs as $name => $value) {
                    $querystring[] = $name . '=' . $value;
                }    
        }
            return $HTTP_SERVER_VARS['SCRIPT_NAME'] . '?' . implode('&', $querystring) . (!empty($querystring) ? '&' : ') . 'pageID=';
        }

        /**
        * Returns back link
        *
        * @param $url  URL to use in the link
        * @param $link HTML to use as the link
        * @return string The link
        */
        function _getBackLink($url, $link = '<< Back')
        {
            // Back link
            if ($this->_currentPage > 1) {
                $back = '<a href="' . $url . ($this->_currentPage - 1) . '">' . $link . '</a>';
            } else {
                $back = ';
            }
            
            return $back;
        }

        /**
        * Returns pages link
        *
        * @param $url  URL to use in the link
        * @return string Links
        */
        function _getPageLinks($url)
        {
            // Create the range
            $params['itemData'] = range(1, max(1, $this->_totalPages));
            $pager =& new Pager($params);
            $links =  $pager->getPageData($pager->getPageIdByOffset($this->_currentPage));

            for ($i=0; $i<count($links); $i++) {
                if ($links[$i] != $this->_currentPage) {
                    $links[$i] = '<a href="' . $this->_getLinksUrl() . $links[$i] . '">' . $links[$i] . '</a>';
                }
            }

            return implode(' ', $links);
        }

        /**
        * Returns next link
        *
        * @param $url  URL to use in the link
        * @param $link HTML to use as the link
        * @return string The link
        */
        function _getNextLink($url, $link = 'Next >>')
        {
            if ($this->_currentPage < $this->_totalPages) {
                $next = '<a href="' . $url . ($this->_currentPage + 1) . '">' . $link . '</a>';
            } else {
                $next = ';
            }

            return $next;
        }
    }

    ?>

    “一个分页导航类”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/325341.html pageNo:14
  • 相关阅读:
    poj 2312 Battle City
    poj 2002 Squares
    poj 3641 Pseudoprime numbers
    poj 3580 SuperMemo
    poj 3281 Dining
    poj 3259 Wormholes
    poj 3080 Blue Jeans
    poj 3070 Fibonacci
    poj 2887 Big String
    poj 2631 Roads in the North
  • 原文地址:https://www.cnblogs.com/ooooo/p/2253730.html
Copyright © 2011-2022 走看看