/** * Paginates an ElementCriteriaModel instance. * * @param ElementCriteriaModel $criteria * * @return array */ public static function paginateCriteria(ElementCriteriaModel $criteria) { $currentPage = craft()->request->getPageNum(); $limit = $criteria->limit; $total = $criteria->total() - $criteria->offset; $totalPages = ceil($total / $limit); if ($currentPage > $totalPages) { $currentPage = $totalPages; } $offset = $limit * ($currentPage - 1); // Is there already an offset set? if ($criteria->offset) { $offset += $criteria->offset; } $last = $offset + $limit; if ($last > $total) { $last = $total; } $paginateVariable = new PaginateVariable(); $paginateVariable->first = $offset + 1; $paginateVariable->last = $last; $paginateVariable->total = $total; $paginateVariable->currentPage = $currentPage; $paginateVariable->totalPages = $totalPages; // Get the entities $criteria->offset = $offset; $entities = $criteria->find(); return array($paginateVariable, $entities); }
/** * Paginates an ElementCriteriaModel instance. */ public static function paginateCriteria(ElementCriteriaModel $criteria) { $currentPage = craft()->request->getPageNum(); $limit = $criteria->limit; $total = $criteria->total(); $totalPages = ceil($total / $limit); if ($currentPage > $totalPages) { $currentPage = $totalPages; } $offset = $limit * ($currentPage - 1); $path = craft()->request->getPath(); $pageUrlPrefix = ($path ? $path . '/' : '') . craft()->config->get('pageTrigger'); $last = $offset + $limit; if ($last > $total) { $last = $total; } $info = array('first' => $offset + 1, 'last' => $last, 'total' => $total, 'currentPage' => $currentPage, 'totalPages' => $totalPages, 'prevUrl' => $currentPage > 1 ? UrlHelper::getUrl($pageUrlPrefix . ($currentPage - 1)) : null, 'nextUrl' => $currentPage < $totalPages ? UrlHelper::getUrl($pageUrlPrefix . ($currentPage + 1)) : null); // Get the entities $criteria->offset = $offset; $entities = $criteria->find(); return array($info, $entities); }
/** * Paginates an ElementCriteriaModel instance. * * @param ElementCriteriaModel $criteria * * @return array */ public static function paginateCriteria(ElementCriteriaModel $criteria) { $currentPage = craft()->request->getPageNum(); $limit = $criteria->limit; $total = $criteria->total() - $criteria->offset; // If they specified limit as null or 0 (for whatever reason), just assume it's all going to be on one page. if (!$limit) { $limit = $total; } $totalPages = ceil($total / $limit); $paginateVariable = new PaginateVariable(); if ($totalPages == 0) { return array($paginateVariable, array()); } if ($currentPage > $totalPages) { $currentPage = $totalPages; } $offset = $limit * ($currentPage - 1); // Is there already an offset set? if ($criteria->offset) { $offset += $criteria->offset; } $last = $offset + $limit; if ($last > $total) { $last = $total; } $paginateVariable->first = $offset + 1; $paginateVariable->last = $last; $paginateVariable->total = $total; $paginateVariable->currentPage = $currentPage; $paginateVariable->totalPages = $totalPages; // Copy the criteria, set the offset, and get the elements $criteria = $criteria->copy(); $criteria->offset = $offset; $elements = $criteria->find(); return array($paginateVariable, $elements); }