如果你愿意改善显示超过1000个结果的页面的性能, 则是或是, 你将必须实现分页器。不仅是为了在浏览器中显示1K行, 可能会根据你使用的JavaScript或样式明显降低页面的性能, 此外, 并非所有用户都希望使用这些1K行进行滚动。
对于Symfony而言, KnpPaginatorBundle是最著名的捆绑软件, 它可以帮助你使用非常简单的API来对查询结果进行分页:
- 不需要初始化特定的适配器
- 可以按任何需要的方式进行自定义, 等等:分页视图, 事件订阅者。
- 可以根据请求参数添加自定义过滤, 排序功能。
- 关注点分离, 分页器仅负责生成分页视图, 即分页视图-用于表示目的。
{#/** * @file * Twitter Bootstrap v4 Sliding pagination control implementation. * * View that can be used with the pagination module * from the Twitter Bootstrap v4 CSS Toolkit * https://v4-alpha.getbootstrap.com/components/pagination/ * * @author Carlos Delgado <
dev@ourcodeworld.com>
*/#}{% if pageCount >
1 %}<
ul class="pagination">
{% if previous is defined %}<
li class="page-item">
<
a rel="prev" href="http://www.srcmini.com/{{ path(route, query|merge({(pageParameterName): previous})) }}" class="page-link">
&
laquo;
&
nbsp;
Previous<
/a>
<
/li>
{% else %}<
li class="page-item disabled">
<
span class="page-link">
&
laquo;
&
nbsp;
Previous<
/span>
<
/li>
{% endif %}{% if startPage >
1 %}<
li class="page-item">
<
a href="http://www.srcmini.com/{{ path(route, query|merge({(pageParameterName): 1})) }}" class="page-link">
1<
/a>
<
/li>
{% if startPage == 3 %}<
li class="page-item">
<
a href="http://www.srcmini.com/{{ path(route, query|merge({(pageParameterName): 2})) }}" class="page-link">
2<
/a>
<
/li>
{% elseif startPage != 2 %}<
li class="page-item disabled">
<
span class="page-link">
&
hellip;
<
/span>
<
/li>
{% endif %}{% endif %}{% for page in pagesInRange %}{% if page != current %}<
li class="page-item">
<
a href="http://www.srcmini.com/{{ path(route, query|merge({(pageParameterName): page})) }}" class="page-link">
{{ page }}<
/a>
<
/li>
{% else %}<
li class="active page-item">
<
span class="page-link">
{{ page }}<
/span>
<
/li>
{% endif %}{% endfor %}{% if pageCount >
endPage %}{% if pageCount >
(endPage + 1) %}{% if pageCount >
(endPage + 2) %}<
li class="page-item disabled">
<
span class="page-link">
&
hellip;
<
/span>
<
/li>
{% else %}<
li class="page-item">
<
a href="http://www.srcmini.com/{{ path(route, query|merge({(pageParameterName): (pageCount - 1)})) }}" class="page-link">
{{ pageCount -1 }}<
/a>
<
/li>
{% endif %}{% endif %}<
li>
<
a href="http://www.srcmini.com/{{ path(route, query|merge({(pageParameterName): pageCount})) }}" class="page-link">
{{ pageCount }}<
/a>
<
/li>
{% endif %}{% if next is defined %}<
li class="page-item">
<
a rel="next" class="page-link" href="http://www.srcmini.com/{{ path(route, query|merge({(pageParameterName): next})) }}">
Next&
nbsp;
&
raquo;
<
/a>
<
/li>
{% else %}<
li class="page-item disabled">
<
span class="page-link">
Next&
nbsp;
&
raquo;
<
/span>
<
/li>
{% endif %}<
/ul>
{% endif %}
在本例中, 我们将文件存储在app / resources / views / others / twitter_bootstrap_v4_pagination.html.twig目录中, 因此我们可以将分页程序包配置为在config.yml文件中使用以下yaml来使用此文件:
knp_paginator:template:pagination: "others/twitter_bootstrap_v4_pagination.html.twig"
现在你的项目实现了Bootstrap 4, 在使用最新的” 稳定” 版本的Bootstrap 4的类时, 分页器将正确呈现。
编码愉快!
推荐阅读
- 如何从PHP中的2个值计算百分比变化(增加和减少)
- 如何在Symfony 3中使用PHP将PDF转换为图像
- 如何使用BeSimpleI18nRoutingBundle在Symfony 3中处理路由国际化
- 如何在Unity3d游戏中检索Android安装引荐来源网址
- onClick按钮导致Android崩溃
- Word = win32.Dispatch(“ Word.Application”)不管Word.Visible = False命令,每隔一次显示打开的文件
- Mean stack web app的基于角色的访问控制
- 发送的广播数据报在Android中无法通过EACCES
- Android中的动画ProgressBar更新