Как получить направление пагинации в прутик для 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')
.