/application/libraries/tree/paginator/st_paginator.php
PHP | 406 lines | 227 code | 37 blank | 142 comment | 30 complexity | a3fc0bfcfe7c9eb7f95e751f139825e7 MD5 | raw file
Possible License(s): AGPL-3.0
- <?php
- if ( ! defined('BASEPATH')) exit('No direct script access allowed');
- /**
- * CodeIgniter
- * @package CodeIgniter
- * @subpackage Libraries
- * @author AnhDT
- */
-
- class st_paginator implements Countable, IteratorAggregate {
- // Ki?u tr??t trang
- protected static $_defaultScrolling = 'slider';
- // Ti?n t? c?a l?p tr??t trang
- protected static $_prefixScrolling = 'st_paginator_scrolling_';
- // Ti?n t? c?a l?p engine
- protected static $_prefixEngine = 'st_paginator_engine_';
- // L?p phân trang
- protected $_engine = null;
- // L?p tr??t trang
- protected $_scrolling = null;
- // S? l??ng các ph?n t? trong trang hi?n t?i
- protected $_currentItemCount = null;
- // Các ph?n t? trong trang hi?n t?i
- protected $_currentItems = null;
- // Ch? m?c trang hi?n t?i
- protected $_currentPageIndex = 1;
- // S? l??ng các ph?n t? có trong m?i trang
- protected $_itemCountPerPage = 4;
- // S? l??ng các trang
- protected $_pageCount = null;
- // Kho?ng cách tr??t
- protected $_pageRange = 5;
- // Các trang
- protected $_pages = null;
-
- public function __construct(st_paginator_engine_interface $_engine = null) {
- if (null !== $_engine) {
- $this->_engine = $_engine;
- }
- }
-
- /**Thi?t l?p ti?n t? tr??t trang*/
- public function setPrefixScrolling($_prefix = '') {
- if (!empty($_prefix)) {
- self::$_prefixScrolling = $_prefix;
- }
- return $this;
- }
-
- /**L?y v? ti?n t? tr??t trang*/
- public function getPrefixScrolling() {
- return (string)self::$_prefixScrolling;
- }
-
- /**Thi?t l?p ti?n t? engine*/
- public function setPrefixEngine($_prefix = '') {
- if (!empty($_prefix)) {
- self::$_prefixEngine = $_prefix;
- }
- return $this;
- }
-
- /**L?y v? ti?n t? engine*/
- public function getPrefixEngine() {
- return (string)self::$_prefixEngine;
- }
-
- /**L?y v? ki?u tr??t ch? m?c m?c ??nh*/
- public static function getDefaultScrolling() {
- return self::$_defaultScrolling;
- }
- /**Thi?t l?p ki?u tr??t ch? m?c m?c ??nh*/
- public static function setDefaultScrolling($_scrollingType = 'slider') {
- self::$_defaultScrolling = $_scrollingType;
- }
-
- /**
- * Tr? v? s? l??ng các trang
- * @return integer
- */
- public function count() {
- if (!$this->_pageCount) {
- $this->_pageCount = $this->_calculatePageCount();
- }
- return $this->_pageCount;
- }
-
- /**
- * Tr? v? s? l??ng các ph?n t? có s?n
- * @return integer
- */
- public function getTotalItemCount() {
- return count($this->_scrolling);
- }
-
- /**
- * Tr? v? ki?u phân trang: collection, array...
- * @return st_paginator_engine_interface
- */
- public function getEngine() {
- return $this->_engine;
- }
-
- /**
- * Thi?t l?p ki?u phân trang: collection, array...
- * @return st_paginator
- */
- public function setEngine(st_paginator_engine_interface $_engine) {
- $this->_engine = $_engine;
- return $this;
- }
-
- /**
- * Tr? v? s? l??ng các ph?n t? có trong trang hi?n t?i
- * @return integer
- */
- public function getCurrentItemCount() {
- if ($this->_currentItemCount === null) {
- $this->_currentItemCount = $this->getItemCount($this->getCurrentItems());
- }
- return $this->_currentItemCount;
- }
-
- /**
- * L?y v? các ph?n t? trong trang hi?n t?i
- * @return Traversable
- */
- public function getCurrentItems() {
- if ($this->_currentItems === null) {
- $this->_currentItems = $this->getItemsByPage($this->getCurrentPageNumber());
- }
- return $this->_currentItems;
- }
-
- /**
- * L?y v? ch? m?c trang hi?n th?i
- * @return integer
- */
- public function getCurrentPageNumber() {
- return $this->renderPageNumber($this->_currentPageIndex);
- }
-
- /**
- * Thi?t l?p trang hi?n th?i
- * @param integer $_pageNumber Page number
- * @return Zend_Paginator $this
- */
- public function setCurrentPageNumber($_pageNumber) {
- $this->_currentPageIndex = (integer) $_pageNumber;
- $this->_currentItems = null;
- $this->_currentItemCount = null;
- return $this;
- }
-
- /**
- * Tr? v? s? l??ng các ph?n t? có trong m?i trang
- * @return integer
- */
- public function getItemCountPerPage() {
- return $this->_itemCountPerPage;
- }
-
- /**
- * Thi?t l?p s? ph?n t? có trong m?i trang
- * @param integer $_itemCountPerPage
- * @return Zend_Paginator $this
- */
- public function setItemCountPerPage($_itemCountPerPage) {
- $this->_itemCountPerPage = (integer) $_itemCountPerPage;
- if ($this->_itemCountPerPage == 0) {
- $this->_itemCountPerPage = 1;
- }
- $this->_pageCount = $this->_calculatePageCount();
- $this->_currentItems = null;
- $this->_currentItemCount = null;
- return $this;
- }
-
- /**
- * Tr? v? s? ph?n t? có trong t?p h?p
- * @param mixed $items Items
- * @return integer
- */
- public function getItemCount($items) {
- $itemCount = 0;
- if (is_array($items) or $items instanceof Countable) {
- $itemCount = count($items);
- }
- return $itemCount;
- }
-
- /**
- * Tr? v? ph?n t? trong m?t trang, s? l?y trang hi?n th?i n?u ch?
- * m?c c?a trang không ???c ch? ra
- * @param integer $_itemNumber Item number (1 to itemCountPerPage)
- * @param integer $_pageNumber
- * @return mixed
- */
- public function getItem($_itemNumber, $_pageNumber = null) {
- $_itemNumber = $this->renderItemNumber($_itemNumber);
- if ($_pageNumber == null) {
- $_pageNumber = $this->getCurrentPageNumber();
- }
- $page = $this->getItemsByPage($_pageNumber);
- $itemCount = $this->getItemCount($page);
- if ($itemCount == 0 || $_itemNumber > $itemCount) {
- return false;
- }
- return $page[$_itemNumber - 1];
- }
-
- /**
- * Returns the items for a given page.
- *
- * @return Traversable
- */
- public function getItemsByPage($_pageNumber) {
- $_pageNumber = $this->renderPageNumber($_pageNumber);
- $offset = ($_pageNumber - 1) * $this->_itemCountPerPage;
- $items = $this->_engine->getItems($offset, $this->_itemCountPerPage);
- return $items;
- }
-
- /**
- * L?y v? b? duy?t cho các ph?n t? có trong trang hi?n t?i
- * @return Traversable
- */
- public function getIterator() {
- return $this->getCurrentItems();
- }
-
- /**
- * L?y v? kho?ng cách tr??t trang
- * @return integer
- */
- public function getPageRange() {
- return $this->_pageRange;
- }
-
- /**
- * Thi?t l?p kho?ng cách tr??t trang
- * @param integer $_pageRange
- * @return Zend_Paginator $this
- */
- public function setPageRange($_pageRange) {
- $this->_pageRange = (integer)$_pageRange;
- return $this;
- }
-
- /**
- * Tr? v? t?p h?p các trang
- * @param string $_scrollingType Scrolling style
- * @return array
- */
- public function getPages($_scrollingType) {
- if ($this->_pages === null) {
- $this->_pages = $this->_createPages($_scrollingType);
- }
- return $this->_pages;
- }
-
- /**
- * L?y v? các trang trong m?t kho?ng
- * @param integer $lowerBound Lower bound of the range
- * @param integer $upperBound Upper bound of the range
- * @return array
- */
- public function getPagesInRange($lowerBound, $upperBound) {
- $lowerBound = $this->renderPageNumber($lowerBound);
- $upperBound = $this->renderPageNumber($upperBound);
- $pages = array();
- for ($_pageNumber = $lowerBound; $_pageNumber <= $upperBound; $_pageNumber++) {
- $pages[$_pageNumber] = $_pageNumber;
- }
- return $pages;
- }
-
- /**
- * Chu?n hóa l?i giá tr? s? trong ?? dŕi c?a trang.
- * @param integer $_itemNumber
- * @return integer
- */
- protected function renderItemNumber($_itemNumber) {
- $_itemNumber = ($_itemNumber < 1) ? 1 : $_itemNumber;
- $_itemNumber = ($_itemNumber > $this->_itemCountPerPage) ? $_itemNumber = $this->_itemCountPerPage : $_itemNumber;
- return $_itemNumber;
- }
-
- /**Chu?n hóa l?i giá tr? ch? m?c c?a trang
- * @param integer $_pageNumber
- * @return integer
- */
- protected function renderPageNumber($_pageNumber) {
- $_pageNumber = ($_pageNumber < 1) ? 1 : $_pageNumber;
- $_pageCount = $this->count();
- if ($_pageCount > 0 and $_pageNumber > $_pageCount) {
- $_pageNumber = $_pageCount;
- }
- return $_pageNumber;
- }
-
- /**
- * Tính toán s? t?ng s? trang
- * @return integer
- */
- protected function _calculatePageCount() {
- return (integer) ceil($this->_engine->count() / $this->_itemCountPerPage);
- }
-
- /**
- * T?o ra t?p h?p các trang
- * @param string $_scrollingType Scrolling style
- * @return stdClass
- */
- protected function _createPages($_scrollingType = null) {
- $_pageCount = $this->count();
- $_currentPageNumber = $this->getCurrentPageNumber();
-
- $pages = new stdClass();
- $pages->pageCount = $_pageCount;
- $pages->itemCountPerPage = $this->getItemCountPerPage();
- $pages->first = 1;
- $pages->current = $_currentPageNumber;
- $pages->last = $_pageCount;
-
- // Previous and next
- if ($_currentPageNumber - 1 > 0) {
- $pages->previous = $_currentPageNumber - 1;
- }
-
- if ($_currentPageNumber + 1 <= $_pageCount) {
- $pages->next = $_currentPageNumber + 1;
- }
-
- // Pages in range
- $_scrollingType = $this->_loadScrolling($_scrollingType);
- $pages->pagesInRange = $_scrollingType->getPages($this);
- $pages->firstPageInRange = min($pages->pagesInRange);
- $pages->lastPageInRange = max($pages->pagesInRange);
-
- // Item numbers
- if ($this->getCurrentItems() !== null) {
- $pages->currentItemCount = $this->getCurrentItemCount();
- $pages->itemCountPerPage = $this->getItemCountPerPage();
- $pages->totalItemCount = $this->getTotalItemCount();
- $pages->firstItemNumber = (($_currentPageNumber - 1) * $this->_itemCountPerPage) + 1;
- $pages->lastItemNumber = $pages->firstItemNumber + $pages->currentItemCount - 1;
- }
-
- return $pages;
- }
-
- /**
- * N?p m?t ki?u phân trang
- * @param string $_scrollingType
- * @return Zend_Paginator_Scrolling_Interface
- */
- protected function _loadScrolling($_scrollingType = null) {
- if ($_scrollingType === null) {
- $_scrollingType = self::$_prefixScrolling . self::$_defaultScrolling;
- }
- switch (strtolower(gettype($_scrollingType))) {
- case 'object':
- if (!$_scrollingType instanceof st_paginator_scrolling_interface) {
- return false;
- }
- if (null === $this->_scrolling) {
- $this->_scrolling = $_scrollingType;
- }
- return $this->_scrolling;
- case 'string':
- $_className = strtolower(self::$_prefixScrolling .$_scrollingType);
- if (!class_exists($_className)) {
- require_once APP_LIBRARY_PATH . 'tree/paginator/scrolling/' . $_className . '.php';
- }
- if (null === $this->_scrolling) {
- $this->_scrolling = new $_className();
- }
- return $this->_scrolling;
- case 'null':
- default:
- return false;
- }
- }
-
- /**
- * S? d?ng c?u hěnh trong m?t l?n goi ph??ng th?c
- * @param class $_engine
- * @param integer $_itemPerPage
- * @param integer $_pageRange
- * @param integer $_currentPageNumber
- * @param string $_scrollingType
- * @return Zend_Paginator_Scrolling_Interface
- */
- public function setConfig($_config = array()) {
- if (!is_array($_config) || count($_config) == null) {
- throw new Exception("config must be array and not empty");
- }
- foreach ($_config as $_key => $_object) {
- $_method = 'set' . ucfirst($_key);
- $this->$_method($_object);
- }
- return $this;
- }
- }
- ?>