From 5b2247aa884c1aba7b2249b33fb0127af8fe5664 Mon Sep 17 00:00:00 2001 From: Krivchikov Dmitry Date: Fri, 15 Jan 2016 14:49:01 +0300 Subject: [PATCH] FIX paginator --- controllers/PageController.php | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/controllers/PageController.php b/controllers/PageController.php index 7794887..b437049 100644 --- a/controllers/PageController.php +++ b/controllers/PageController.php @@ -3,6 +3,7 @@ class PageController extends Controller { const elementsByPage = 30; + const minElementsByPage = 10; static function actionPoints() { @@ -47,6 +48,13 @@ class PageController extends Controller $param['where'] = '`status` = "published" AND `categoryId` NOT IN ('. implode(',', Category::$paidIds).')'; $pointsCount = Point::model()->getCount($param); $pagesCount = intval(ceil($pointsCount/self::elementsByPage)); + $fullPagesCount = intval(floor($pointsCount/self::elementsByPage)); + $residue = $pointsCount - ($fullPagesCount * self::elementsByPage); + + if ($residue < self::minElementsByPage) { + $pagesCount = $fullPagesCount; + } + $page = isset($_GET['page']) ? abs((int)$_GET['page']) : $pagesCount; $pages = array(); @@ -75,20 +83,27 @@ class PageController extends Controller krsort($pages); $param = array(); - $param['order'] = '`ord` DESC'; + $param['order'] = '`ord` ASC'; if (App::getParam('category')) { $param['where'] = 'categoryId = ' . (int) App::getParam('category') . ' AND `status` = "published"'; } else if (App::getParam('user')) { $param['where'] = '`author` = ' . (int) App::getParam('user') . ' AND `status` = "published"'; } else { $param['where'] = '`status` = "published" AND `categoryId` NOT IN ('. implode(',', Category::$paidIds).')'; - $param['limit'] = self::elementsByPage; + + if ($page == $pagesCount && $residue < self::minElementsByPage) { + $param['limit'] = self::elementsByPage + $residue; + } else { + $param['limit'] = self::elementsByPage; + } + if($page) { - $param['offset'] = self::elementsByPage * ($pagesCount - $page); + $param['offset'] = self::elementsByPage * ($page - 1); } } $points = Point::model()->getAll($param); + $points = array_reverse($points); $categories = Category::model()->getAll(array('order' => 'ord ASC')); $result = array();