2013-11-17 5 views
6

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

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

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

ответ

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> 

... Но, как этот пост, КНП еще не слился это исправление: 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> 
4

При вызове {{ knp_pagination_sortable(pagination, 'Id', 'a.id') }}, расслоение автоматически генерирует ссылку с классом, удерживающей информацию о направлении сортировки, которая выглядит примерно так: <a translationcount="" class="asc" href="?sort=a.id&direction=desc&page=1" title="Id">Id</a> Поэтому просто поместите этот класс в свой файл css и создайте его со стрелкой. Если вам по какой-то причине необходимо получить направление сортировки внутри контроллера, просто прочитайте его по запросу $request->query->get('direction').

 Смежные вопросы

  • Нет связанных вопросов^_^