TYPO3 Tipps und Tricks: Suche in der Listenansicht verbessern (im TYPO3-Backend)

In diesem Blogbeitrag zeigen wir, wie man im TYPO3-Backend in der Listenansicht (Listview) die Suche (im TCA über das Feld "searchFields" definiert) verbessern bzw. individualisieren kann.

Bei manchen Projekten wäre es nützlich, die Suche der Listenansicht zu verbessern, um zum Beispiel nach Produkten in einer bestimmten Kategorie zu suchen. Oder auch Daten einer Relation (Verbindung zum Beispiel Product->Categories.title) zu durchsuchen - aktuell ist dies nicht möglich.

Über die TCA wird definiert, welche Felder durchsucht werden können. Ein Beispiel hierfür ist:

'ctrl' => array(	'title' => 'Produkt',	....	'searchFields' => 'title,code,description,sku,description',	....),

Ein durchsuchen von zum Beispiel 'category.title' ist damit leider nicht möglich. Der Benutzer möchte nach "Kategorie:Werkzeuge" suchen, und dann sollen alle Elemente geliefert werden, welche eine Verbindung (über das Feld 'category') zu dieser Kategorie besitzen.

Damit man so ein Suchverhalten umsetzen kann, gibt es einen Hook, mit welchem man das Suchquery anpassen kann - den modifyQuery-Hook. Dieser muss zuerst in der ext_localconf.php registriert werden:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][\TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList::class]['modifyQuery'][131313131] = \Varioous\VaSite\Hooks\DataHandler::class;

Dieser Hook wird nun natürlich bei allen Listview-Queries aufgerufen - daher muss zuerst auf die zu durchsuchende Tabelle und das Modul (in welchem sich der Benutzer aktuell befindet) überprüft werden. Anschließend wird überprüft, ob der Benutzer nach einer bestimmten Kategorie sucht. Ist dies der Fall, wird das Query dahingehend angepasst, dass zuerst die Kategorie gesucht wird und anschließend werden alle Elemente geliefert, die mit dieser Kategorie verbunden sind.

public function modifyQuery(        array        $parameters,        string       $table,        int          $pageId,        array        $additionalConstraints,        array        $fieldList,        QueryBuilder $queryBuilder    ) {	// check if we want to modify the query -> check for table, route, module	if (!is_null(GeneralUtility::_GP('route')) && GeneralUtility::_GP('route') == '/module/web/list'		&& !is_null(GeneralUtility::_GP('id')) && GeneralUtility::_GP('id') == '37'		&& !is_null(GeneralUtility::_GP('search_field'))		&& !is_null(GeneralUtility::_GP('table')) && GeneralUtility::_GP('table') == 'tx_vasite_domain_model_product') {		//get search query		$searchField = strtolower(GeneralUtility::_GP(('search_field')));				//check if search query contains marker "kategorie:"		if (!empty($searchField) && strpos($searchField, 'kategorie:') !== false) {			$categoryToSearch = trim(str_replace('kategorie:', '', $searchField));						//search if we have a matching cagegory			$categoryToSearchResult = $this->categoryRepository->findByTitle($categoryToSearch);			if (!empty($categoryToSearchResult) && $categoryToSearchResult->count() == 1) {				/** @var Category $categoryToSearchObject */				$categoryToSearchObject = $categoryToSearchResult->getFirst();				$queryBuilder->resetQueryPart('where');			   				//search for elements that have a relation to this category				$queryBuilder->andWhere($queryBuilder->expr()->in('category', [$categoryToSearchObject->getUid()]));			}		}	}}

Hier eine Beispielsuche aus dem TYPO3-Backend:

TYPO3 Backend Suche in Listenansicht optimieren
TYPO3 Backend - Optimierte Suche nach Kategorien in Listenansicht

Wir entwickeln digitale Lösungen mit Leidenschaft

Warum wir das tun? Weil die Verwirklichung Ihrer Vision unser größter Anspruch und die schönste Anerkennung ist. Deshalb nehmen wir uns gerne ausreichend Zeit für die Realisierung Ihres digitalen Projekts.

Kontaktieren Sie uns, wir sind gerne für Ihre Fragen da:

Passend zu diesem Thema:

TYPO3 Tipps und Tricks: UriBuilder im Backend-Context - Links im Backend-Context erstellen

TYPO3 Tipps und Tricks: UriBuilder im Backend-Context - Links im Backend-Context…

Diesmal beschäftigen wir uns in der Reihe "TYPO3 Tipps und Tricks" mit dem Erstellen von URL's im TYPO3. Im Backend-Context (zum Beispiel in Scheduler…

TYPO3 Tipps und Tricks: Seite programmatisch erstellen / Create Page Programmatically

TYPO3 Tipps und Tricks: Seite programmatisch erstellen / Create Page Programmati…

Wie man eine neue Seite (TYPO3 Page) programmatisch erstellt, zeigen wir in diesem Blogbeitrag. Dies ist zum Beispiel für einen Import oder bei Schnit…

TYPO3 Tipps und Tricks: (Custom) Sitemap entwickeln mittels ext:seo

TYPO3 Tipps und Tricks: (Custom) Sitemap entwickeln mittels ext:seo

In diesem Blogbeitrag zeigen wir, wie man mit TYPO3 unter Verwendung der SEO-Core-Extension eine eigene XML-Sitemap erstellen bzw. entwickeln kann.