欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

tangframework分页实现

程序员文章站 2022-06-01 17:12:11
...

tangframework分页是注册了服务,用户只要实现IPaginator接口,就可以使用自定义的分页类, 无 namespace Tang\Pagination;use Tang\I18n\II18n;/** * 分页实现 * Class Paginator * @package Tang\Pagination */class Paginator implements IPaginator{ priv

tangframework分页是注册了服务,用户只要实现IPaginator接口,就可以使用自定义的分页类,
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 total = $total;
    }

    /**
     * 设置每页数量
     * @param $pageNumber
     * @return mixed
     */
    public function setPageNumber($pageNumber)
    {
        $pageNumber = (int)$pageNumber;
        $pageNumber 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 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  $i,'page'=>$i);
            }
            for ($i = 0; $i  $maxPage)
                {
                    break;
                }
                $pages[] = array('name' => $p,'page'=>$p);
            }
        } else
        {
            for ($i = 1; $i  $maxPage)
                {
                    break;
                }
                $pages[] = array('name' => $i,'page'=>$i);
            }
        }
        $nextPage = $nowPage + 1;
        if ($nowPage  $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);
}