Как получить направление пагинации в прутик для KNP paginator?

Я использую KNP paginator, и он работает хорошо, но когда я хочу использовать его функцию сортировки, у меня проблема с получением направления сортировки в twig.

следующий код указывает, как получить заголовок отсортированной таблицы, но не о том, как получить направление заголовка отсортированной таблицы.

{# 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

2 ответов


вы должны быть в состоянии просто использовать {{ pagination.getDirection() }} в шаблоне twig, чтобы найти текущее направление сортировки (если есть), затем настройте свои классы на основе этого.

{% 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>

когда вы называете {{ 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 $request->query->get('direction').