serviceManager = $serviceManager; return $this; } /** * 每页显示数量 * @param int $limit */ public function setPageLimit($limit = 0) { $this->pageLimit = (int)$limit; if(empty($this->pageLimit)) $this->pageLimit = 10; } /** * 页码显示范围 * @param int $range */ public function setPageRange($range = 0) { $this->pageRange = (int)$range; if(empty($this->pageRange)) $this->pageRange = 6; } /** * 设置路由 * @param string $route * @param string $params */ public function setRoute($route = "",$params = "") { if(empty($route)) { $routeMatch = $this->serviceManager->get('Application')->getMvcEvent()->getRouteMatch(); $this->route = str_replace("/wildcard", "", $routeMatch->getMatchedRouteName()); $this->params = []; }else{ $this->route = $route; } if(empty($params)) { if(!isset($routeMatch)) $routeMatch = $this->serviceManager->get('Application')->getMvcEvent()->getRouteMatch(); if (!empty($routeMatch->getParam('__CONTROLLER__'))) $this->params['controller'] = $routeMatch->getParam('__CONTROLLER__'); if (!empty($routeMatch->getParam('action'))) $this->params['action'] = $routeMatch->getParam('action'); if (!empty($routeMatch->getParam('ac'))) $this->params['ac'] = $routeMatch->getParam('ac'); if (!empty($routeMatch->getParam['id'])) $this->params['id'] = $routeMatch->getParam('id'); if (!empty($routeMatch->getParam['uuid'])) $this->params['uuid'] = $routeMatch->getParam('uuid'); }else{ $this->params = $params; } unset($routeMatch); } /** * 设置分页模板 * @param $viewPartial */ public function setTemplate($viewPartial = "pagination") { $this->viewPartial = $viewPartial; } /** * 预处理分页使用到的参数 */ private function prepareParams() { if(empty($this->pageLimit)) $this->setPageLimit(); if(empty($this->pageRange)) $this->setPageRange(); if(empty($this->route)) $this->setRoute(); if(empty($this->viewPartial)) $this->setTemplate(); } /** * 预处理分页数据 * @param $data * @return ArrayAdapter|DbSelect|DbTableGateway */ private function prepareData($data) { if(is_array($data)) return new ArrayAdapter($data); if($data instanceof Select) { $dbService = $this->serviceManager->get('Db'); $zendDb = $dbService->getZendDb(); return new DbSelect($data,$zendDb); } if($data instanceof TableGateway\TableGatewayInterface || $data instanceof TableGateway\AbstractTableGateway) return new DbTableGateway($data,$this->sqlQuery,$this->sqlOrder,$this->sqlGroup,$this->sqlHaving); } /** * 获得Zend\Paginator\Paginator对象 * @param $data * @param $page * @return Zend_Paginator */ private function getPaginator($data,$page) { $paginator = new Zend_Paginator($data); $paginator->setCurrentPageNumber($page) ->setItemCountPerPage($this->pageLimit) ->setPageRange($this->pageRange); return $paginator; } /** * 输出html分页,放置在paginator变量中 * @param AbstractActionController $ctl * @param mixed $data * @return bool */ public function add(AbstractActionController $ctl,$data) { $page = $ctl->params()->fromRoute('page'); $this->prepareParams(); $data = $this->prepareData($data); $paginator = $this->getPaginator($data,$page); $pagination = $ctl->getServiceLocator()->get('viewhelpermanager')->get('PaginationControl'); $pageSliding = $pagination( $paginator, 'Sliding', $this->viewPartial, ['route'=>$this->route,'params'=>$this->params] ); $ctl->ViewModel->setVariable('pagination',$pageSliding); $ctl->ViewModel->setVariable('paginator',$paginator); return true; }//add() /** * 设置ajax分页的当前页码 * @param $page */ public function setAjaxCurrentPage($page){ $this->currentPage = (int)$page; } /** * 输出ajax分页 * @param $data * @return array */ public function ajax($data){ $this->prepareParams(); $data = $this->prepareData($data); if(empty($this->currentPage)) $page = 0; else $page = $this->currentPage; $paginator = $this->getPaginator($data,$page); $pagination = $this->serviceManager->get('viewhelpermanager')->get('PaginationControl'); $pageSliding = $pagination( $paginator, 'Sliding', $this->viewPartial, [] ); return [ 'paginator' => $paginator->toJson(), 'pagination' => $pageSliding ]; }//ajax }