aferrandini / pagerfanta
为 PHP 5.3 设计的分页
Requires
- php: >=5.3.0
Suggests
- doctrine/mongodb-odm: 2.*
- doctrine/orm: 2.*
- solarium/solarium: 2.*
This package is auto-updated.
Last update: 2024-09-20 17:40:57 UTC
README
为 PHP 5.3 设计的分页
用法
<?php use Pagerfanta\Pagerfanta; use Pagerfanta\Adapter\ArrayAdapter; $adapter = new ArrayAdapter($array); $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage($maxPerPage); // 10 by default $maxPerPage = $pagerfanta->getMaxPerPage(); $pagerfanta->setCurrentPage($currentPage); // 1 by default $currentPage = $pagerfanta->getCurrentPage(); $nbResults = $pagerfanta->getNbResults(); $currentPageResults = $pagerfanta->getCurrentPageResults(); $pagerfanta->getNbPages(); $pagerfanta->haveToPaginate(); // whether the number of results if higher than the max per page $pagerfanta->hasPreviousPage(); $pagerfanta->getPreviousPage(); $pagerfanta->hasNextPage(); $pagerfanta->getNextPage();
->setMaxPerPage()
和 ->setCurrentPage()
方法实现了流畅的接口
<?php $pagerfanta ->setMaxPerPage($maxPerPage) ->setCurrentPage($currentPage) ;
->setMaxPerPage()
方法如果每页最大值无效则抛出异常
Pagerfanta\Exception\NotIntegerMaxPerPageException
(包括字符串中的整数)Pagerfanta\Exception\LessThan1MaxPerPageException
两者都继承自 Pagerfanta\Exception\NotValidMaxPerPageException
.
->setCurrentPage()
方法如果页面无效则抛出异常
Pagerfanta\Exception\NotIntegerCurrentPageException
(包括字符串中的整数)Pagerfanta\Exception\LessThan1CurrentPageException
Pagerfanta\Exception\OutOfRangeCurrentPageException
它们都继承自 Pagerfanta\Exception\NotValidCurrentPageException
.
适配器
适配器的概念非常简单。适配器仅返回结果数量和切片,以偏移量和长度。这样,您可以通过创建适配器来轻松地将 pagerfanta 适配到任何类型的分页。
适配器必须实现 Pagerfanta\Adapter\AdapterInterface
接口,它具有这两个方法
<?php /** * Returns the number of results. * * @return integer The number of results. * * @api */ function getNbResults(); /** * Returns an slice of the results. * * @param integer $offset The offset. * @param integer $length The length. * * @return array|\Iterator|\IteratorAggregate The slice. * * @api */ function getSlice($offset, $length);
Pagerfanta 随附八个适配器
ArrayAdapter
用于分页数组。
<?php use Pagerfanta\Adapter\ArrayAdapter; $adapter = new ArrayAdapter($array);
MongoAdapter
用于分页 Mongo 游标。
<?php use Pagerfanta\Adapter\MongoAdapter; $cursor = $collection->find(); $adapter = new MongoAdapter($cursor);
MandangoAdapter
用于分页 Mandango 查询。
<?php use Pagerfanta\Adapter\MandangoAdapter; $query = \Model\Article::getRepository()->createQuery(); $adapter = new MandangoAdapter($query);
DoctrineORMAdapter
用于分页 DoctrineORM 查询对象。
<?php use Pagerfanta\Adapter\DoctrineORMAdapter; $queryBuilder = $entityManager->createQueryBuilder() ->select('u') ->from('Model\Article', 'u') ; $adapter = new DoctrineORMAdapter($queryBuilder);
DoctrineODMMongoDBAdapter
用于分页 DoctrineODMMongoDB 查询构建器。
<?php use Pagerfanta\Adapter\DoctrineODMMongoDBAdapter; $queryBuilder = $documentManager->createQueryBuilder('Model\Article'); $adapter = new DoctrineODMMongoDBAdapter($queryBuilder);
DoctrineCollectionAdapter
要分页一个 Doctrine\Common\Collection\Collections
接口,您可以使用 DoctrineCollectionAdapter
。它代理到 Collections 接口上的 count() 和 slice() 方法进行分页。如果您正在使用 Doctrine ORMs 的额外懒加载关联功能,则这很有意义。
<?php use Pagerfanta\Adapter\DoctrineCollectionAdapter; $user = $em->find("Pagerfanta\Tests\Adapter\DoctrineORM\User", 1); $adapter = new DoctrineCollectionAdapter($user->getGroups());
PropelAdapter
用于分页 propel 查询
<?php use Pagerfanta\Adapter\PropelAdapter; $adapter = new PropelAdapter($query);
SolariumAdapter
用于分页 solarium 查询
<?php use Pagerfanta\Adapter\SolariumAdapter; $query = $solarium->createSelect(); $query->setQuery('search term'); $adapter = new SolariumAdapter($solarium, $query);
视图
视图用于渲染 pagerfantas,这样您就可以在不同的项目中重用 pagerfantas 的 HTML,共享它们并使用其他开发人员提供的视图。
视图实现了 Pagerfanta\View\ViewInterface
接口,它有两个方法
<?php /** * Renders a pagerfanta. * * The route generator is any callable to generate the routes receiving the page number * as first and unique argument. * * @param PagerfantaInterface $pagerfanta A pagerfanta. * @param mixed $routeGenerator A callable to generate the routes. * @param array $options An array of options (optional). * * @api */ function render(PagerfantaInterface $pagerfanta, $routeGenerator, array $options = array()); /** * Returns the canonical name. * * @return string The canonical name. * * @api */ function getName();
路由生成器示例
<?php $routeGenerator = function($page) { return '/path?page='.$page; }
Pagerfanta 随附三个视图,默认视图,一个用于 Twitter Bootstrap,以及一个特殊可选视图。
DefaultView
这是默认视图。
<?php use Pagerfanta\View\DefaultView; $view = new DefaultView(); $html = $view->render($pagerfanta, $routeGenerator, array( 'proximity' => 3, ));
选项(默认)
- proximity (3)
- previous_message (Previous)
- next_message (Next)
- css_disabled_class (disabled)
- css_dots_class (dots)
- css_current_class (current)
CSS
.pagerfanta { } .pagerfanta a, .pagerfanta span { display: inline-block; border: 1px solid blue; color: blue; margin-right: .2em; padding: .25em .35em; } .pagerfanta a { text-decoration: none; } .pagerfanta a:hover { background: #ccf; } .pagerfanta .dots { border-width: 0; } .pagerfanta .current { background: #ccf; font-weight: bold; } .pagerfanta .disabled { border-color: #ccf; color: #ccf; } COLORS: .pagerfanta a, .pagerfanta span { border-color: blue; color: blue; } .pagerfanta a:hover { background: #ccf; } .pagerfanta .current { background: #ccf; } .pagerfanta .disabled { border-color: #ccf; color: #cf; }
TwitterBootstrapView
此视图为 Twitter Bootstrap 生成分页。
<?php use Pagerfanta\View\TwitterBootstrapView; $view = new TwitterBootstrapView(); $html = $view->render($pagerfanta, $routeGenerator, array( 'proximity' => 3, ));
选项(默认)
- proximity (3)
- prev_message (← Previous)
- prev_disabled_href ()
- next_message (Next)
- next_disabled_href ()
- dots_message (…)
- dots_href ()
- css_disabled_class (pagination)
- css_previous_class (prev)
- css_next_class (next)
- css_disabled_class (disabled)
- css_dots_class (disabled)
- css_active_class (active)
OptionableView
此视图用于在不同视图中重用选项。
<?php use Pagerfanta\DefaultView; use Pagerfanta\OptionableView; $defaultView = new DefaultView(); // view and default options $myView1 = new OptionableView($defaultView, array('proximity' => 3)); $myView2 = new OptionableView($defaultView, array('previous_message' => 'Anterior', 'next_message' => 'Siguiente')); // using in a normal way $pagerfantaHtml = $myView2->render($pagerfanta, $routeGenerator); // overwriting default options $pagerfantaHtml = $myView2->render($pagerfanta, $routeGenerator, array('next_message' => 'Siguiente!!'));
待办事项
作者
Pablo Díez - pablodip@gmail.com
许可协议
Pagerfanta 在 MIT 许可协议下授权。有关详细信息,请参阅 LICENSE 文件。
赞助商
致谢
Pagerfanta 受 Zend Paginator 的启发。