From 880b805ffdef5492f09fa2ad24334d79505dd84f Mon Sep 17 00:00:00 2001 From: thomas-sc Date: Mon, 13 Jan 2025 10:46:02 +0100 Subject: [PATCH] new entity type 'multiselect' for filters in setup.typoscript Filters with this entity are multi selectable --- Classes/Common/QueryParamsBuilder.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Classes/Common/QueryParamsBuilder.php b/Classes/Common/QueryParamsBuilder.php index 646f671..ca4d42a 100644 --- a/Classes/Common/QueryParamsBuilder.php +++ b/Classes/Common/QueryParamsBuilder.php @@ -138,13 +138,14 @@ private function getAggs(): array $entityField = $entityType['field']; $entityTypeKey = $entityType['key'] ?? null; + $entityTypeMultiselect = $entityType['multiselect'] ?? null; - // create filter in aggs for filtering aggs (without filtering the own key for multiple selections) + // create filter in aggs for filtering aggs (without filtering the own key for multiple selections if multiselect == yes) $filters = array_values( array_filter( array_map( - function ($key, $values) use ($entityField, $filterTypes) { - if ($key !== $entityField) { + function ($key, $values) use ($entityField, $filterTypes, $entityType) { + if ($key !== $entityField || ($filterTypes[$key]['multiselect'] !== 'yes')) { // handle nested fields if (($filterTypes[$key]['type'] == 'nested') && (isset($filterTypes[$key]['key']))) { return [ @@ -215,7 +216,8 @@ function ($key, $values) use ($entityField, $filterTypes) { $entityField => [ 'terms' => [ 'field' => $entityField . '.keyword', - 'min_doc_count' => 0 + // show docs with count 0 only for multiple select fields + 'min_doc_count' => $entityTypeMultiselect === 'yes' ? 0 : 1, ] ] ], @@ -327,7 +329,8 @@ private function getFilterTypes(): array return [ $filter['field'] => [ 'type' => $filter['type'], - 'key' => $filter['key'] ?? '' + 'key' => $filter['key'] ?? '', + 'multiselect' => $filter['multiselect'] ?? '' ] ]; })