metarush/pagination

独立的分页模块,不依赖于任何框架

v1.0.0 2021-02-22 13:13 UTC

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();

default config screenshot

以下拉菜单形式显示

从上一个示例中删除->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();

display as dropdown screenshot

自动截断分页

从上一个示例中删除->setPageLink()->setActiveLink()->build();然后添加以下内容。

    ->setPagesCutoff(5) // Estimated max number of page links to display (default: 7)
    ->build();

显示

echo $p->prevLink() . ' ' . $p->pageLinksAutoCut() . ' ' . $p->nextLink();

auto-cut pagination screenshot

自定义外观

使用自定义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>';

custom look screenshot

从数据库查询数据

从数据库查询数据的代码故意未包含在此模块中。这最好在用户领域实现。以下是示例:

首先,确定$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中的演示。