xandros15/slim-pagination

为 slim3 使用的简单分页

0.1.1 2020-12-16 23:57 UTC

This package is auto-updated.

Last update: 2024-09-03 01:30:08 UTC


README

为 slim3 使用的简单分页

需求

PHP 7.0 或更高版本

Slim 3.0

安装

通过 composer: composer require xandros15/slim-pagination

基本用法

在控制器回调中创建分页对象,通过渲染器获取它并将其作为变量传递

<?php
 use Xandros15\SlimPagination\Pagination;
 $app->get('/users', function (Request $request, Response $response) {
 $users = User::search($request);
 $pagination = new Pagination($request, $this->get('router'),[
                Pagination::OPT_TOTAL => count($users), //number of items
            ]);
 $paginationString = $this-view->fetch('pagination', ['pagination' => $pagination]);
 return $this->view->render('user.index', ['pagination' => $paginationString]);
 })->name('user.index');

通过模板管理器进行渲染。

PHP 模板示例

<nav class="text-center col-xs-12">
    <ul class="pagination">
        <?php /** @var $pagination Xandros15\SlimPagination\Pagination */ ?>
        <?php if ($pagination->previous()['isCurrent']): ?>
            <li class="disabled">
                <span><?= $pagination->previous()['pageName'] ?></span>
            </li>
        <?php else: ?>
            <li>
                <a aria-label="previous" href="<?= $pagination->previous()['pathFor'] ?>">
                    <span aria-hidden="true"><?= $pagination->previous()['pageName'] ?></span>
                </a>
            </li>
        <?php endif ?>
        <?php foreach ($pagination as $page): ?>
            <?php if ($page['isSlider']): ?>
                <li class="disabled">
                    <span><?= $page['pageName'] ?></span>
                </li>
            <?php elseif ($page['isCurrent']): ?>
                <li class="active">
                    <span><?= $page['pageName'] ?></span>
                </li>
            <?php else: ?>
                <li>
                    <a href="<?= $page['pathFor'] ?>"><?= $page['pageName'] ?></a>
                </li>
            <?php endif; ?>
        <?php endforeach; ?>
        <?php if ($pagination->next()['isCurrent']): ?>
            <li class="disabled">
                <span><?= $pagination->next()['pageName'] ?></span>
            </li>
        <?php else: ?>
            <li>
                <a aria-label="next" href="<?= $pagination->next()['pathFor'] ?>">
                    <span aria-hidden="true"><?= $pagination->next()['pageName'] ?></span>
                </a>
            </li>
        <?php endif ?>
    </ul>
</nav>

Twig 模板示例

{% if pagination.canCreate %}
    <nav class="text-center col-xs-12">
        <ul class="pagination">
            {% if pagination.previous.isCurrent %}
                <li class="disabled">
                    <span>{{ pagination.previous.pageName | raw }}</span>
                </li>
            {% else %}
                <li>
                    <a aria-label="previous" href="{{ pagination.previous.pathFor }}">
                        <span aria-hidden="true">{{ pagination.previous.pageName | raw }}</span>
                    </a>
                </li>
            {% endif %}
            {% for page in pagination %}
                {% if page.isSlider %}
                    <li class="disabled"><span>{{ page.pageName }}</span></li>
                {% elseif page.isCurrent %}
                    <li class="active"><span>{{ page.pageName }}</span></li>
                {% else %}
                    <li><a href="{{ page.pathFor}}">{{ page.pageName }}</a></li>
                {% endif %}
            {% endfor %}
            {% if pagination.next.isCurrent %}
                <li class="disabled">
                    <span aria-hidden="true">{{ pagination.next.pageName | raw }}</span>
                </li>
            {% else %}
                <li>
                    <a aria-label="next" href="{{ pagination.next.pathFor }}">
                        <span aria-hidden="true">{{ pagination.next.pageName | raw }}</span>
                    </a>
                </li>
            {% endif %}
        </ul>
    </nav>
{% endif %}

选项

页面列表类型

PageList::NORMAL 是带有滑块的普通分页

normal

PageList::MINI 是简约分页

mini

可以通过简单的代码创建

twig

{% for page in pagination %}
    {% if page.isCurrent %}
        <li class="disabled"><span>{{ page.pageName }}</span></li>
    {% else %}
        <li><a href="{{ page.pathFor }}">{{ page.pageName }}</a></li>
    {% endif %}
{% endfor %}

php

<?php foreach ($pagination as $page): ?>
    <?php if ($page['isCurrent']): ?>
        <li class="disabled">
            <span><?= $page['pageName'] ?></span>
        </li>
    <?php else: ?>
        <li>
            <a href="<?= $page['pathFor'] ?>"><?= $page['pageName'] ?></a>
        </li>
    <?php endif; ?>
<?php endforeach; ?>

PageList::NONE 关闭分页

方法和属性

页面

pathFor - 返回此页面的路径

isCurrent - 检查此页面是否为当前页面

pageName - 返回页面名称(例如,编号)

isSlider - 检查此页面是否为滑块

分页

previous() - 获取上一页,如果不存在则返回当前页

next() - 获取下一页,如果不存在则返回当前页

first() - 获取第一页

last() - 获取最后一页

canCreate() - 检查是否可以创建分页

toArray() - 返回定义的参数数组

  • per_page: 每页有多少项
  • current_page: 当前页码
  • next_page_url: 下一页的路径
  • prev_page_url: 上一页的路径
  • from: 第一项的编号
  • to: 最后一项的编号

toJson() - 与 toArray() 相同,只是编译成 JSON 字符串