fdevs/pagination

0.3.0 2018-03-13 10:55 UTC

This package is auto-updated.

Last update: 2024-08-29 03:31:33 UTC


README

这是一个具有完全不同核心概念的PHP分页器。

如果你使用Symfony 2,你可以使用我们的分页桥接器

安装

分页使用Composer,请访问Composer网站获取更多信息。

以下简单的命令将安装pagination到你的项目中。它还会在你的composer.json中添加一个新条目,并更新composer.lock

composer require fdevs/pagination

使用示例

控制器

use FDevs\Pagination\Type\ArrayType;
use FDevs\Pagination\Model\CountPagination;
use FDevs\Pagination\Extension\ArrayType\PageExtension;
use FDevs\Pagination\Extension\ArrayType\LimitExtension;
use FDevs\Pagination\Extension\ArrayType\OffsetExtension;
use FDevs\Pagination\Extension\ArrayType\CountExtension;
use FDevs\Pagination\Paginator;
use FDevs\Pagination\Renderer\ClosureRenderer;

$paginator = new Paginator();

$paginator
    ->addType(new ArrayType(),[PageExtension::class,CountExtension::class])
;

$closureRenderer = new ClosureRenderer(function($data) use ($template) {return $twig->render($template, $data);});


$pagination = $paginator->paginate(['a', 'b', 'c'], ['limit' => 1, 'page' => 2], new CountPagination());

$closureRenderer->render($pagination);

创建你的类型分页

<?php

namespace App\Pagination\Type;

use FDevs\Pagination\Model\PaginationInterface;

class PDOType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function paginate($target, PaginationInterface $pagination, array $options)
    {
        //your logic
        //$pagination->setItems($target->fetchAll());
        
        return $pagination;
    }

    /**
     * {@inheritdoc}
     */
    public function support($target)
    {
        return $target instanceof \PDOStatement;
    }
}

创建你的类型扩展

<?php

namespace App\Pagination\Extension\PDO;

use FDevs\Pagination\Extension\AbstractExtension;
use FDevs\Pagination\Model\CountPaginationInterface;
use FDevs\Pagination\Model\PaginationInterface;

class CountExtension extends AbstractExtension
{
    /**
     * {@inheritdoc}
     */
    public function supportPagination(PaginationInterface $pagination)
    {
        return $pagination instanceof CountPaginationInterface;
    }

    /**
     * {@inheritdoc}
     */
    public function prepareTarget($target, array $options, PaginationInterface $pagination)
    {
        /* @var $pagination CountPaginationInterface */
        $pagination->setCount($target->rowCount());

        return $target;
    }
}

添加你的类型

//init pagination

$paginator
    ->addType(new App\Pagination\Type\PDOType(),[App\Pagination\Extension\PDO\CountExtension::classs])
;

4devs创建 - 访问我们的博客,了解更多关于这个和其他开源项目的信息。