我正在使用knp paginator并且它运行良好但是当我想使用它的排序功能时,我有问题在树枝中获得排序方向。
以下代码指示如何获取已排序的表头但未考虑如何获取已排序的表头方向。
{# total items count #}
<div class="count">
{{ pagination.getTotalItemCount }}
</div>
<table>
<tr>
{# sorting of properties based on query components #}
<th>{{ knp_pagination_sortable(pagination, 'Id', 'a.id') }}</th>
<th{% if pagination.isSorted('a.Title') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Title', 'a.title') }}</th>
</tr>
{# table body #}
{% for article in pagination %}
<tr {% if loop.index is odd %}class="color"{% endif %}>
<td>{{ article.id }}</td>
<td>{{ article.title }}</td>
</tr>
{% endfor %}
</table>
{# display navigation #}
<div class="navigation">
{{ knp_pagination_render(pagination) }}
</div>
我从以下链接的KnpPaginator文档中获取此代码: https://github.com/KnpLabs/KnpPaginatorBundle
答案 0 :(得分:9)
您应该只能在树枝模板中使用{{ pagination.getDirection() }}
来查找当前的排序方向(如果有的话),然后根据它设置类。
{% set direction = pagination.getDirection() %}
<th{% if pagination.isSorted('p.id') %} class="sorted {{ direction }}"{% endif %}>
{{ knp_pagination_sortable(pagination, 'Id', 'p.id') }}
</th>
但是......截至这篇文章,KNP还没有合并这个修复: https://github.com/sroze/KnpPaginatorBundle/commit/3105a38714c6f89c590e49e9c50475f7a777009d
如果没有设置方向参数,则当前的Paginator包会抛出错误。
因此,在上述修复程序合并之前,您仍然可以更加详细地获取方向:
{% set directionParam = pagination.getPaginatorOption('sortDirectionParameterName') %}
{% set params = pagination.getParams() %}
{% set direction = params[directionParam] is defined ? params[directionParam] : null %}
<th{% if pagination.isSorted('p.id') %} class="sorted {{ direction }}"{% endif %}>
{{ knp_pagination_sortable(pagination, 'Id', 'p.id') }}
</th>
答案 1 :(得分:4)
当您调用{{ knp_pagination_sortable(pagination, 'Id', 'a.id') }}
时,bundle会自动生成一个包含排序方向信息的类的链接,如下所示:<a translationcount="" class="asc" href="?sort=a.id&direction=desc&page=1" title="Id">Id</a>
所以只需将此类放入css文件中并使用箭头。如果由于某种原因,您需要在控制器内部获取排序方向,只需从请求$request->query->get('direction')
中读取它。