Viewing file: Sliding.php (11.07 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
/** * Contains the Pager_Sliding class * * PHP versions 4 and 5 * * LICENSE: Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * @category HTML * @package Pager * @author Lorenzo Alberton <l.alberton@quipo.it> * @copyright 2003-2008 Lorenzo Alberton * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) * @version CVS: $Id: Sliding.php,v 1.18 2008/01/06 13:36:22 quipo Exp $ * @link http://pear.php.net/package/Pager */
/** * require PEAR::Pager_Common base class */ require_once 'Pager/Common.php';
/** * Pager_Sliding - Generic data paging class ("sliding window" style) * Usage examples can be found in the PEAR manual * * @category HTML * @package Pager * @author Lorenzo Alberton <l.alberton@quipo.it> * @copyright 2003-2008 Lorenzo Alberton * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) * @link http://pear.php.net/package/Pager */ class Pager_Sliding extends Pager_Common { // {{{ Pager_Sliding()
/** * Constructor * * @param array $options Associative array of option names and their values * * @access public */ function Pager_Sliding($options = array()) { //set default Pager_Sliding options $this->_delta = 2; $this->_prevImg = '«'; $this->_nextImg = '»'; $this->_separator = '|'; $this->_spacesBeforeSeparator = 3; $this->_spacesAfterSeparator = 3; $this->_curPageSpanPre = '<b>'; $this->_curPageSpanPost = '</b>';
//set custom options $err = $this->setOptions($options); if ($err !== PAGER_OK) { return $this->raiseError($this->errorMessage($err), $err); } $this->build(); }
// }}} // {{{ getPageIdByOffset()
/** * "Overload" PEAR::Pager method. VOID. Not needed here... * * @param integer $index Offset to get pageID for * * @return void * @deprecated * @access public */ function getPageIdByOffset($index) { }
// }}} // {{{ getPageRangeByPageId()
/** * Given a PageId, it returns the limits of the range of pages displayed. * While getOffsetByPageId() returns the offset of the data within the * current page, this method returns the offsets of the page numbers interval. * E.g., if you have pageId=5 and delta=2, it will return (3, 7). * PageID of 9 would give you (4, 8). * If the method is called without parameter, pageID is set to currentPage#. * * @param integer $pageid PageID to get offsets for * * @return array First and last offsets * @access public */ function getPageRangeByPageId($pageid = null) { $pageid = isset($pageid) ? (int)$pageid : $this->_currentPage; if (!isset($this->_pageData)) { $this->_generatePageData(); } if (isset($this->_pageData[$pageid]) || is_null($this->_itemData)) { if ($this->_expanded) { $min_surplus = ($pageid <= $this->_delta) ? ($this->_delta - $pageid + 1) : 0; $max_surplus = ($pageid >= ($this->_totalPages - $this->_delta)) ? ($pageid - ($this->_totalPages - $this->_delta)) : 0; } else { $min_surplus = $max_surplus = 0; } return array( max($pageid - $this->_delta - $max_surplus, 1), min($pageid + $this->_delta + $min_surplus, $this->_totalPages) ); } return array(0, 0); }
// }}} // {{{ getLinks()
/** * Returns back/next/first/last and page links, * both as ordered and associative array. * * @param integer $pageID Optional pageID. If specified, links for that page * are provided instead of current one. * @param string $dummy used to comply with parent signature (leave empty) * * @return array back/pages/next/first/last/all links * @access public */ function getLinks($pageID = null, $dummy='') { if (!is_null($pageID)) { $_sav = $this->_currentPage; $this->_currentPage = $pageID;
$this->links = ''; if ($this->_totalPages > (2 * $this->_delta + 1)) { $this->links .= $this->_printFirstPage(); } $this->links .= $this->_getBackLink(); $this->links .= $this->_getPageLinks(); $this->links .= $this->_getNextLink(); if ($this->_totalPages > (2 * $this->_delta + 1)) { $this->links .= $this->_printLastPage(); } }
$back = str_replace(' ', '', $this->_getBackLink()); $next = str_replace(' ', '', $this->_getNextLink()); $pages = $this->_getPageLinks(); $first = $this->_printFirstPage(); $last = $this->_printLastPage(); $all = $this->links; $linkTags = $this->linkTags; $linkTagsRaw = $this->linkTagsRaw;
if (!is_null($pageID)) { $this->_currentPage = $_sav; }
return array( $back, $pages, trim($next), $first, $last, $all, $linkTags, 'back' => $back, 'pages' => $pages, 'next' => $next, 'first' => $first, 'last' => $last, 'all' => $all, 'linktags' => $linkTags, 'linkTagsRaw' => $linkTagsRaw, ); }
// }}} // {{{ _getPageLinks()
/** * Returns pages link * * @param string $url URL string [deprecated] * * @return string Links * @access private */ function _getPageLinks($url = '') { //legacy setting... the preferred way to set an option now //is adding it to the constuctor if (!empty($url)) { $this->_path = $url; } //If there's only one page, don't display links if ($this->_clearIfVoid && ($this->_totalPages < 2)) { return ''; }
$links = ''; if ($this->_totalPages > (2 * $this->_delta + 1)) { if ($this->_expanded) { if (($this->_totalPages - $this->_delta) <= $this->_currentPage) { $expansion_before = $this->_currentPage - ($this->_totalPages - $this->_delta); } else { $expansion_before = 0; } for ($i = $this->_currentPage - $this->_delta - $expansion_before; $expansion_before; $expansion_before--, $i++) { $print_separator_flag = ($i != $this->_currentPage + $this->_delta); // && ($i != $this->_totalPages - 1) $this->range[$i] = false; $this->_linkData[$this->_urlVar] = $i; $links .= $this->_renderLink(str_replace('%d', $i, $this->_altPage), $i) . $this->_spacesBefore . ($print_separator_flag ? $this->_separator.$this->_spacesAfter : ''); } }
$expansion_after = 0; for ($i = $this->_currentPage - $this->_delta; ($i <= $this->_currentPage + $this->_delta) && ($i <= $this->_totalPages); $i++) { if ($i < 1) { ++$expansion_after; continue; }
// check when to print separator $print_separator_flag = (($i != $this->_currentPage + $this->_delta) && ($i != $this->_totalPages));
if ($i == $this->_currentPage) { $this->range[$i] = true; $links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost; } else { $this->range[$i] = false; $this->_linkData[$this->_urlVar] = $i; $links .= $this->_renderLink(str_replace('%d', $i, $this->_altPage), $i); } $links .= $this->_spacesBefore . ($print_separator_flag ? $this->_separator.$this->_spacesAfter : ''); }
if ($this->_expanded && $expansion_after) { $links .= $this->_separator . $this->_spacesAfter; for ($i = $this->_currentPage + $this->_delta +1; $expansion_after; $expansion_after--, $i++) { $print_separator_flag = ($expansion_after != 1); $this->range[$i] = false; $this->_linkData[$this->_urlVar] = $i; $links .= $this->_renderLink(str_replace('%d', $i, $this->_altPage), $i) . $this->_spacesBefore . ($print_separator_flag ? $this->_separator.$this->_spacesAfter : ''); } }
} else { //if $this->_totalPages <= (2*Delta+1) show them all for ($i=1; $i<=$this->_totalPages; $i++) { if ($i != $this->_currentPage) { $this->range[$i] = false; $this->_linkData[$this->_urlVar] = $i; $links .= $this->_renderLink(str_replace('%d', $i, $this->_altPage), $i); } else { $this->range[$i] = true; $links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost; } $links .= $this->_spacesBefore . (($i != $this->_totalPages) ? $this->_separator.$this->_spacesAfter : ''); } } return $links; }
// }}} } ?>
|