tangframework分頁實現
namespace
Tang\Pagination;
use
Tang\I18n\II18n;
/**
* 分頁實現
* Class Paginator
* @package Tang\Pagination
*/
class
Paginator
implements
IPaginator
{
private
$total
= 0;
private
$pageNumber
= 20;
private
$maxPage
= 0;
private
$nowPage
= 0;
/**
* 語言包
* @var II18n
*/
private
$II18n
;
public
function
setl18n(II18n
$II18n
)
{
$this
->II18n =
$II18n
;
}
/**
* 設置總量
* @param $total
* @return mixed
*/
public
function
setTotal(
$total
)
{
$total
= (int)
$total
;
$total
< 0 &&
$total
= 0;
$this
->total =
$total
;
}
/**
* 設置每頁數量
* @param $pageNumber
* @return mixed
*/
public
function
setPageNumber(
$pageNumber
)
{
$pageNumber
= (int)
$pageNumber
;
$pageNumber
< 1 &&
$pageNumber
= 20;
$this
->pageNumber =
$pageNumber
;
}
/**
* 獲取每頁數量
* @return int
*/
public
function
getPageNumber()
{
return
$this
->pageNumber;
}
/**
* 獲取最大頁數
* @return int
*/
public
function
getMaxPage()
{
return
$this
->maxPage;
}
/**
* 獲取當前頁
* @return int
*/
public
function
getNowPage()
{
return
$this
->nowPage;
}
/**
* 獲取分頁數組
* @param int $nowPage 當前頁
* @param int $total 總數量
* @param int $pageNumber 一頁數量
* @throws NowPageLtMaxPageException
* @return array
*/
public
function
getPages(
$nowPage
,
$total
= 0,
$pageNumber
= 0)
{
if
(
$total
)
{
$this
->setTotal(
$total
);
}
if
(
$pageNumber
)
{
$this
->setPageNumber(
$pageNumber
);
}
$nowPage
= (int)
$nowPage
;
$nowPage
< 1 &&
$nowPage
= 1;
$this
->nowPage =
$nowPage
;
$maxPage
=
$this
->maxPage =
ceil
(
$this
->total /
$this
->pageNumber);
if
(!
$maxPage
)
{
return
false;
}
if
(
$nowPage
>
$maxPage
)
{
throw
new
NowPageLtMaxPageException(
'No more pages!'
,null,50013);
}
$pages
=
array
();
$pages
[] =
array
(
'name'
=>
$this
->II18n->get(
'First page'
),
'page'
=>1);
if
(
$nowPage
> 1)
{
$pages
[] =
array
(
'name'
=>
$this
->II18n->get(
'Prev page'
),
'page'
=>
$nowPage
-1);
}
if
(
$nowPage
> 5)
{
for
(
$i
=
$nowPage
- 5;
$i
<
$nowPage
;
$i
++)
{
if
(
$i
<= 0)
continue
;
$pages
[] =
array
(
'name'
=>
$i
,
'page'
=>
$i
);
}
for
(
$i
= 0;
$i
< 5;
$i
++)
{
$p
=
$nowPage
+
$i
;
if
(
$p
>
$maxPage
)
{
break
;
}
$pages
[] =
array
(
'name'
=>
$p
,
'page'
=>
$p
);
}
}
else
{
for
(
$i
= 1;
$i
< 10;
$i
++)
{
if
(
$i
>
$maxPage
)
{
break
;
}
$pages
[] =
array
(
'name'
=>
$i
,
'page'
=>
$i
);
}
}
$nextPage
=
$nowPage
+ 1;
if
(
$nowPage
<
$maxPage
)
{
$pages
[] =
array
(
'name'
=>
$this
->II18n->get(
'Next page'
),
'page'
=>
$nextPage
);
}
$pages
[] =
array
(
'name'
=>
$this
->II18n->get(
'End page'
),
'page'
=>
$maxPage
);
return
$pages
;
}
}
namespace
Tang\Pagination;
use
Tang\I18n\II18n;
use
Tang\Interfaces\ISetConfig;
/**
* 分頁接口
* Interface IPaginator
* @package Tang\Pagination
*/
interface
IPaginator
{
/**
* 設置語言包
* @param II18n $II18n
* @return void
*/
public
function
setl18n(II18n
$II18n
);
/**
* 設置總量
* @param $total
* @return void
*/
public
function
setTotal(
$total
);
/**
* 設置每頁數量
* @param $pageNumber
* @return void
*/
public
function
setPageNumber(
$pageNumber
);
/**
* 獲取每頁數量
* @return int
*/
public
function
getPageNumber();
/**
* 獲取最大頁數
* @return int
*/
public
function
getMaxPage();
/**
* 獲取當前頁
* @return int
*/
public
function
getNowPage();
/**
* 獲取分頁數組
* 返回的結果數組為array(
* array('name'=>'第一頁','page' => 1),
* array('name'=>'1','page' => 1),
* array('name'=>'2','page' => 2),
* array('name'=>'下一頁','page' => 2)
* )形式
* @param int $nowPage 當前頁
* @param int $total 總數量
* @param int $pageNumber 一頁數量
* @return array
*/
public
function
getPages (
$nowPage
,
$total
= 0,
$pageNumber
= 0);
}
推薦文章
2025-01-18
2024-11-28
2024-11-09
2024-10-25
2024-06-25
2024-01-04
2023-11-06
2023-10-30
2023-10-13
2023-10-10
穩定
產品高可用性高并發貼心
項目群及時溝通專業
產品經理1v1支持快速
MVP模式小步快跑承諾
我們選擇聲譽堅持
10年專注高端品質開發