From b47974104b8b7f21838690a808caf4ae9be66bbb Mon Sep 17 00:00:00 2001 From: Mateusz Zalewski Date: Fri, 30 Aug 2024 18:56:51 +0200 Subject: [PATCH] Display proper number of results on pagination --- src/Controller/Action/SearchAction.php | 3 +++ .../Provider/SearchResultDataProvider.php | 24 +++++++++++++++++++ src/Resources/views/search/index.html.twig | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/Meilisearch/Provider/SearchResultDataProvider.php diff --git a/src/Controller/Action/SearchAction.php b/src/Controller/Action/SearchAction.php index 4e2f4b5..6c702c9 100644 --- a/src/Controller/Action/SearchAction.php +++ b/src/Controller/Action/SearchAction.php @@ -8,6 +8,7 @@ use Setono\Doctrine\ORMTrait; use Setono\SyliusMeilisearchPlugin\Engine\SearchEngineInterface; use Setono\SyliusMeilisearchPlugin\Form\Builder\SearchFormBuilderInterface; +use Setono\SyliusMeilisearchPlugin\Meilisearch\Provider\SearchResultDataProvider; use Setono\SyliusMeilisearchPlugin\Model\IndexableInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -54,6 +55,8 @@ public function __invoke(Request $request): Response return new Response($this->twig->render('@SetonoSyliusMeilisearchPlugin/search/index.html.twig', [ 'searchResult' => $searchResult, + 'pageStartHit' => SearchResultDataProvider::getPageStartHit($searchResult), + 'pageEndHit' => SearchResultDataProvider::getPageEndHit($searchResult), 'searchForm' => $searchForm->createView(), 'items' => $items, ])); diff --git a/src/Meilisearch/Provider/SearchResultDataProvider.php b/src/Meilisearch/Provider/SearchResultDataProvider.php new file mode 100644 index 0000000..2596345 --- /dev/null +++ b/src/Meilisearch/Provider/SearchResultDataProvider.php @@ -0,0 +1,24 @@ +getPage() * (int) $searchResult->getHitsPerPage() - (int) $searchResult->getHitsPerPage(); + } + + public static function getPageEndHit(SearchResult $searchResult): int + { + $totalHits = (int) $searchResult->getTotalHits(); + $page = (int) $searchResult->getPage(); + $hitsPerPage = (int) $searchResult->getHitsPerPage(); + + return ($totalHits < $page * $hitsPerPage) ? $totalHits : $page * $hitsPerPage; + } +} diff --git a/src/Resources/views/search/index.html.twig b/src/Resources/views/search/index.html.twig index ba4da81..b832b24 100644 --- a/src/Resources/views/search/index.html.twig +++ b/src/Resources/views/search/index.html.twig @@ -16,7 +16,7 @@
- Displaying {{ (searchResult.page * searchResult.hitsPerPage) - searchResult.hitsPerPage }} - {{ searchResult.page * searchResult.hitsPerPage }} of {{ searchResult.hitsCount }} + Displaying {{ pageStartHit }} - {{ pageEndHit }} of {{ searchResult.hitsCount }}
{{ form_widget(searchForm.sort) }}