Feature: #109018 - PSR-14 event to modify indexed_search result sets
See forge#109018
Description
A new PSR-14 event
\TYPO3\
has been introduced to modify search result sets in
Search.
The event is dispatched in
search after all the result sets have
been built. Event listeners can manipulate complete result sets, including
pagination, rows, section data, and category metadata.
The event has the following methods:
get: Returns all the result sets from the current search.Result Sets () set: Replaces the result sets.Result Sets (array $result Sets) get: Returns the search configuration array.Search Data () get: Returns an array of search words.Search Words () get: Returns the view instance.View () get: Returns the current server request.Request ()
Example
The following example replaces every result set pagination with
Sliding:
<?php
declare(strict_types=1);
namespace MyVendor\MyExtension\EventListener;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Core\Pagination\SimplePagination;
use TYPO3\CMS\Core\Pagination\SlidingWindowPagination;
use TYPO3\CMS\IndexedSearch\Event\AfterSearchResultSetsAreGeneratedEvent;
#[AsEventListener(identifier: 'my-extension/modify-search-result-sets')]
final readonly class ModifySearchPaginationListener
{
public function __invoke(
AfterSearchResultSetsAreGeneratedEvent $event
): void {
$resultSets = $event->getResultSets();
foreach ($resultSets as $key => $resultSet) {
if (($resultSet['pagination'] ?? null)
instanceof SimplePagination
) {
$resultSets[$key]['pagination']
= new SlidingWindowPagination(
$resultSet['pagination']->getPaginator(),
5
);
}
}
$event->setResultSets($resultSets);
}
}
Impact
This event allows search result sets to be modified in a single listener call. It enables custom pagination strategies, as well as advanced search result transformations.