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
  • 相关阅读:
    点击其他地方隐藏div
    jquery获得被选中radio的值
    c++几个新特性
    effective c++ (三)
    80X86保护模式及其编程(一)
    Linux内核完全注释之编程语言和环境(二)
    Linux内核完全注释之编程语言和环境(一)
    linux内核完全注释之微型计算机组成结构
    effective c++ (二)
    effective c++ (一)
  • 原文地址:https://www.cnblogs.com/ooooo/p/2253730.html
Copyright © 2011-2022 走看看