metarush / pagination
独立的分页模块,不依赖于任何框架
v1.0.0
2021-02-22 13:13 UTC
Requires
- php: >=7.4
Requires (Dev)
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-09-22 21:38:57 UTC
README
独立的分页模块,不依赖于任何框架
安装
通过composer安装为metarush/pagination
示例用法
use MetaRush\Pagination\Builder; // define minimum required vars $currentPage = $_GET['page'] ? (int) $_GET['page'] : 1; $path = '/demo.php?page='; $totalItems = 50; $itemsPerPage = 5;
默认配置
$p = (new Builder) ->setTotalItems($totalItems) ->setItemsPerPage($itemsPerPage) ->setCurrentPage($currentPage) ->setPath($path) ->build();
显示
echo $p->prevLink() . ' ' . $p->pageLinksUncut() . ' ' . $p->nextLink();
以下拉菜单形式显示
从上一个示例中删除->build();
然后添加以下内容。
->setPageLink('<option>{{page}}</option>') ->setActiveLink('<option selected="selected">{{page}}</option>') ->build();
注意:下拉菜单功能需要以下示例JavaScript代码。
<script> document.getElementById('myDropdown').addEventListener('change', (event) => { location.href = `<?=$path?>${event.target.value}`; }); </script>
显示
echo $p->prevLink() . ' <select id="myDropdown">' . $p->pageLinksUncut() . '</select> ' . $p->nextLink();
自动截断分页
从上一个示例中删除->setPageLink()
、->setActiveLink()
和->build();
然后添加以下内容。
->setPagesCutoff(5) // Estimated max number of page links to display (default: 7) ->build();
显示
echo $p->prevLink() . ' ' . $p->pageLinksAutoCut() . ' ' . $p->nextLink();
自定义外观
使用自定义HTML/CSS或Bootstrap/Materialize等框架。
从上一个示例中删除->build();
然后添加以下内容。
->setPageLink('<li class="page-item"><a class="page-link" href="{{path}}{{page}}">{{page}}</a></li>') ->setActiveLink('<li class="page-item active"><span class="page-link">{{page}}</span></li>') ->setDisabledPrevLink('<li class="page-item disabled"><span class="page-link">Prev</span></li>') ->setDisabledNextLink('<li class="page-item disabled"><span class="page-link">Next</span></li>') ->setEllipsis('<li class="page-item"><span class="page-link">...</span></li>') ->setPrevLink('<li class="page-item"><a class="page-link" href="{{path}}{{page}}">Prev</a></li>') ->setNextLink('<li class="page-item"><a class="page-link" href="{{path}}{{page}}">Next</a></li>') ->build();
显示
echo '<ul class="pagination">' . $p->prevLink() . ' ' . $p->pageLinksAutoCut() . ' ' . $p->nextLink().' </ul>';
从数据库查询数据
从数据库查询数据的代码故意未包含在此模块中。这最好在用户领域实现。以下是示例:
首先,确定$limit
和$offset
$limit = $itemsPerPage; $offset = ($itemsPerPage * $currentPage) - $itemsPerPage;
原始SQL
$sql = "SELECT * FROM your_table LIMIT $limit OFFSET $offset";
Laravel查询构建器
$result = DB::table('your_table') ->offset($offset) ->limit($limit) ->get();
Doctrine DBAL查询构建器
$queryBuilder ->select('*') ->from('your_table') ->setFirstResult($offset) ->setMaxResults($limit);
工作演示
检查public/demo.php
中的演示。