1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-26 12:23:06 +08:00

优化分页

This commit is contained in:
xiaochong0302 2020-05-19 12:28:30 +08:00
parent d5dfd75c3d
commit d37e92d139
5 changed files with 75 additions and 62 deletions

View File

@ -47,6 +47,7 @@ class IndexSlideList extends Cache
'id' => $slide->id,
'title' => $slide->title,
'cover' => $slide->cover,
'bg_color' => $slide->bg_color,
'target' => $slide->target,
'content' => $slide->content,
];

View File

@ -2,20 +2,24 @@
namespace App\Library\Paginator\Adapter;
use Phalcon\Http\Request as HttpRequest;
use App\Library\Paginator\Query;
use Phalcon\Paginator\Adapter\QueryBuilder as BaseQueryBuilder;
class QueryBuilder extends BaseQueryBuilder
{
protected $url;
protected $baseUrl;
protected $params = [];
public function paginate()
{
$pager = parent::paginate();
$this->initParams();
$query = new Query();
$this->baseUrl = $query->getBaseUrl();
$this->params = $query->getParams();
$pager->first = $this->buildPageUrl($pager->first);
$pager->previous = $this->buildPageUrl($pager->previous);
@ -25,35 +29,11 @@ class QueryBuilder extends BaseQueryBuilder
return $pager;
}
protected function initParams()
{
$request = new HttpRequest();
$params = $request->get();
if ($params) {
foreach ($params as $key => $value) {
if (strlen($value) == 0) {
unset($params[$key]);
}
}
}
$this->params = $params;
if (!empty($this->params['_url'])) {
$this->url = $this->params['_url'];
unset($this->params['_url']);
} else {
$this->url = $request->get('_url');
}
}
protected function buildPageUrl($page)
{
$this->params['page'] = $page;
return $this->url . '?' . http_build_query($this->params);
return $this->baseUrl . '?' . http_build_query($this->params);
}
}

View File

@ -2,7 +2,7 @@
namespace App\Library\Paginator\Adapter;
use Phalcon\Http\Request as HttpRequest;
use App\Library\Paginator\Query;
use Phalcon\Paginator\Adapter as PaginatorAdapter;
use Phalcon\Paginator\Exception as PaginatorException;
@ -29,7 +29,7 @@ class XunSearch extends PaginatorAdapter
protected $config;
protected $url;
protected $baseUrl;
protected $params = [];
@ -58,6 +58,11 @@ class XunSearch extends PaginatorAdapter
$this->config = $config;
$this->_page = $config['page'] ?? 1;
$this->_limitRows = $config['limit'] ?? 15;
$query = new Query();
$this->baseUrl = $query->getBaseUrl();
$this->params = $query->getParams();
}
public function paginate()
@ -106,8 +111,6 @@ class XunSearch extends PaginatorAdapter
$pager->total_items = $totalCount;
$pager->items = $items;
$this->initParams();
$pager->first = $this->buildPageUrl($pager->first);
$pager->previous = $this->buildPageUrl($pager->previous);
$pager->next = $this->buildPageUrl($pager->next);
@ -121,35 +124,11 @@ class XunSearch extends PaginatorAdapter
return $this->paginate();
}
protected function initParams()
{
$request = new HttpRequest();
$params = $request->get();
if ($params) {
foreach ($params as $key => $value) {
if (strlen($value) == 0) {
unset($params[$key]);
}
}
}
$this->params = $params;
if (!empty($this->params['_url'])) {
$this->url = $this->params['_url'];
unset($this->params['_url']);
} else {
$this->url = $request->get('_url');
}
}
protected function buildPageUrl($page)
{
$this->params['page'] = $page;
return $this->url . '?' . http_build_query($this->params);
return $this->baseUrl . '?' . http_build_query($this->params);
}
}

View File

@ -2,11 +2,22 @@
namespace App\Library\Paginator;
use Phalcon\Mvc\User\Component;
use Phalcon\Di;
use Phalcon\Http\Request;
class Query extends Component
class Query
{
/**
* @var Request
*/
protected $request;
public function __construct()
{
$this->request = Di::getDefault()->get('request');
}
public function getPage()
{
$page = $this->request->get('page', 'int', 1);
@ -26,14 +37,28 @@ class Query extends Component
return $this->request->get('sort', 'trim', '');
}
public function getUrl()
public function getBaseUrl()
{
return $this->request->get('_url', 'trim', '');
}
public function getParams()
{
return $this->request->get();
$params = $this->request->get();
if ($params) {
foreach ($params as $key => $value) {
if (strlen($value) == 0) {
unset($params[$key]);
}
}
}
if (isset($params['_url'])) {
unset($params['_url']);
}
return $params;
}
}

View File

@ -31,7 +31,35 @@ class CourseSearch extends FrontendService
$pager = $paginator->getPaginate();
dd($pager);
return $this->handleCourses($pager);
}
public function handleCourses($pager)
{
if ($pager->total_items == 0) {
return $pager;
}
$items = [];
foreach ($pager->items as $course) {
$items[] = [
'id' => $course['id'],
'title' => $course['title'],
'cover' => $course['cover'],
'market_price' => (float)$course['market_price'],
'vip_price' => (float)$course['vip_price'],
'rating' => (float)$course['rating'],
'model' => $course['model'],
'level' => $course['level'],
'user_count' => $course['user_count'],
'lesson_count' => $course['lesson_count'],
];
}
$pager->items = $items;
return $pager;
}
}