Я расширил Sonata NewsBundle, чтобы включить регион для новостей. Это должно показать британским новостям Великобритании, новостям США, американским новостям и так далее.Symfony2 DatagridBundle/SonataNewsBundle Pager nbРезультаты не рассчитаны правильно
Несмотря на то, что в объекте Pager используется правильный запрос, счетчик nbResults и страница подсчитывают новости во всех регионах, а не только в области запроса. Это вызывает неправильное количество страниц.
pager.getResults() выбирает правильные сообщения. Вот ссылка на ветку объекта Pager для справки. Это новости Великобритании, которая показывает только 2 сообщения на архиве, но имеет счетчик 26 через 3 страниц:
Pager {#1493 ▼
#queryBuilder: null
#page: 1
#maxPerPage: 10
#lastPage: 3.0
#nbResults: "26"
#cursor: 1
#parameters: []
#currentMaxLink: 1
#maxRecordLimit: false
#maxPageLinks: 0
#results: null
#resultsCounter: 0
#query: ProxyQuery {#1504 ▼
#queryBuilder: QueryBuilder {#1492 ▼
-_em: EntityManager {#537 …11}
-_dqlParts: array:9 [▶]
-_type: 0
-_state: 1
-_dql: "SELECT p, t FROM Acme\NewsBundle\Entity\Post p LEFT JOIN p.tags t WITH t.enabled = true LEFT JOIN p.author a WITH a.enabled = true LEFT JOIN p.regions r WHERE p.enabled = :enabled AND p.publicationDateStart <= :startDate AND p.collection = :collectionid AND r.id = :region AND p.id IN ('2','1') ORDER BY p.publicationDateStart DESC"
-parameters: ArrayCollection {#1500 ▶}
-_firstResult: null
-_maxResults: null
-joinRootAliases: array:3 [▶]
#cacheable: false
#cacheRegion: null
#cacheMode: null
#lifetime: 0
}
#sortBy: null
#sortOrder: null
#firstResult: 0
#maxResults: 10
#results: null
}
#countColumn: array:1 [▶]
}
Эта ветка разметки (немного сокращенная)
<div class="container news-list">
{% set posts = pager.getResults() %}
{% for post in posts %}
<div class="news-item">
// Mark up for post item
</div>
{% else %}
{{ 'no_post_found'|trans({}, 'SonataNewsBundle') }}
{% endfor %}
<ul class="pager">
<li class="previous">
<a class="btn {% if pager.page == pager.firstPage %} disabled{% endif %}"
{% if pager.page != pager.firstPage %}
href="{{ url(route, route_parameters|merge({'page': pager.previouspage})) }}"
{% endif %}
title="{{ 'link_previous_page'|trans({}, 'SonataNewsBundle') }}">
{{ 'link_previous_page'|trans({}, 'SonataNewsBundle') }}
</a>
</li>
<li class="next">
<a class="btn {% if pager.page == pager.lastPage %} disabled{% endif %}"
{% if pager.page != pager.lastPage %}
href="{{ url(route, route_parameters|merge({'page': pager.nextpage})) }}"
{% endif %}
title="{{ 'link_next_page'|trans({}, 'SonataNewsBundle') }}">
{{ 'link_next_page'|trans({}, 'SonataNewsBundle') }}
</a>
</li>
</ul>
</div>
Как я могу получить пейджер, чтобы показать правильную информацию о странице?