diff --git a/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php b/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php index e432d14469daf1d53d4485227c37caab729ed954..1e4e2727103e77c3da550bd15953bb77e53862d0 100644 --- a/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php +++ b/module/VuFind/src/VuFind/Search/Params/FacetLimitTrait.php @@ -54,6 +54,13 @@ trait FacetLimitTrait */ protected $facetLimitByField = []; + /** + * Hierarchical facet limit when facets are requested. + * + * @var int|null + */ + protected $hierarchicalFacetLimit = null; + /** * Initialize facet limit from a Config object. * @@ -95,6 +102,28 @@ trait FacetLimitTrait $this->facetLimitByField = $new; } + /** + * Get current limit for hierarchical facets + * + * @return int + */ + public function getHierarchicalFacetLimit() + { + return $this->hierarchicalFacetLimit; + } + + /** + * Set limit for hierarchical facets + * + * @param int $limit New limit + * + * @return void + */ + public function setHierarchicalFacetLimit($limit) + { + $this->hierarchicalFacetLimit = $limit; + } + /** * Get the facet limit for the specified field. * @@ -104,6 +133,19 @@ trait FacetLimitTrait */ protected function getFacetLimitForField($field) { - return $this->facetLimitByField[$field] ?? $this->facetLimit; + $limit = $this->facetLimitByField[$field] ?? $this->facetLimit; + + // Check for a different limit for hierarchical facets: + if (null !== $this->hierarchicalFacetLimit + && $limit !== $this->hierarchicalFacetLimit + && is_callable([$this->getOptions(), 'getHierarchicalFacets']) + ) { + $hierarchicalFacets = $this->getOptions()->getHierarchicalFacets(); + if (in_array($field, $hierarchicalFacets)) { + $limit = $this->hierarchicalFacetLimit; + } + } + + return $limit; } }