kosinix / pagination-silex
为 Silex 应用程序添加分页功能。与 Paginator 一起使用。
dev-master
2016-11-04 07:51 UTC
Requires
- php: >=5.3.3
This package is not auto-updated.
Last update: 2024-09-14 19:58:44 UTC
README
为 Silex 应用程序添加分页功能。与 Paginator 一起使用。
要求
- PHP >= 5.3.3
- Kosinix\Paginator (独立安装)
- \Symfony\Component\Routing\Generator\UrlGenerator (包含于 Silex 中)
安装
手动
- 从 GitHub 仓库下载 zip 文件。
- 解压 zip 文件并将文件包含到您的项目中。
- 在 /src/ 中包含类
require_once '/path/to/src/Kosinix/Pagination.php'; // Change this to the correct path
Composer
在您的项目目录中,打开命令行并输入
composer require kosinix/pagination:dev-master --prefer-dist
包含位于 vendor/ 中的 autoload.php
require_once '/path/to/vendor/autoload.php'; // Change this to the correct path
用法
示例,在 Controller Provider 中
$controllers->get('/products/{page}/{sort_by}/{sorting}', function (Request $request, Application $app, $page, $sort_by, $sorting) { $sql = 'SELECT COUNT(*) AS `total` FROM product'; $count = $app['db']->fetchAssoc($sql); $count = (int) $count['total']; /** @var \Kosinix\Paginator $paginator */ $paginator = $app['paginator']($count, $page); $sql = sprintf('SELECT * FROM product WHERE 1=1 ORDER BY %s %s LIMIT %d,%d', $sort_by, strtoupper($sorting), $paginator->getStartIndex(), $paginator->getPerPage()); $products = $app['db']->fetchAll($sql); $pagination = new Pagination($paginator, $app['url_generator'], 'admin/products', $sort_by, $sorting); return $app['twig']->render('admin/products/index.twig', array( 'products' => $products, 'pagination' => $pagination )); })->value('page', 1) ->value('sort_by', 'created') ->value('sorting', 'asc') ->assert('page', '\d+') // Numbers only ->assert('sort_by','[a-zA-Z_]+') // Match a-z, A-Z, and "_" ->assert('sorting','(\basc\b)|(\bdesc\b)') // Match "asc" or "desc" ->bind('admin/products');
在您的视图中添加 pagination.twig
{% if pagination.isNeeded() %} <ul class="pagination"> <li><a href="{{ pagination.firstPageUrl() }}">«« First</a></li> {% if pagination.isPreviousPage() %} <li><a href="{{ pagination.previousPageUrl() }}">« Prev</a></li> {% endif %} {% for page in range(pagination.getPaginator().shortPageStart(), pagination.getPaginator().shortPageEnd()) %} {% if pagination.getPaginator().getCurrentPage() == page %} <li class="active"><a href="{{ pagination.pageUrl(page) }}">{{page}}</a></li> {% else %} <li><a href="{{ pagination.pageUrl(page) }}">{{page}}</a></li> {% endif %} {% endfor %} {% if pagination.isNextPage() %} <li><a href="{{ pagination.nextPageUrl() }}">Next »</a></li> {% endif %} <li><a href="{{ pagination.lastPageUrl() }}">Last »»</a></li> </ul> {% endif %}
并在视图中使用它
<h1>Products</h1> {% if products %} <table class="table table-bordered"> <tr> <th><a href="{{ pagination.sortingUrl('id') }}">ID</a></th> <th><a href="{{ pagination.sortingUrl('name') }}">Name</a></th> <th><a href="{{ pagination.sortingUrl('quantity') }}">Quantity</a></th> <th><a href="{{ pagination.sortingUrl('description') }}">Description</a></th> <th><a href="{{ pagination.sortingUrl('created') }}">Date</a></th> </tr> {% for product in products %} <tr> <td>{{ product.id }}</td> <td>{{ product.name }}</td> <td>{{ product.quantity }}</td> <td>{{ product.description }}</td> <td>{{ product.created|date("F d, Y") }}</td> </tr> {% endfor %} </table> <div class="text-center"> {% include 'pagination.twig' %} </div> {% else %} <p>No products found.</p> {% endif %}
就是这样。
许可证
- MIT