morozgrafix/paginator-twig-extension

一个Twig扩展,用于帮助在Twig模板中生成简单的分页。

v0.1.0 2019-05-08 18:43 UTC

This package is auto-updated.

Last update: 2024-09-11 15:13:56 UTC


README

一个Twig扩展,用于帮助在Twig模板中生成简单的分页。

Latest Stable Version Latest Unstable Version Build Status Scrutinizer Code Quality Code Coverage License composer.lock available

简介

此扩展帮助在Twig模板中构建分页。它将返回一个包含所有必要信息的数组,以便快速显示分页链接。它不会生成任何HTML,如何显示取决于您。以下示例展示了生成与Bootstrap CSS框架兼容的分页的一种方法。

Example1

使用以下函数调用此扩展,并接受以下参数

paginator(int current_page, int last_page, int num_items, string separator)

参数详情

  • current_page - 访问者当前所在的页面
  • last_page - 数据集中的最后一页(总页数)
  • num_items - 分页条中将要显示的项目数量。 注意: 允许的最小值是7,如果传递的是偶数,则将其增加为下一个奇数以保持对称。
  • separator(可选)- 用于分页条中不可见的数字的自定义分隔符。默认设置为...

基本示例

调用

{% set paginator = paginator(1, 10 , 7) %}

将设置paginator twig变量为

array (
  'curr_page' => 1,
  'last_page' => 10,
  'num_items' => 7,
  'separator' => '...',
  'pagination' => array (
    0 => 1,
    1 => 2,
    2 => 3,
    3 => 4,
    4 => 5,
    5 => '...',
    6 => 10,
  ),
)

安装

使用Composer

composer require morozgrafix/paginator-twig-extension

在Twig模板中的逻辑

以下示例与Bootstrap 4 CSS框架兼容。

<nav aria-label="pagination">
    <ul class="pagination justify-content-center">
        {# Optional Prev #}
        <li class="page-item {% if paginator.curr_page == 1 %} disabled{% endif %}">
            <a class="page-link" href="?page={{ paginator.curr_page-1 }}">Prev</a>
        </li>

        {# Main Pagination Loop #}
        {% for i in paginator.pagination %}
            <li class="page-item{% if i == paginator.curr_page %} active{% endif %}{% if i == paginator.separator %} disabled{% endif %}">
                <a class="page-link" href="?page={{ i }}">{{ i }}</a>
            </li>
        {% endfor %}

        {# Optional Next #}
        <li class="page-item {% if paginator.curr_page == paginator.last_page %} disabled{% endif %}">
            <a class="page-link" href="?page={{ paginator.curr_page+1 }}">Next</a>
        </li>
    </ul>
</nav>

包含可选的上一页/下一页的结果

Example2

不包含上一页/下一页的结果

Example3

其他示例

自定义分隔符

{% set paginator = paginator(10, 25 , 11, '¯\_(ツ)_/¯') %}

结果

array (
  'curr_page' => 10,
  'last_page' => 25,
  'num_items' => 11,
  'separator' => '¯\\_(ツ)_/¯',
  'pagination' => array (
    0 => 1,
    1 => '¯\\_(ツ)_/¯',
    2 => 7,
    3 => 8,
    4 => 9,
    5 => 10,
    6 => 11,
    7 => 12,
    8 => 13,
    9 => '¯\\_(ツ)_/¯',
    10 => 25,
  ),
)

Example4

指定了偶数个项目,为了显示对称性,它被增加到下一个奇数(10 -> 11)

{% set paginator = paginator(420, 999 , 10) %}

结果

array (
  'curr_page' => 420,
  'last_page' => 999,
  'num_items' => 11,
  'separator' => '...',
  'pagination' => array (
    0 => 1,
    1 => '...',
    2 => 417,
    3 => 418,
    4 => 419,
    5 => 420,
    6 => 421,
    7 => 422,
    8 => 423,
    9 => '...',
    10 => 999,
  ),
)

Example5

附言

这是我写的第一个Twig扩展,它是在我开发一个需要分页的更大项目期间迅速开发的。我确信有一些陷阱和可以添加的额外功能。请随时提出问题或提交改进的PR。谢谢。🙇